乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 64|回复: 3

Intersectwith方法得出错误结果

[复制链接]

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2008-10-19 17:30:52 | 显示全部楼层 |阅读模式
您好;ve外部参照是一个分解的多面网格,因此它由三角形面组成。我正在编写代码,使用网格中的三角形计算直线上的标高。本人'我写了一个版本,它可以工作,但速度很慢-对于多段线中的每个点,它会查看网格中的每个三角形,直到找到该点所在的三角形,然后对该级别进行插值。所以我想我可以通过减少要循环通过的三角形的数量来加快速度,通过找到哪些三角形切割多段线,然后我只需要循环通过这些三角形。问题是我的代码没有't work-表示网格中的每个三角形都与直线相交
代码如下(这只是要查找的位来过滤三角形,而不是插值位):
  1. Sub LevelFromTria2()
  2.     Dim objPLine As AcadLWPolyline
  3.     Dim objTria As Acad3DFace
  4.     Dim varCoords As Variant  '
  5.     Dim objBlock As AcadBlock
  6.     Dim lngCount As Long
  7.     Dim objTriaSides As AcadLWPolyline
  8.     Dim varIntPoints As Variant
  9.     Dim dblTriaSidesCoords(0 To 5) As Double
  10.     Dim varPnt As Variant
  11.    
  12.    
  13.     On Error Resume Next '* Do so that if layer exists no error
  14.     ThisDrawing.Layers.Add ("Temp Triangles")
  15.     On Error GoTo 0
  16.     ThisDrawing.Utility.GetEntity objPLine, varPnt, "Select polyline: "
  17.     Set objBlock = ThisDrawing.Blocks("draw tria exploded")
  18.    
  19.     '* Go through all the items in the xref
  20.     For lngCount = 0 To objBlock.Count - 1
  21.    
  22.         '* See if the item is a 3d face
  23.         If objBlock.Item(lngCount).ObjectName = "AcDbFace" Then
  24.             '* If it is get the face element
  25.             Set objTria = objBlock.Item(lngCount)
  26.             '* See if the face intersects with the polyline
  27.             varIntPoints = objTria.IntersectWith(objPLine, acExtendNone)
  28.             
  29.             '* If it does, draw the triangle - TEMP MEASURE TO SEE IF IT IS FINDING THE RIGHT TRIANGLES
  30.             If VarType(varIntPoints)  vbEmpty Then
  31.                 '* Get co-ords of the 3d face
  32.                 varCoords = objTria.Coordinates
  33.                 '* Set up 2d coords for the triangle edge
  34.                 dblTriaSidesCoords(0) = varCoords(0)
  35.                 dblTriaSidesCoords(1) = varCoords(1)
  36.                 dblTriaSidesCoords(2) = varCoords(3)
  37.                 dblTriaSidesCoords(3) = varCoords(4)
  38.                 dblTriaSidesCoords(4) = varCoords(6)
  39.                 dblTriaSidesCoords(5) = varCoords(7)
  40.                 '* Add a LW polyline to show the triangle which intersects with the polyline
  41.                 Set objTriaSides = ThisDrawing.ModelSpace.AddLightWeightPolyline(dblTriaSidesCoords)
  42.                 objTriaSides.Closed = True
  43.                 objTriaSides.Layer = "Temp Triangles"
  44.                 objTriaSides.color = acMagenta
  45.                 objTriaSides.Update
  46.             End If
  47.             
  48.         End If
  49.    
  50.     Next lngCount
  51.                         
  52. End Sub

附件是我正在测试的图形。我试图获取级别的那条线是黄线-因此在提示时选择它
I'我想我'我的相交方法出了点问题。而不是使用脸本身;我也试着用它做一条LW多段线,但这并没有#039;也不行
如果您能就如何实现上述功能提出任何建议,我们将不胜感激。(或者,如果你有另一个概念来加速从三角测量中获取水平线的方式,我也很感兴趣!)
谢谢Jon

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

0

主题

6

帖子

4

银币

初来乍到

Rank: 1

铜币
7
发表于 2008-10-20 02:47:26 | 显示全部楼层
PS:在示例中,绘制的线位于许多三角形的边缘,在情况I#039中可能会发生很多情况;我为…提供餐饮。我不知道'我不知道这是否会引发测试I#039;我在做,但奇怪的是为什么它选择了所有的三角形?
回复

使用道具 举报

0

主题

7

帖子

3

银币

初来乍到

Rank: 1

铜币
7
发表于 2008-10-21 01:17:33 | 显示全部楼层
如果VarType(varIntPoints)&lt&燃气轮机;vbEmpty&nbsp 不#039;t工作,因为计数-1(无交点)不为空
回复

使用道具 举报

0

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
7
发表于 2008-10-21 03:13:33 | 显示全部楼层
谢谢Bryco。我在Autodesk论坛上找到了类似的答案。我只是按照帮助文件-这是错误的!
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-4 02:27 , Processed in 2.508055 second(s), 65 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表