Spageddie 发表于 2005-9-15 20:49:45

DXF代码

我想从图形中的一个对象获取DXF代码..
我知道使用LISP (entget (car (entsel))可以做到这一点,但是在VBA能做到吗?
如果可能的话,您能发布一些示例代码吗?
**** Hidden Message *****

Kerry 发表于 2005-9-15 21:14:49

嗨,埃迪,
我找到了这个。 其 VLAX 接口是必需的。
没有亲自尝试过,所以在这里发布作为任何有..
http://www.acadx.com/
GetAssociationList 在 Visual Basic 部分。
我认为这可能是你需要的..
克里

Spageddie 发表于 2005-9-17 08:45:28

克里,
我看了一下你发布的链接,看起来它会帮助我....
我只是好奇...与它的视觉lisp部分...如何修改它以使用外部参照?
使用 getubentity ?
修改:
[代码0
]原文代码:
Public Function GetAssociationList(ent As AcadEntity)
    Dim obj As VLAX, ent As AcadEntity, retVal
   
    ThisDrawing.Utility.GetEntity ent, pt, "Select object: "
   
    Set obj = New VLAX
    obj.EvalLispExpression "(defun getEDD (handle / lst) (vlax-safearray-fill (vlax-make-safearray " & _
                           "vlax-vbvariant (cons 0 (1- (length (setq lst (entget (handent handle))))))" & _
                           ") (mapcar '(lambda (x) (vlax-make-variant (vlax-safearray-fill" & _
                           "(vlax-make-safearray vlax-vbvariant '(0 . 1))(list (vlax-make-variant (car x))" & _
                           "(vlax-make-variant(cond ((= (type (cdr x)) 'ENAME) (vla-get-objectid" & _
                           "(vlax-ename->vla-object (cdr x)))) ((= (type (cdr x)) 'LIST) (vlax-safearray-fill" & _
                           "(vlax-make-safearray vlax-vbVariant (cons 0 (1- (length (cdr x))))) (cdr x)" & _
                           ")) (t (cdr x)))))))) lst)))"
    obj.SetLispSymbol "handle", ent.Handle
    retVal = obj.EvalLispExpression("(getedd handle)")
    obj.NullifySymbol "geteed", "handle"
    GetAssociationList = retVal
End Function

Spageddie 发表于 2005-9-18 19:19:02

嗨,埃迪,你实际上是想确定哪些属性。
在我看来,直接使用VBA可能更经济。..如果信息可用,我从VBA回来
我不怎么和VBA一起做复杂的工作。如果你能说得更清楚一点,这里的一个勇气可能会有所帮助。我知道Glenn对外部参照做了特别的研究

Kerry 发表于 2005-9-18 19:43:48

克里,
物体已经脱离了AutoPLANT管道...对象本身被称为AT_CYLINDER
我已经成功地在其中一个对象上使用了代码,但我真的需要通过外部参照访问对象。

Spageddie 发表于 2005-9-18 20:00:06

除非我误解了,这幅画。utility . GetSubEntity object selected,pt,TransMatrix,ContextData," Select object: "
应该可以。
只要小心输入正确选择的对象..

Kerry 发表于 2005-9-18 20:14:43

getubentity 可以正常工作,但此部分代码无法从该对象获取信息。
[代码 2]
retval ended empty...
我有一种感觉,它可能与运行它的类模块有关。(从acadx下载)
供您参考:这来自acadx网站
注意:vlax.cls包含在附加的ZIP中

Spageddie 发表于 2005-9-18 20:35:34

如果我没记错的话(不是一个好的记录),我记得几年前弗兰克报告说vlax在不同的AutoCAD版本中运行时没有正确运行。
您需要在vlax类构造函数中查找类似以下内容的语句:
ThisDrawing.Application.GetInterfaceObject("VL.Application.1")
并将其更改为正确的版本号,例如:
ThisDrawing.Application.GetInterfaceObject("VL.Application.15")

ThisDrawing.Application.GetInterfaceObject("VL.Application.16")
建议:重写构造函数,使其在任何版本的AutoCAD中运行。
/所有猜测。
编辑:修复拼写错误。

Spageddie 发表于 2005-9-18 21:02:57

谢谢你..我会调查的..

Spageddie 发表于 2005-9-19 01:24:12

谢谢你澄清了格伦...我在想怎么做,为什么....非常感谢..:kewl:
页: [1] 2
查看完整版本: DXF代码