vba中的组
有人举过在vba中使用组的例子吗?这有点神秘,我可以创建和添加项目没有问题,但在屏幕上选择它们是另一回事,我';想象一下,你对其他收藏也会有同样的问题帮助文档';s在这方面非常薄弱,任何小道消息都会有所帮助。同时,我';我会继续搜索其他收藏示例。谢谢,米克。
唐#039;如果没有vb组码,一个老家伙的lisp代码会有任何(翻译)用途吗?
谢谢Michael,但我几乎不能掌握lisp的基本知识,尽管现在我希望几年前尝试时能坚持下去,也许我应该这样做
我有一些C代码,可以做我需要的事情,我可以更新或转换,但我';我不确定我需要的方法是否暴露在vba中。如果我需要走那条路,我';我用arx写
I';我有点进退两难,因为我想避开.net,这样我也可以在icad中使用代码。目标是在我得到';工具#039;事情解决了,这样我就可以#039;调用#039;它几乎来自任何语言,用于脚本编写/自动化
这就是我';m使用vba,它';它易于编写、快速、易于调试和即时修复,如果您知道它和我';我不确定我有没有耐心/时间去学习它,尽管它#039;s可能更适合这项任务 ; 我放弃了他们,米克,反正我更喜欢街区
如果他们是一个实体,这会更容易
我认为创建一个Group类将使它们在vba中相当容易使用,一旦你有了它的实体集合,你就可以移动它们,选择它们等等 Mick,玩一玩吧,这是我知道的唯一一种方法…
Sub-GrpNameTest()
  ;作为对象的模糊属性  ;设置acadUtility=ThisDrawing。效用  
  ' 选择实体  ;Dim returnObj作为对象  ;Dim basePnt作为变体  
  ;ThisDrawing.Utility。GetEntity returnObj,basePnt,“;选择一个对象:
  
  ' 获取组  ;将ACADGroup作为对象进行Dim  ;作为对象的Dim组  ;Dim groupEntity作为对象  ;Dim IsingGroup作为布尔值  ;Dim长度为整数  ;Dim i为整数  
  ;设置acadGroups=ThisDrawing。组  ;IsingGroup=False  
  ' 迭代所有可用组  ;对于acadGroups中的每个组 
     ;长度=组。计数
        ' 从集团中获取每个实体
     ;对于i=0到长度-1  
        ;设置groupEntity=group。第(i)项  
        ;如果是groupEntity。句柄=returnObj。然后处理 
           ;MsgBox“;实体来自集团“+组名称 
           ;IsingGroup=True  
        ;如果结束
     ;下一步  ;下一步  ;如果;IsingGroup=False,则 
     ;MsgBox“;实体不在组中&引用
  ;如果结束;结束Sub 谢谢Kerry,看起来很好,这正是我所害怕的——贯穿整个系列。想了想,从记忆中我也不得不用C语言(我很确定我用的是Alex的代码片段)
我想一条捷径是存储组#039;从集合中按名称检索,但现在就可以了
I';明天我来试一试,看看进展如何,我';完成后,我会发布一些小组练习,再次感谢。 嘿,米克,很抱歉抢走了你的帖子…我在为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,我感到很难过 
无论如何,可以从C#访问DRX、SDS和COM
'...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中得到认可 ; 谢谢你,凯西,还有什么要看的,你';没错,重命名有点#039;奇数#039
It';这有点难以解释,本质上我想独立于COM、net等,我还想建立自己的几何例程和修改对象的方法,主要是独立于任何特定平台的三维实体
这个垂直平台
这是可能的,一旦我有了我需要的东西,我';我用C和I'编码;在几乎任何可以从dll调用C方法的语言中,我们只需要精简包装器就可以使用库
Bricscad正在努力开发一个真正的本地linux版本,我不知道;我不认为COM和.net在相当长的一段时间内将是优先考虑的,所以我想留下来;中性#039;如果你喜欢的话
困难的部分是解决我需要什么,我';我在C/C++/C中走了太多次这条路,我发现我在开发我只需要找到它的东西上浪费了很多时间;t适合最终目标,它会被重写或丢弃。这就是vba的用武之地(哦,我多么希望acad有Python),我可以把一些东西放在一起,运行并调试它,然后解决另一个问题。如果我必须扔掉一些东西,它没有#039;它花费了我几乎没有花费的时间;无论如何,我没有太多,它';这一阶段都是概念证明
这里是#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