设置 dxf 50 w/ lisp
有没有人知道如何用Frank的VLAX.CLS设置一个扭曲的视图,因为我不知道lisp Ican'弄清楚。
**** Hidden Message ***** 正如托尼. t .会说的,拥有一个可以被调用的lisp函数比试图用VL接口来做所有的事情更有意义。这是一个小函数,它可以满足你的需要,但是我不确定TwistAngle实际上做了什么......我可以用这个函数改变它,视图对话框显示它被改变了,但是恢复的实际视图和它开始时是一样的。
无论如何,你可以这样从VBA打电话给我:
''First 2 functions from Tony T's example sent to me
Public vlApp As Object
' Initialize and/or return vl application object
' Note that we don't try to cache any other Vl
' objects, because they are all document-specific
Public Function GetVlApp() As Object
If (vlApp Is Nothing) Then
Set vlApp = AcadApplication.GetInterfaceObject("Vl.Application.16")
End If
Set GetVlApp = vlApp
End Function
' Call this to get a LISP function defined in the Active document
' (do not cache the result because it is document-specific)
Public Function VlFunc(Name As String) As Object
Set VlFunc = GetVlApp.ActiveDocument.Functions.Item(Name)
End Function
''This calls the setviewangle lisp function
Sub testViewAngle()
Dim oView As AcadView
Dim dRot As Double
Set oView = ThisDrawing.Views.Item("test")
dRot = 1.57
VlFunc("setviewangle").Funcall oView.Handle, dRot
End Sub
和lisp:
(defun setviewangle (hndl ang / elist)
(setq elist (entget (handent hndl)))
(entmod (subst (cons 50 ang)(assoc 50 elist) elist))
)
HTH,
杰夫 Jeff我在lisp自动加载方面遇到了问题,我已经在我的acaddoc.lisp中添加了必要的内容,但是没有成功。我必须在每个新的绘图中加载它,否则我会找不到密钥。然后我试着在vlax类中使用它作为一个字符串,我不能完全正确。
Dim Vl As New VLAX
Dim sLisp As String
sLisp = "(setq elist(entget(handent " " " & oview . handle & " ")" & _
"(entmod(subst(cons 50 " " " & dRot & " ")(assoc 50 elist)elist)))"
Vl。EvalLispExpression sLisp
另外,我找到了一种更新视口的方法,似乎需要更新新的视口。以前我使用过thisdrawing.save,它可以工作,但有一些缺点(在refedit中不起作用)。
查看句柄,application.update照常不执行任何操作
移动到ps/ms会创建一个新的句柄(和视窗)
删除效果很好。this drawing . active viewport . delete
更新新的活动视口 Bryco,如果您将我发布的lisp放入您的acaddoc.lsp中,并且acaddoc.lsp位于搜索路径中,它应该会加载到每个图形中。如果不是,那就有问题了....
至于您尝试在VBA使用它,这里是正确的语法,但它仍然不工作。lisp变量“elist”设置正确,但是(entmod)失败了,我看不出它失败的任何原因。 我在谷歌上搜索了大约一个小时的vl,读到了一些关于需要vl-load-com的内容。无论我把它放在哪里都没有用,所以也许你在启动时做了一些事情,允许vl调用lisp,或者像你说的有问题。
杰夫没有出现。 大概是因为我是低能儿没贴吧....我真的不应该一边看比赛一边在这里发帖.....
sLisp = "(setq elist (entget (handent """ & oView.handle & """)))" & _
"(entmod (subst (cons 50 " & dRot & ")(assoc 50 elist) elist))"
(VL-load-com)只需在每个Acad会话中调用一次。把它放在你的acad.lsp里,然后忘掉它。
页:
[1]