VB。有效交叉获胜
我正在构建一个VB点网络程序,从图形中提取数据,而无需打开和渲染每个图形。我通过以下方式实现这一点:'将数据库源初始化为读取
Dim dbExtract作为新的数据库服务。数据库
数据库提取。ReadDwgFile(文件名,IO.FileShare.Read,True,“”)
由于这意味着图形将在内存中打开,因此EditorInput不可用,这是交叉窗口选择集方法所在的位置。有人知道如何在没有EditorInput的情况下有效地搜索指定窗口中的任何线或线吗? 嗯,我想出来了。。。下面是我的代码片段的副本,以帮助像我这样想知道的人。诀窍在于使用多段线对象的IntersectWith方法。还请注意,您必须初始化一个空的Point3dCollection,IntersectWith方法将在其中填充与您尝试验证的实体相关的点。换句话说,对于这个论点,请思考ByRef而不是ByVal:
'为多边形交叉窗口创建点集合并指定点
Dim ptcollSelectionWindowFront作为新的点3DCollection
ptcollSelectionWindowFront。添加(ptTBPoint1)
ptcollSelectionWindowFront。添加(ptTBPoint2)
ptcollSelectionWindowFront。添加(ptExtTBPoint2)
ptcollSelectionWindowFront。添加(ptExtTBPoint1)
'初始化多边形交叉窗口
Dim polySelWindowFront作为新的数据库服务。Polyline2d(DatabaseServices.Poly2dType.SimplePoly_
ptcollSelectionWindowFront,0,True,0,0,Nothing)
'初始化交叉指示器
Dim blnCrossing As Boolean=False
'这里的代码是在程序迭代实体时获取实体
'将迭代中的每个值分配给'CrossEntity'
'确定图元是否为直线/多线并穿过窗口
如果交叉实体的类型是DatabaseServices。跨实体的行或类型是DatabaseServices。然后是多段线
Dim ptcollCross作为新的点3DCollection
窗口多边形。IntersectWith(CrossEntity,DatabaseServices.Intersect.OnBothOperands,ptcollCross,0,0)
如果ptcollCross。然后计数>0
blnCrossing=真
其他的
blnCrossing=假
如果结束
如果结束 很好的即兴表演。
在图形编辑器中执行的窗口交叉选择将包括窗口内的图元,即使其几何图形没有穿过窗口的边界。你日常生活中张贴的部分似乎不包括这些项目:这些实体不是一个因素吗?或者,是否有其他代码未显示–GeometricExtents分析? 这些实体不是一个因素。这是为了提取扩展到表示布线图中布线的PLINE和线路。你说得对,如果它们很小,在十字路口的窗户里,我会想念它们的。但幸运的是,在这种情况下,这将是一种非常罕见的情况。
页:
[1]