乐筑天下

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

[编程交流] 本人';我找错地方了

[复制链接]

4

主题

12

帖子

8

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 10:00:06 | 显示全部楼层 |阅读模式
你好。这是我的问题。
我画了几个圆,我想计算它们的质心。
我使用组码过滤器选择它们。
到现在为止,一直都还不错。但是我为他们的中心找到的合作者,在WCS,我需要他们在UCS。我发现了一些关于“效用.平移坐标”(Utility.TranslateCoordinates)函数的信息,但在我的例子中使用它时遇到了问题。
这是代码。
  1. Public Sub CalcImbinare()
  2.   Dim entObj As AcadEntity
  3.   Dim ssetObj As AcadSelectionSet
  4.   Dim grpCode(0) As Integer
  5.   Dim dataVal(0) As Variant
  6.   grpCode(0) = 0
  7.   dataVal(0) = "CIRCLE"
  8.   On Error Resume Next
  9.   Set ssetObj = ThisDrawing.SelectionSets.Add(SetName)
  10.   If Err.Number <> 0 Then
  11.        Set ssetObj = ThisDrawing.SelectionSets.Item(SetName)
  12.   End If
  13.   ssetObj.Clear
  14.   Set ssetObj = ThisDrawing.SelectionSets.Add("SS01")
  15.   ssetObj.SelectOnScreen grpCode, dataVal
  16.   ' SELECTION OF THE CIRCLES IS COMPLETE
  17.   ' NOW I"M TRYING TO USE THE CIRCLE COORDONATES IN MY CALCULATIONS,
  18.   ' BUT I GET THEM IN WCS, AND I NEED THEM IN UCS
  19.   
  20.   Dim xg, yg As Double
  21.   Dim pct As Variant
  22.   ' I TRIED ALSO " pcs (0 to 2) as Double" TYPICAL FOR A POINT VARIABLE
  23.   ' STILL THE SAME RESULT
  24.   xg = 0 : yg = 0 :
  25.   For i = 0 To ssetObj.Count - 1
  26.        Set pct = ThisDrawing.Utility.TranslateCoordinates(ssetObj.Item(i).Center, acWorld, acOCS, True)
  27.        xg = xg + pct(0)
  28.        yg = yg + pct(1)
  29.   Next i
  30.   xg = xg / ssetObj.Count
  31.   yg = yg / ssetObj.Count
  32. End Sub

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

使用道具 举报

12

主题

119

帖子

107

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 10:19:45 | 显示全部楼层
我在10,10,10创建了一个新的UCS
画一个圈,把它变成一个区域,然后看它的质量道具。。。
我得到的质心值是UCS。。你的过程是什么?
回复

使用道具 举报

4

主题

12

帖子

8

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 10:30:29 | 显示全部楼层
你说我应该锁定这些圆,然后得到它们的中心坐标?
我也要试试
回复

使用道具 举报

12

主题

119

帖子

107

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 10:40:37 | 显示全部楼层
嗯,我不确定你在做什么,但如果你只是在寻找圆心,无论你有什么当前UCS,坐标值都会显示在屏幕左下角的状态栏中。。。。
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 10:52:41 | 显示全部楼层
看看这是否更好。
 
  1. Public Sub CalcImbinare()
  2.   Dim entObj As AcadEntity
  3.   Dim ssetObj As AcadSelectionSet
  4.   Dim grpCode(0) As Integer
  5.   Dim dataVal(0) As Variant
  6.   grpCode(0) = 0
  7.   dataVal(0) = "CIRCLE"
  8.   On Error Resume Next
  9.   Set ssetObj = ThisDrawing.SelectionSets.Add("SS01")
  10.   If Err.Number <> 0 Then
  11.        Set ssetObj = ThisDrawing.SelectionSets.Item("SS01")
  12.        ssetObj.Clear
  13.   End If
  14.   On Error GoTo 0
  15.   ssetObj.SelectOnScreen grpCode, dataVal
  16.   ' SELECTION OF THE CIRCLES IS COMPLETE
  17.   ' NOW I"M TRYING TO USE THE CIRCLE COORDONATES IN MY CALCULATIONS,
  18.   ' BUT I GET THEM IN WCS, AND I NEED THEM IN UCS
  19.   
  20.   Dim xg, yg As Double
  21.   Dim pct As Variant
  22.   Dim i As Integer
  23.   Dim entCirc As AcadCircle
  24.   ' I TRIED ALSO " pcs (0 to 2) as Double" TYPICAL FOR A POINT VARIABLE
  25.   ' STILL THE SAME RESULT
  26.   xg = 0: yg = 0:
  27.   For i = 0 To ssetObj.Count - 1
  28.      Set entCirc = ssetObj.Item(i) 'Explicit casting is not always neccessary, but safe
  29.        pct = ThisDrawing.Utility.TranslateCoordinates(entCirc.Center, acWorld, acUCS, 0)
  30.        xg = xg + pct(0)
  31.        yg = yg + pct(1)
  32.   Next i
  33.   xg = xg / ssetObj.Count
  34.   yg = yg / ssetObj.Count
  35. End Sub
回复

使用道具 举报

4

主题

12

帖子

8

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 11:07:37 | 显示全部楼层
哇,真管用。凉的很好的anwser,稍有变化但准确!
非常好,非常感谢!
问题解决了!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 00:38 , Processed in 0.325518 second(s), 64 queries .

© 2020-2025 乐筑天下

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