Tuoni 发表于 2006-11-6 06:08:26

GetBoundingBox返回0,0,0?

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

Swift 发表于 2006-11-6 07:13:06

在这里,一个小代码片段会有很大帮助。。。。

Tuoni 发表于 2006-11-6 07:36:20



    entry.GetBoundingBox minExt, maxExt
   
    startPtD(0) = minExt(0) + 1: startPtD(1) = maxExt(1): startPtD(2) = 0#
    endPtD(0) = minExt(0) + 1: endPtD(1) = minExt(1): endPtD(2) = 0#
    startPt = startPtD: endPt = endPtD
   
    Set lineObj = ThisDrawing.ModelSpace.AddLine(startPt, endPt)
   
    intPointsNew = entry.IntersectWith(lineObj, acExtendNone)
   
      startPtD(0) = intPointsNew(0) - 10: startPtD(1) = intPointsNew(1): startPtD(2) = intPointsNew(2)
      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的值-即它正在*填充*数组,只是使用了不正确的数据:/

Tuoni 发表于 2006-11-6 08:40:14

也许通过我写的一些代码中的一个例子可以帮助你找到你的问题…
对不起,我'我用我的母语对它进行了评论
看看代码,我似乎记得,由于涉及Getboundingbox的Acad VBA模型中的一个怪癖,我不得不使用variantFunction LimitsSelSet(Selset As AcadSelectionSet) As Variant
Dim Ent As AcadEntity
Dim LL As Variant
Dim UR As Variant
Dim Limits(0 To 1, 0 To 2) As Double
Limits(0, 0) = -0.0000000000001
For Each Ent In Selset
    If Left$(Ent.ObjectName, 7)"AcDbDim" And Ent.ObjectName"AcDbAttributeDefinition" _
            And Ent.ObjectName"AcDBText" Then 'negeer dimensies attributen en texten
      
      Ent.GetBoundingBox LL, UR
      If Limits(0, 0) = -0.0000000000001 Then'init upperleft, lowerright
            Limits(0, 0) = LL(0): Limits(0, 1) = LL(1): Limits(0, 2) = LL(2)
            Limits(1, 0) = UR(0): Limits(1, 1) = UR(1): Limits(1, 2) = UR(2)
      Else 'get boundingbox selectionset
            If Limits(0, 0) > LL(0) Then Limits(0, 0) = LL(0)
            If Limits(0, 1) > LL(1) Then Limits(0, 1) = LL(1)
            If Limits(0, 2) > LL(2) Then Limits(0, 2) = LL(2)
            If Limits(1, 0)5 Then
      StartPtd(0) = intPointsNew(0) - 10
      StartPtd(1) = intPointsNew(1)
      StartPtd(2) = intPointsNew(2)
      EndPtD(0) = intPointsNew(3) - 10
      EndPtD(1) = intPointsNew(4)
      EndPtD(2) = intPointsNew(5)
    End If
End If
End Sub

Tuoni 发表于 2006-11-6 08:59:22


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

Bryco 发表于 2006-11-6 09:32:05

问题可能正在这里发生。如果减去2个相同的对象,那么就没有什么可以得到的边界框了

Tuoni 发表于 2006-11-6 09:44:11

这似乎是一个很好的解决方案,对象没有从中减去任何东西(如果你想一想,我会得到另一个错误-它会失败,因为“entry”不再存在)

Bryco 发表于 2006-11-6 09:49:26

这里的重点是你没有#039;t显示了足够的代码。我们只能猜测。事实上,一个多边形与另一个多边形共享一些点并不会改变Getboundingbox的结果,据我所知,它只会查看你给它的实体。

Tuoni 发表于 2006-11-6 09:53:22

我没有其他代码可以给你看,这一切都与这个函数无关 我本以为也是这样的,但就像我说的,直到你接触到另一条具有多个顶点的线为止 我向其输入条目(区域),如果条目多次接触多段线,则返回值0,0,0;我无法向您展示其他代码。

Tuoni 发表于 2006-11-6 10:10:44

德内雷布:我刚刚看过你的编辑 谢谢,我测试过了,我也不知道;没有问题-尽管我不明白为什么那代码有效,而我的代码无效't:/
页: [1] 2
查看完整版本: GetBoundingBox返回0,0,0?