乐筑天下

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

vba中的组

[复制链接]

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2008-1-8 21:53:31 | 显示全部楼层 |阅读模式
有人举过在vba中使用组的例子吗?这有点神秘,我可以创建和添加项目没有问题,但在屏幕上选择它们是另一回事,我'想象一下,你对其他收藏也会有同样的问题
帮助文档's在这方面非常薄弱,任何小道消息都会有所帮助。同时,我'我会继续搜索其他收藏示例。谢谢,米克。
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2008-1-8 23:04:22 | 显示全部楼层
唐#039;如果没有vb组码,一个老家伙的lisp代码会有任何(翻译)用途吗?
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2008-1-8 23:41:06 | 显示全部楼层

谢谢Michael,但我几乎不能掌握lisp的基本知识,尽管现在我希望几年前尝试时能坚持下去,也许我应该这样做
我有一些C代码,可以做我需要的事情,我可以更新或转换,但我'我不确定我需要的方法是否暴露在vba中。如果我需要走那条路,我'我用arx写
I'我有点进退两难,因为我想避开.net,这样我也可以在icad中使用代码。目标是在我得到'工具#039;事情解决了,这样我就可以#039;调用#039;它几乎来自任何语言,用于脚本编写/自动化
这就是我'm使用vba,它'它易于编写、快速、易于调试和即时修复,如果您知道它和我'我不确定我有没有耐心/时间去学习它,尽管它#039;s可能更适合这项任务 
回复

使用道具 举报

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2008-1-9 01:46:41 | 显示全部楼层
我放弃了他们,米克,反正我更喜欢街区
如果他们是一个实体,这会更容易
我认为创建一个Group类将使它们在vba中相当容易使用,一旦你有了它的实体集合,你就可以移动它们,选择它们等等
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2008-1-9 03:09:48 | 显示全部楼层
Mick,玩一玩吧,这是我知道的唯一一种方法…
Sub-GrpNameTest()
&nbsp 作为对象的模糊属性&nbsp 设置acadUtility=ThisDrawing。效用&nbsp&nbsp
&nbsp&nbsp' 选择实体&nbsp Dim returnObj作为对象&nbsp Dim basePnt作为变体&nbsp&nbsp
&nbsp ThisDrawing.Utility。GetEntity returnObj,basePnt,“;选择一个对象:
&nbsp&nbsp
&nbsp&nbsp' 获取组&nbsp 将ACADGroup作为对象进行Dim&nbsp 作为对象的Dim组&nbsp Dim groupEntity作为对象&nbsp Dim IsingGroup作为布尔值&nbsp Dim长度为整数&nbsp Dim i为整数&nbsp&nbsp
&nbsp 设置acadGroups=ThisDrawing。组&nbsp IsingGroup=False&nbsp&nbsp
&nbsp&nbsp' 迭代所有可用组&nbsp 对于acadGroups中的每个组&nbsp
&nbsp&nbsp&nbsp&nbsp 长度=组。计数
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp' 从集团中获取每个实体
&nbsp&nbsp&nbsp&nbsp 对于i=0到长度-1&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp 设置groupEntity=group。第(i)项&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp 如果是groupEntity。句柄=returnObj。然后处理&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp MsgBox“;实体来自集团“+组名称&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp IsingGroup=True&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp 如果结束
&nbsp&nbsp&nbsp&nbsp 下一步&nbsp 下一步&nbsp 如果;IsingGroup=False,则&nbsp
&nbsp&nbsp&nbsp&nbsp MsgBox“;实体不在组中&引用
&nbsp 如果结束;结束Sub
回复

使用道具 举报

4

主题

54

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2008-1-9 04:39:48 | 显示全部楼层
谢谢Kerry,看起来很好,这正是我所害怕的——贯穿整个系列。想了想,从记忆中我也不得不用C语言(我很确定我用的是Alex的代码片段)
我想一条捷径是存储组#039;从集合中按名称检索,但现在就可以了
I'明天我来试一试,看看进展如何,我'完成后,我会发布一些小组练习,再次感谢。
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2008-1-9 08:55:56 | 显示全部楼层
嘿,米克,很抱歉抢走了你的帖子…我在为SDS制作.NET包装方面做得太多了。足够做到这一点
  1.    //intellicad COM
  2.     [CommandMethod("Test")]
  3.     public static void Test1()
  4.     {
  5.       try
  6.       {
  7.         IntelliCAD.Application application =
  8.           (IntelliCAD.Application)Marshal.GetActiveObject("Icad.Application");
  9.         IntelliCAD.Document document = application.ActiveDocument;
  10.         IntelliCAD.ModelSpace modelspace = document.ModelSpace;
  11.         IntelliCAD.Library library = application.Library;
  12.         IntelliCAD.Point point1 = library.CreatePoint(0,0,0);
  13.         IntelliCAD.Point point2 = library.CreatePoint(100,100,0);
  14.         IntelliCAD.Line line = modelspace.AddLine(point1, point2);
  15.         line.Update();
  16.         Marshal.ReleaseComObject(application);
  17.       }
  18.       catch (SystemException e)
  19.       {
  20.         DWM.Cad.RuntimeServices.Utilities.WriteMessage(e.Message);
  21.       }
  22.     }
  23.     //through the lisp engine
  24.     [CommandMethod("TestLine1")]
  25.     public static void Testline1()
  26.     {
  27.       using (Line myLine = new Line())
  28.       {
  29.         myLine.Layer = "0";
  30.         myLine.StartPoint = new Point3D(0, 0, 0);
  31.         myLine.EndPoint = new Point3D(100, 100, 0);
  32.         myLine.Update();
  33.       }
  34.     }

虽然这是为SDS构建的,但我们/我可能能够为Bricscad/Drx整合一些东西
我一直在拖延,直到ITC发布它的SDK版本,但看到有C/C++天赋的人不得不使用VBA,我感到很难过&nbsp
无论如何,可以从C#访问DRX、SDS和COM
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2008-1-9 13:17:07 | 显示全部楼层

  1. '...snip
  2.     'Group everything together for the move
  3.     Set objGroup = ThisDrawing.Groups.Add("textbox")
  4.     objGroup.AppendItems objEnts
  5.     ThisDrawing.SendCommand ("-group rename textbox textbox" & vbCr)
  6.     ThisDrawing.SendCommand "move g textbox " & Str(dBoxVert(0)) & "," & LTrim(Str(dBoxVert(1)) & vbCr)
我找到了这个 我认为重命名是某种黑客行为,目的是让该组在Acad中得到认可 
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2008-1-9 17:15:50 | 显示全部楼层
谢谢你,凯西,还有什么要看的,你'没错,重命名有点#039;奇数#039
It'这有点难以解释,本质上我想独立于COM、net等,我还想建立自己的几何例程和修改对象的方法,主要是独立于任何特定平台的三维实体
这个垂直平台
这是可能的,一旦我有了我需要的东西,我'我用C和I&#039编码;在几乎任何可以从dll调用C方法的语言中,我们只需要精简包装器就可以使用库
Bricscad正在努力开发一个真正的本地linux版本,我不知道;我不认为COM和.net在相当长的一段时间内将是优先考虑的,所以我想留下来;中性#039;如果你喜欢的话
困难的部分是解决我需要什么,我'我在C/C++/C中走了太多次这条路,我发现我在开发我只需要找到它的东西上浪费了很多时间;t适合最终目标,它会被重写或丢弃。这就是vba的用武之地(哦,我多么希望acad有Python),我可以把一些东西放在一起,运行并调试它,然后解决另一个问题。如果我必须扔掉一些东西,它没有#039;它花费了我几乎没有花费的时间;无论如何,我没有太多,它'这一阶段都是概念证明
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2008-1-9 21:42:49 | 显示全部楼层
这里是#039;这就是我想到的,它'这是Kerry发布的代码的一个修改版本,它只是在组中循环,如果找到它,它就会退出并返回要添加的组或任何内容。我本打算发布一些代码来创建等,但它35;039;这是一件非常琐碎的事情
欢迎任何改进/评论
  1. Public Sub GroupFromEnt(group As AcadGroup, strprompt As String)
  2.     ' Select an entity
  3.    Dim returnObj As Object
  4.    Dim basePnt As Variant
  5.    ThisDrawing.Utility.GetEntity returnObj, basePnt, strprompt
  6.    
  7.    ' Get the groups
  8.    Dim acadGroups As acadGroups
  9.    Dim groupEntity As AcadEntity
  10.    Dim isInGroup As Boolean
  11.    Dim length As Integer
  12.    Dim i As Integer
  13.    
  14.    Set acadGroups = ThisDrawing.groups
  15.    isInGroup = False
  16.    
  17.    ' Iterate all available groups
  18.    For Each group In acadGroups
  19.       length = group.Count
  20.           ' Get every entity from a group
  21.        For i = 0 To length - 1
  22.           Set groupEntity = group.Item(i)
  23.           If groupEntity.Handle = returnObj.Handle Then
  24.              ThisDrawing.Utility.Prompt "Entity is from Group " + group.Name
  25.              isInGroup = True
  26.              'let's go, we got it:
  27.              Exit Sub
  28.           End If
  29.        Next i
  30.     Next
  31.     If isInGroup = False Then
  32.        ThisDrawing.Utility.Prompt "Entity is in not in a group."
  33.     End If
  34. End Sub
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-5 13:02 , Processed in 0.815829 second(s), 72 queries .

© 2020-2025 乐筑天下

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