乐筑天下

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

[编程交流] 选择集-选择所有对象

[复制链接]

34

主题

105

帖子

91

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
224
发表于 2022-7-6 18:03:36 | 显示全部楼层
毫升,
 
是的,这是同一种想法,
 
  1.        For Each MyoEnt In MyObjSS
  2.            If TypeOf MyoEnt Is AcadBlockReference Then
  3.                Set MyBlockRef = MyoEnt
  4.                dblBrefInPt = MyBlockRef.InsertionPoint
  5.            dblRotation = MyBlockRef.Rotation
  6.            Xaxis = .PolarPoint(OP, dblRotation, 1#)
  7.            Yaxis = .PolarPoint(OP, pi / 2 + dblRotation, 1#)
  8.            Set NewUCS = ThisDrawing.UserCoordinateSystems.Add(OP, Xaxis, Yaxis, "UCSfromRef")
  9.            NewUCS.Origin = dblBrefInPt
  10.            ThisDrawing.ActiveUCS = NewUCS
  11.                myvaratt = MyBlockRef.GetAttributes
  12.                For i = 0 To UBound(myvaratt)
  13.                    If myvaratt(i).TagString = "INFO_BLOCK_ID" Then
  14.                        myvaratt(i).TagString = "BLOCK_REF"
  15.                        myvaratt(i).Alignment = acAlignmentLeft
  16.                        myvaratt(i).StyleName = "Standard"
  17.                        myvaratt(i).Invisible = True
  18.                        myvaratt(i).height = 250#
  19.        insertionPnt11() = .TranslateCoordinates(myvaratt(i).InsertionPoint, acWorld, acUCS, 0)
  20.        insertionPnt11(0) = insertionPnt11(0) + 1048# '
  21.        insertionPnt11(1) = insertionPnt11(1) + 2900
  22.        myvaratt(i).InsertionPoint = .TranslateCoordinates(insertionPnt11, acUCS, acWorld, 0)
  23.              myvaratt(i).Update
  24.                    End If
  25.                Next
  26.            End If
  27.        Next

 
上面的代码只是整体内容的摘录。这是完整的工作点,但我相信我可以瘦下来,也改善它。我很感激你对它的意见和任何提示,你可以给我改善它,因为我仍然非常学习。我可以马上发布,但我会这样做,希望你有时间看看。
 
干杯
 
Col。
回复

使用道具 举报

0

主题

89

帖子

147

银币

限制会员

铜币
-9
发表于 2022-7-6 18:09:19 | 显示全部楼层
嘿,上校,
 
我很高兴看到我不是唯一一个这么晚才起床的人,我实际上在用Excel做一些编程;这是我一段时间以来一直想做的事情,直到现在才有机会看到它。
 
如果你的代码只是一个开始,那么我会说你做得很好!
 
好吧,老实说,我以前用过很多属性,但我从来没有真正想过要用编程的方式处理它们;因此,如果不尝试代码,我无法提出任何好的建议;虽然如果您有特定的问题,我可以帮助您调试。
 
你明白我为什么喜欢typeof方法吗?
同样,使用dxf组过滤器没有错,但是,您需要知道什么数字代表什么实体类型等。
 
例如,如果使用此方法声明变量
MyBlockRef作为AcadBlockReference
您已经有了您的实体类型(AcadBlockReference);所以我们不需要去寻找什么dxf代码=什么实体类型;这对我来说很有意义。
 
此外,您还为Acadentity声明了一个变量
暗肌如无齿
现在,您已经指示VBA遍历sset中的每个实体并找到实体类型blockreference,您也可以这样做
dblBrefInPt=MyOINT。插入点,等等
因此,在您筛选的每种类型的ent之后,默认情况下,变量myoint应该等于该实体类型,无需显式设置引用,例如set MyBlockRef=myoint
 
这个集合MyBlockRef=myoint没有任何错误;尤其是如果它能帮助你更好地遵循代码,但我认为这是没有必要的。
 
如果变量myoint被声明为Acadentity,那么它应该选择您指示它在循环中查找的实体类型的所有方法和属性。
 
我使用相同的方法从一次遍历一个控件上的所有控件类型;这很酷。
 
因此,例如,如果您想查找表单上的所有列表框,可以应用相同的方法。您可能需要将变量声明为对象,而不是Acadentity,因为控件不是Acadentity,所以它看起来像这样:
  1. Dim MyObj as Object
  2. For Each MyoObj In Userform1 (or whatever you name the form)
  3. If TypeOf MyoObj Is listbox Then
  4. listbox.width = 25
  5. End if
  6. Next MyoObj

 
干得好,上校!
 
继续
 
毫升
回复

使用道具 举报

0

主题

89

帖子

147

银币

限制会员

铜币
-9
发表于 2022-7-6 18:11:49 | 显示全部楼层
上校,
 
另外,不要引用我的话,试试看;
如果您声明了变量:
将MyBlockRef设置为AcadBlockReference
 
那你就可以逍遥法外了
 
如果MyoEnt的类型为AcadBlockReference,则
dblBrefInPt=MyBlockRef。插入点
 
不需要这样做:设置MyBlockRef=myoint
 
毫升
回复

使用道具 举报

34

主题

105

帖子

91

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
224
发表于 2022-7-6 18:14:39 | 显示全部楼层
毫升,
 
非常感谢您的提示,正如我所说,我不擅长VBA,只会学习,但我确实理解(希望)您的提示,并将尝试将它们植入我的代码中,以帮助流水线。
 
非常感谢你。
 
Col公司
回复

使用道具 举报

0

主题

89

帖子

147

银币

限制会员

铜币
-9
发表于 2022-7-6 18:15:51 | 显示全部楼层
没问题Col
 
看起来你有了一个很好的开始。
 
还有很多东西要学
 
如果你还需要帮助,就喊一声
 
毫升
回复

使用道具 举报

0

主题

89

帖子

147

银币

限制会员

铜币
-9
发表于 2022-7-6 18:20:56 | 显示全部楼层
Col公司
 
如果你还不知道的话,还有一个很好的提示。
 
单击view,Locals
 
然后,当局部变量窗口打开时,单击F8,这将开始在局部变量窗口中处理代码。
 
当您不断点击F8时,它将完成代码的每一步,您将准确地看到它在哪里遇到问题,这样您就知道该在哪里解决问题。
 
我也学到了很多,仅仅是看着代码(局部)通过循环等。这真的帮助我理解了代码是如何处理的,因此,我认为这也帮助你更好地编码。
 
在过去的很多时候,我会在论坛上问一个问题,当我需要做的只是使用本地调试。
在VBA中编码时,它可能是您最好的朋友
 
毫升
回复

使用道具 举报

34

主题

105

帖子

91

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
224
发表于 2022-7-6 18:23:26 | 显示全部楼层
毫升,
 
谢谢你,。不,我没有听说过当地的窗户。我会看看的。
 
干杯
 
col公司
回复

使用道具 举报

0

主题

89

帖子

147

银币

限制会员

铜币
-9
发表于 2022-7-6 18:25:34 | 显示全部楼层
凉的
 
那将是你最好的新朋友Col!
 
毫升
回复

使用道具 举报

0

主题

2

帖子

4

银币

初来乍到

Rank: 1

铜币
4
发表于 2022-7-6 18:30:13 | 显示全部楼层
大家好,我是论坛新手
选择集上有趣的帖子。。。有人记得SSX吗。lsp?
;;;   Larry Knott版本2.0 1988年7月18日
;;;   Carl Bethea和Jan S.Yoder 3.0版
;;;   对(ssx)的增强。
;;;   1990年3月15日
 
我们正在使用AutoCAD 2005移动到2008月末。。。。SSX仍然有效。。。
问候约翰
SSX。LSP
回复

使用道具 举报

0

主题

89

帖子

147

银币

限制会员

铜币
-9
发表于 2022-7-6 18:32:40 | 显示全部楼层
嗨,约翰
我不是一个真正的LISP程序员,但我确实在这里和那里使用了一点LISP。
对于在命令行创建快速sset,ssget总是一个非常好的工具。
 
下面是一个很酷的例子,我将ACAD与LISP结合在一起
如果从VBA运行此宏,它将提示您输入sset名称。
 
我之所以创建它,是因为我有时喜欢做与编程任务无关的SSET,而且我知道我不会记住LISP语法。
 
毫升
 
  1. Sub CreateSSinCAD()
  2. Dim SsetName As String
  3. SsetName = InputBox("Enter Selection Set name and select your objects" & vbCrLf & vbCrLf & _
  4. "Use the sset transparently with a modify command" & vbCrLf & "ie cp (enter) !ssetname")
  5. If SsetName > "" Then
  6. ThisDrawing.SendCommand "(setq " & (SsetName) & " (" & "ssget))" & vbCr
  7. End If
  8. End Sub
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 13:26 , Processed in 0.322877 second(s), 70 queries .

© 2020-2025 乐筑天下

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