; 错误:无函数定义:VLAX-CURVE-GETSTARTPOINT
在autodesk网页上:
返回曲线的起点(在WCS中)
支持的平台:仅限Windows
grrr,我不觉得好笑 如果您希望使用使用曲线函数的lisp例程,那么您会发现Mac版本相当吃力。 看起来不太好:
程序支持的编程接口包括:
Windows和Mac操作系统
AutoLISP®
二次开发™
仅限Windows
ActiveX®自动化
管理。净额
VBA(Visual Basic®for Applications)
Visual LISP™
JavaScript
是的,看起来像。这是一个令人沮丧的人。也许我需要调查犀牛。。。太懒了,无法再次从0开始,但mac autocad也有一些其他方面落后&存在问题。 只是为了确认罗伊的代码工作得完美无缺:
但我必须改变的一件事是:
(repeat (1+ (fix (/ (apply 'distance basePtLst) dist)))
因为它跳过了最后一个维度(假设增量为100个单位,而最后一个维度是线端点之前的150个单位)。 非常感谢Roy&Grrr!!!!
太棒了,这正是我想要的。
将尝试在虚拟机上安装Win AutoCad,以便我可以使用此功能,因为AutoCad Mac似乎是一个迷!
干杯-汤姆 抓得好。谢谢我还忘了包括(vl load com)。
代码的新版本修复了以下问题:
(vl-load-com)
(defun KGA_List_Divide_3 (lst / ret)
(repeat (/ (length lst) 3)
(setq ret (cons (list (car lst) (cadr lst) (caddr lst)) ret))
(setq lst (cdddr lst))
)
(reverse ret)
)
(defun KGA_Sys_ObjectOwner (obj)
(vla-objectidtoobject (vla-get-database obj) (vla-get-ownerid obj))
)
(defun DimCurveAtPoint (curve pt / space tmp)
(setq space (KGA_Sys_ObjectOwner curve))
(setq tmp (vlax-invoke space 'addxline pt (mapcar '+ '(0.0 1.0 0.0) pt)))
(foreach int (KGA_List_Divide_3 (vlax-invoke curve 'intersectwith tmp acextendnone))
(vlax-invoke space 'adddimaligned pt int pt)
)
(vla-delete tmp)
)
(defun c:DimCurve ( / baseEntselLst basePtLst curve dist doc pt vec)
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(vla-endundomark doc)
(vla-startundomark doc)
(if
(and
(setq curve (car (entsel "\nSelect curve: ")))
(setq baseEntselLst (entsel "\nSelect base line near start point: "))
(setq dist (getdist "\nDistance between dimensions: "))
)
(progn
(setq pt (cadr baseEntselLst))
(setq basePtLst
(list
(vlax-curve-getstartpoint (car baseEntselLst))
(vlax-curve-getendpoint (car baseEntselLst))
)
)
(if (> (distance pt (car basePtLst)) (distance pt (cadr basePtLst)))
(setq basePtLst (reverse basePtLst))
)
(setq curve (vlax-ename->vla-object curve))
(setq pt (car basePtLst))
(setq vec
(list
(if (> (caar basePtLst) (caadr basePtLst)) (- dist) dist)
0.0
0.0
)
)
(repeat (1+ (fix (/ (apply 'distance basePtLst) dist))) ; Thanks Grrr.
(DimCurveAtPoint curve pt)
(setq pt (mapcar '+ pt vec))
)
)
)
(vla-endundomark doc)
(princ)
) 您也可以在不使用任何代码的情况下解决此问题:
[列表=1]
[*]从基线起点到曲线顶部(或底部)以外的点绘制一条垂直线。
[*]创建一个多行文字,其中包含一个显示行长度的字段。
[*]排列垂直线和多行文字。
[*]使用曲线作为切割图元修剪所有垂直线。使用_Fence选项可以有效地选择要修剪的所有线。
[*]使用\u UpdateFields命令。
[/列表] 非常感谢罗伊,我会试试的。
在虚拟机上安装了ACad,你的代码运行得很好。非常感谢,节省了我很多时间!!!!
页:
1
[2]