BUrBaKy 发表于 2022-7-6 10:00:06

本人';我找错地方了

你好。这是我的问题。
我画了几个圆,我想计算它们的质心。
我使用组码过滤器选择它们。
到现在为止,一直都还不错。但是我为他们的中心找到的合作者,在WCS,我需要他们在UCS。我发现了一些关于“效用.平移坐标”(Utility.TranslateCoordinates)函数的信息,但在我的例子中使用它时遇到了问题。
这是代码。

Public Sub CalcImbinare()
Dim entObj As AcadEntity
Dim ssetObj As AcadSelectionSet
Dim grpCode(0) As Integer
Dim dataVal(0) As Variant

grpCode(0) = 0
dataVal(0) = "CIRCLE"
On Error Resume Next
Set ssetObj = ThisDrawing.SelectionSets.Add(SetName)
If Err.Number <> 0 Then
       Set ssetObj = ThisDrawing.SelectionSets.Item(SetName)
End If
ssetObj.Clear
Set ssetObj = ThisDrawing.SelectionSets.Add("SS01")
ssetObj.SelectOnScreen grpCode, dataVal

' SELECTION OF THE CIRCLES IS COMPLETE
' NOW I"M TRYING TO USE THE CIRCLE COORDONATES IN MY CALCULATIONS,
' BUT I GET THEM IN WCS, AND I NEED THEM IN UCS

Dim xg, yg As Double
Dim pct As Variant
' I TRIED ALSO " pcs (0 to 2) as Double" TYPICAL FOR A POINT VARIABLE
' STILL THE SAME RESULT
xg = 0 : yg = 0 :
For i = 0 To ssetObj.Count - 1
       Set pct = ThisDrawing.Utility.TranslateCoordinates(ssetObj.Item(i).Center, acWorld, acOCS, True)
       xg = xg + pct(0)
       yg = yg + pct(1)
Next i
xg = xg / ssetObj.Count
yg = yg / ssetObj.Count
End Sub

 
结果是什么都没有发生,变量“pct”没有得到任何值。
提前感谢!

JPlanera 发表于 2022-7-6 10:19:45

我在10,10,10创建了一个新的UCS
画一个圈,把它变成一个区域,然后看它的质量道具。。。
我得到的质心值是UCS。。你的过程是什么?

BUrBaKy 发表于 2022-7-6 10:30:29

你说我应该锁定这些圆,然后得到它们的中心坐标?
我也要试试

JPlanera 发表于 2022-7-6 10:40:37

嗯,我不确定你在做什么,但如果你只是在寻找圆心,无论你有什么当前UCS,坐标值都会显示在屏幕左下角的状态栏中。。。。

SEANT 发表于 2022-7-6 10:52:41

看看这是否更好。
 

Public Sub CalcImbinare()
Dim entObj As AcadEntity
Dim ssetObj As AcadSelectionSet
Dim grpCode(0) As Integer
Dim dataVal(0) As Variant

grpCode(0) = 0
dataVal(0) = "CIRCLE"
On Error Resume Next
Set ssetObj = ThisDrawing.SelectionSets.Add("SS01")
If Err.Number <> 0 Then
       Set ssetObj = ThisDrawing.SelectionSets.Item("SS01")
       ssetObj.Clear
End If
On Error GoTo 0
ssetObj.SelectOnScreen grpCode, dataVal
' SELECTION OF THE CIRCLES IS COMPLETE
' NOW I"M TRYING TO USE THE CIRCLE COORDONATES IN MY CALCULATIONS,
' BUT I GET THEM IN WCS, AND I NEED THEM IN UCS

Dim xg, yg As Double
Dim pct As Variant
Dim i As Integer
Dim entCirc As AcadCircle
' I TRIED ALSO " pcs (0 to 2) as Double" TYPICAL FOR A POINT VARIABLE
' STILL THE SAME RESULT
xg = 0: yg = 0:
For i = 0 To ssetObj.Count - 1
   Set entCirc = ssetObj.Item(i) 'Explicit casting is not always neccessary, but safe
       pct = ThisDrawing.Utility.TranslateCoordinates(entCirc.Center, acWorld, acUCS, 0)
       xg = xg + pct(0)
       yg = yg + pct(1)
Next i
xg = xg / ssetObj.Count
yg = yg / ssetObj.Count
End Sub

BUrBaKy 发表于 2022-7-6 11:07:37

哇,真管用。凉的很好的anwser,稍有变化但准确!
非常好,非常感谢!
问题解决了!
页: [1]
查看完整版本: 本人';我找错地方了