请教:如何使用vba程序将3dsolid实体分解为面
请教:如何使用vba程序将3dsolid实体分解为面相当于explode命令。但是在vba中3dsolid实体没有Explode方法。
不知有什么方法可以解决。
我不希望使用vba去调用lisp的子定义函数。 关于我的这个问题我已经找到了一个解决的临时方法:
Set vl = CreateObject("VL.Application.1")
Set VLF = vl.ActiveDocument.functions
VLF.Item("eval").funcall (Sym)
不过我想知道是否有方法解决. Private Sub Explode_3DSolid()
Dim vl As Object
Dim VLF As Object, Ttt
Set vl = CreateObject("VL.Application.1")
Set VLF = vl.ActiveDocument.functions
Dim Sym As Object, Retval
'Set Sym = VLF.Item("read").funcall("(command ""_.Explode"" (handent """ & "C5DE" & """))")
Set Sym = VLF.Item("read").funcall("(handent""" & "C5DE" & """)")
Ttt = VLF.Item("eval").funcall(Sym)
End Sub
以上是我的源程序,可是执行会报错,是“类型不匹配”。望高手指教。
其中"C5DE"是我图形中的实体句柄,名字改成什么无所谓。 Private Sub Explode_3DSolid()
Dim vl As Object
Dim VLF As Object, Ttt
Set vl = CreateObject("VL.Application.1")
Set VLF = vl.ActiveDocument.functions
Dim Sym As Object, Retval
Set Sym = VLF.Item("read").funcall("(command ""circle"" (list 0 0) 5)")
Set Ttt = VLF.Item("eval").funcall(Sym)
End Sub
以上程序同样不可运行,附件为错误信息。
内容是:invalid AcadCAD command:nil
高手怎么了。我的问题你们没有人遇到吗?
关于在vba中使用lisp命令有参考资料吗? 在VBA中使用VL的时候不能调用Command函数。
直接在VBA中使用SendCommand。 SendCommand 会在命令行留下痕迹,而vl就不会。程序运行时下面命令行一同乱闪会给人一种程序很不成熟的感觉。
谢谢你的回信,这个帖子已经很久了。可能大家对此研究都不多。 VL不是万能的,但AutoCAD的文档中没有相关在VBA中调用VL的内容,所以这些内容只能是自己调试。
目前调试过程中不能使用的常用的VL函数有:
Command
vl-cmdf
vl-acad-defun
大家可以做调试并做些补充。 以上问题先告一段落吧!开发软件不成熟,没办法。
vl好像本来就不喜欢有参数的调用,我先做了一个功能型的lisp函数,然后使用vba来调用结果是一样的,所以我没有什么更好的解释。
我使用了许多方法失败后,决心使用sendcommand命令。(至少不好看强于不能用)
我的工作是将3dsolid转换为line,于是本人的方法是:
先将3dsolid转换为region,然后在使用region.explode成line。
程序:
'记录起始时模型空间的实体数
Dim FaceNumber As Double
FaceNumber = ThisDrawing.ModelSpace.Count
'分解3dsolid
Dim TempObj As AcadEntity, ObjIndex As Double
For ObjIndex = 0 To ThisDrawing.ModelSpace.Count - 1
Set TempObj = ThisDrawing.ModelSpace(ObjIndex)
If TypeOf TempObj Is IAcad3DSolid Then
ThisDrawing.SendCommand "_explode (handent """ & TempObj.Handle & """)" & vbCr & vbCr
End If
Next
'分解region
For ObjIndex = FaceNumber To ThisDrawing.ModelSpace.Count - 1
Set TempObj = ThisDrawing.ModelSpace(ObjIndex)
If TypeOf TempObj Is AcadRegion Then
TempObj.Explode
End If
Next
以上程序看似可以。实际上运行到分解region处,由于此程序使用的是lisp与vba混用的方式,由lisp语句创建的实体在vba没有退出之前没有添加到thisdrawaing.modelspace中所以
分解region处的modelspace实体数与没有执行分解3dsolid前的实体数相同,因此以上程序不可以将3dsolid分解为line
我可以上传一个例图和我的程序,请大家帮我看一看,谢谢!!!! 对不起,此问题在我制作示例的时候我发现可以解决,问题的关键是运行中将对话框关闭。
页:
[1]
2