MickD 发表于 2008-1-8 21:53:31

vba中的组

有人举过在vba中使用组的例子吗?这有点神秘,我可以创建和添加项目没有问题,但在屏幕上选择它们是另一回事,我'想象一下,你对其他收藏也会有同样的问题
帮助文档's在这方面非常薄弱,任何小道消息都会有所帮助。同时,我'我会继续搜索其他收藏示例。谢谢,米克。

MickD 发表于 2008-1-8 23:04:22

唐#039;如果没有vb组码,一个老家伙的lisp代码会有任何(翻译)用途吗?

Bryco 发表于 2008-1-8 23:41:06


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

Kerry 发表于 2008-1-9 01:46:41

我放弃了他们,米克,反正我更喜欢街区
如果他们是一个实体,这会更容易
我认为创建一个Group类将使它们在vba中相当容易使用,一旦你有了它的实体集合,你就可以移动它们,选择它们等等

MickD 发表于 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

Cathy 发表于 2008-1-9 04:39:48

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

MickD 发表于 2008-1-9 08:55:56

嘿,米克,很抱歉抢走了你的帖子…我在为SDS制作.NET包装方面做得太多了。足够做到这一点
   //intellicad COM
   
    public static void Test1()
    {
      try
      {
      IntelliCAD.Application application =
          (IntelliCAD.Application)Marshal.GetActiveObject("Icad.Application");
      IntelliCAD.Document document = application.ActiveDocument;
      IntelliCAD.ModelSpace modelspace = document.ModelSpace;
      IntelliCAD.Library library = application.Library;
      IntelliCAD.Point point1 = library.CreatePoint(0,0,0);
      IntelliCAD.Point point2 = library.CreatePoint(100,100,0);
      IntelliCAD.Line line = modelspace.AddLine(point1, point2);
      line.Update();
      Marshal.ReleaseComObject(application);
      }
      catch (SystemException e)
      {
      DWM.Cad.RuntimeServices.Utilities.WriteMessage(e.Message);
      }
    }
    //through the lisp engine
   
    public static void Testline1()
    {
      using (Line myLine = new Line())
      {
      myLine.Layer = "0";
      myLine.StartPoint = new Point3D(0, 0, 0);
      myLine.EndPoint = new Point3D(100, 100, 0);
      myLine.Update();
      }
    }

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

MickD 发表于 2008-1-9 13:17:07


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

Bryco 发表于 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;它花费了我几乎没有花费的时间;无论如何,我没有太多,它'这一阶段都是概念证明

MickD 发表于 2008-1-9 21:42:49

这里是#039;这就是我想到的,它'这是Kerry发布的代码的一个修改版本,它只是在组中循环,如果找到它,它就会退出并返回要添加的组或任何内容。我本打算发布一些代码来创建等,但它35;039;这是一件非常琐碎的事情
欢迎任何改进/评论
Public Sub GroupFromEnt(group As AcadGroup, strprompt As String)
    ' Select an entity
   Dim returnObj As Object
   Dim basePnt As Variant
   ThisDrawing.Utility.GetEntity returnObj, basePnt, strprompt
   
   ' Get the groups
   Dim acadGroups As acadGroups
   Dim groupEntity As AcadEntity
   Dim isInGroup As Boolean
   Dim length As Integer
   Dim i As Integer
   
   Set acadGroups = ThisDrawing.groups
   isInGroup = False
   
   ' Iterate all available groups
   For Each group In acadGroups
      length = group.Count
          ' Get every entity from a group
       For i = 0 To length - 1
          Set groupEntity = group.Item(i)
          If groupEntity.Handle = returnObj.Handle Then
             ThisDrawing.Utility.Prompt "Entity is from Group " + group.Name
             isInGroup = True
             'let's go, we got it:
             Exit Sub
          End If
       Next i
    Next
    If isInGroup = False Then
       ThisDrawing.Utility.Prompt "Entity is in not in a group."
    End If
End Sub
页: [1] 2
查看完整版本: vba中的组