乐筑天下

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

GetBoundingBox返回0,0,0?

[复制链接]

13

主题

117

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
173
发表于 2006-11-6 06:08:26 | 显示全部楼层 |阅读模式
我在正在写的剧本中偶然发现了一个大问题
该例程基本上检查重叠层-它通过将参考多边形复制到一个区域并进行一系列减法来计算多边形与另一个多边形的重叠程度(如果有的话)
如果参考多边形完全包含在另一个多边形中(如果较小),或者如果参考多边形与另一个重叠,则脚本可以完美工作。然而,如果多边形具有多次接触的顶点(例如,它们是相同的形状,或共享一系列共同的顶点),那么当我运行getboundingbox命令时,数组minExt和maxExt都返回0,0,0。这是GetBounding box命令的限制吗?有人知道如何解决这个问题吗
托妮
回复

使用道具 举报

5

主题

65

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
93
发表于 2006-11-6 07:13:06 | 显示全部楼层
在这里,一个小代码片段会有很大帮助。。。。
回复

使用道具 举报

13

主题

117

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
173
发表于 2006-11-6 07:36:20 | 显示全部楼层

  1.     entry.GetBoundingBox minExt, maxExt
  2.    
  3.     startPtD(0) = minExt(0) + 1: startPtD(1) = maxExt(1): startPtD(2) = 0#
  4.     endPtD(0) = minExt(0) + 1: endPtD(1) = minExt(1): endPtD(2) = 0#
  5.     startPt = startPtD: endPt = endPtD
  6.    
  7.     Set lineObj = ThisDrawing.ModelSpace.AddLine(startPt, endPt)
  8.    
  9.     intPointsNew = entry.IntersectWith(lineObj, acExtendNone)
  10.    
  11.         startPtD(0) = intPointsNew(0) - 10: startPtD(1) = intPointsNew(1): startPtD(2) = intPointsNew(2)
  12.         endPtD(0) = intPointsNew(3) - 10: endPtD(1) = intPointsNew(4): endPtD(2) = intPointsNew(5):

没有'当我想要比较的两条LWpolyline嵌套时,这段代码可以完美地工作,即getboundingbox返回一个值 当一个有多个顶点接触外部多段线时,getboundingbox返回minExt 0,0,0和maxExt 0,0.0。
所有变量都已声明,并且声明正确,我只能'我不理解为什么当线接触时,getboundingbox命令在两个数组中都返回0的值-即它正在*填充*数组,只是使用了不正确的数据:/
回复

使用道具 举报

13

主题

117

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
173
发表于 2006-11-6 08:40:14 | 显示全部楼层
也许通过我写的一些代码中的一个例子可以帮助你找到你的问题…
对不起,我'我用我的母语对它进行了评论
看看代码,我似乎记得,由于涉及Getboundingbox的Acad VBA模型中的一个怪癖,我不得不使用variant
  1. Function LimitsSelSet(Selset As AcadSelectionSet) As Variant
  2. Dim Ent As AcadEntity
  3. Dim LL As Variant
  4. Dim UR As Variant
  5. Dim Limits(0 To 1, 0 To 2) As Double
  6. Limits(0, 0) = -0.0000000000001
  7. For Each Ent In Selset
  8.     If Left$(Ent.ObjectName, 7)  "AcDbDim" And Ent.ObjectName  "AcDbAttributeDefinition" _
  9.             And Ent.ObjectName  "AcDBText" Then 'negeer dimensies attributen en texten
  10.         
  11.         Ent.GetBoundingBox LL, UR
  12.         If Limits(0, 0) = -0.0000000000001 Then  'init upperleft, lowerright
  13.             Limits(0, 0) = LL(0): Limits(0, 1) = LL(1): Limits(0, 2) = LL(2)
  14.             Limits(1, 0) = UR(0): Limits(1, 1) = UR(1): Limits(1, 2) = UR(2)
  15.         Else 'get boundingbox selectionset
  16.             If Limits(0, 0) > LL(0) Then Limits(0, 0) = LL(0)
  17.             If Limits(0, 1) > LL(1) Then Limits(0, 1) = LL(1)
  18.             If Limits(0, 2) > LL(2) Then Limits(0, 2) = LL(2)
  19.             If Limits(1, 0)  5 Then
  20.         StartPtd(0) = intPointsNew(0) - 10
  21.         StartPtd(1) = intPointsNew(1)
  22.         StartPtd(2) = intPointsNew(2)
  23.         EndPtD(0) = intPointsNew(3) - 10
  24.         EndPtD(1) = intPointsNew(4)
  25.         EndPtD(2) = intPointsNew(5)
  26.     End If
  27. End If
  28. End Sub
回复

使用道具 举报

13

主题

117

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
173
发表于 2006-11-6 08:59:22 | 显示全部楼层

是的,我很早就学会了……我来自一个更;“纯”;编程背景(如编写完全独立的可执行文件),而不是通过对象库等编写脚本-这是我在过去两年左右才做的事情,使用AutoCAD大约3/4个月
  1.     Dim lineObj As AcadLine
  2.     Dim startPt As Variant
  3.     Dim endPt As Variant
  4.    
  5.     Dim startPtD(2) As Double
  6.     Dim endPtD(2) As Double
  7.    
  8.     Dim minExt As Variant
  9.     Dim maxExt As Variant
  10.     Dim intPointsNew As Variant
加载startPtD(双精度数组)然后将值从那里加载到startPt(变量数组)的混乱是因为,当您想要检查对arc(或任何包含arc的内容)的拦截时,它必须是一个变量数组,其中包含;变体/双打“;类型-正是你提到的怪癖之一。
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2006-11-6 09:32:05 | 显示全部楼层
问题可能正在这里发生。如果减去2个相同的对象,那么就没有什么可以得到的边界框了
回复

使用道具 举报

13

主题

117

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
173
发表于 2006-11-6 09:44:11 | 显示全部楼层
这似乎是一个很好的解决方案,对象没有从中减去任何东西(如果你想一想,我会得到另一个错误-它会失败,因为“entry”不再存在)
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2006-11-6 09:49:26 | 显示全部楼层
这里的重点是你没有#039;t显示了足够的代码。我们只能猜测。事实上,一个多边形与另一个多边形共享一些点并不会改变Getboundingbox的结果,据我所知,它只会查看你给它的实体。
回复

使用道具 举报

13

主题

117

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
173
发表于 2006-11-6 09:53:22 | 显示全部楼层
我没有其他代码可以给你看,这一切都与这个函数无关 我本以为也是这样的,但就像我说的,直到你接触到另一条具有多个顶点的线为止 我向其输入条目(区域),如果条目多次接触多段线,则返回值0,0,0;我无法向您展示其他代码。
回复

使用道具 举报

13

主题

117

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
173
发表于 2006-11-6 10:10:44 | 显示全部楼层
德内雷布:我刚刚看过你的编辑 谢谢,我测试过了,我也不知道;没有问题-尽管我不明白为什么那代码有效,而我的代码无效't:/
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-6 21:06 , Processed in 0.557637 second(s), 72 queries .

© 2020-2025 乐筑天下

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