vla addleader问题
你好我身上发生了一些奇怪的事情,我不知道为什么。
(setvar 'osmode 0)
(setq pt1 (getpoint "\nFirst point: ")
pt2 (getpoint "\nNext point: ")
pt3 (getpoint)
space (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
)
(princ pt1)
(princ pt2)
(setq ptlist (vlax-make-safearray vlax-vbDouble '(0 . 5)))
(vlax-safearray-fill ptlist (apply (function append) (list pt1 pt2)))
(setq txtobj (vla-addmtext space (vlax-3d-point pt2) 0 ""))
(setq ldrobj (vla-addleader space ptlist txtobj acLineWithArrow))
(vla-addpolyline space ptlist)
(vla-delete txtobj)
拜托,这个Lisp程序怎么了? 问题是,提供给ActiveX addleader方法的顶点参数需要是Safearray类型的变体;然而,在您的代码中,您只提供了Safearray。
下面是一个示例,演示如何构建变体:
(defun c:test1 ( / ldr pt1 pt2 spc txt )
(if
(and
(setq pt1 (getpoint "\n1st point: "))
(setq pt2 (getpoint "\n2nd point: " pt1))
)
(progn
(setq spc
(vlax-get-property (vla-get-activedocument (vlax-get-acad-object))
(if (= 1 (getvar 'cvport))
'paperspace
'modelspace
)
)
)
(setq txt (vla-addmtext spc (vlax-3D-point (trans pt2 1 0)) 0.0 ""))
(setq ldr
(vla-addleader spc
(vlax-make-variant
(vlax-safearray-fill
(vlax-make-safearray vlax-vbdouble '(0 . 5))
(append (trans pt1 1 0) (trans pt2 1 0))
)
)
txt aclinewitharrow
)
)
(vla-delete txt)
)
)
(princ)
)
但是,通过使用未记录的vlax调用函数代替vlax调用方法或vla addleader,您可以完全避免使用变体和安全数组(有关这些差异的更多信息,请参阅此处):
(defun c:test2 ( / ldr pt1 pt2 spc txt )
(if
(and
(setq pt1 (getpoint "\n1st point: "))
(setq pt2 (getpoint "\n2nd point: " pt1))
)
(progn
(setq spc
(vlax-get-property (vla-get-activedocument (vlax-get-acad-object))
(if (= 1 (getvar 'cvport))
'paperspace
'modelspace
)
)
)
(setq txt (vlax-invoke spc 'addmtext(trans pt2 1 0) 0.0 "")
ldr (vlax-invoke spc 'addleader (append (trans pt1 1 0) (trans pt2 1 0)) txt aclinewitharrow)
)
(vla-delete txt)
)
)
(princ)
)
然而,就领导实体而言,在我看来,使用entmake/entmakex的Vanilla AutoLISP路由要简单得多:
(defun c:test3 ( / pt1 pt2 )
(if
(and
(setq pt1 (getpoint "\n1st point: "))
(setq pt2 (getpoint "\n2nd point: " pt1))
)
(entmake
(list
'(000 . "LEADER")
'(100 . "AcDbEntity")
'(100 . "AcDbLeader")
(cons 010 (trans pt1 1 0))
(cons 010 (trans pt2 1 0))
(cons 210 (trans '(0.0 0.0 1.0) 1 0 t))
)
)
)
(princ)
)
李·麦克,
你又做了一次!
哦,你。。。
非常感谢!
(认真地) Vanilla lisp按预期工作,但其他语言在VLisp中仍然出现相同的问题
我们如何修复它?
问题是我试着这样做:
我明白了:
通过运行C:test1或C:test2
有什么提示吗?
不客气!
我认为Visual LISP ActiveX addleader方法存在一个已知的错误,即无法指定null注释参数;因此,当使用此方法创建引线时,将自动为文本对象生成“平台”。
我的建议是:使用Vanilla AutoLISP。
当然再次感谢!
页:
[1]