tomelgato 发表于 2022-7-5 16:32:57

难以置信,似乎alisp部分在win和mac版本之间非常不同
 
 
; 错误:无函数定义:VLAX-CURVE-GETSTARTPOINT
 
在autodesk网页上:
 
返回曲线的起点(在WCS中)
 
支持的平台:仅限Windows
 
grrr,我不觉得好笑

ronjonp 发表于 2022-7-5 16:37:14

如果您希望使用使用曲线函数的lisp例程,那么您会发现Mac版本相当吃力。

tomelgato 发表于 2022-7-5 16:38:19

看起来不太好:
 
程序支持的编程接口包括:
 
Windows和Mac操作系统
AutoLISP®
二次开发™
仅限Windows
ActiveX®自动化
管理。净额
VBA(Visual Basic®for Applications)
Visual LISP™
JavaScript

tomelgato 发表于 2022-7-5 16:41:21

 
是的,看起来像。这是一个令人沮丧的人。也许我需要调查犀牛。。。太懒了,无法再次从0开始,但mac autocad也有一些其他方面落后&存在问题。

Grrr 发表于 2022-7-5 16:44:32

只是为了确认罗伊的代码工作得完美无缺:
 
 
但我必须改变的一件事是:
 
(repeat (1+ (fix (/ (apply 'distance basePtLst) dist)))
 
因为它跳过了最后一个维度(假设增量为100个单位,而最后一个维度是线端点之前的150个单位)。

tomelgato 发表于 2022-7-5 16:49:30

非常感谢Roy&Grrr!!!!
 
 
太棒了,这正是我想要的。
 
将尝试在虚拟机上安装Win AutoCad,以便我可以使用此功能,因为AutoCad Mac似乎是一个迷!
 
干杯-汤姆

Roy_043 发表于 2022-7-5 16:54:05

抓得好。谢谢我还忘了包括(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)
)

Roy_043 发表于 2022-7-5 16:55:57

您也可以在不使用任何代码的情况下解决此问题:
 
[列表=1]
[*]从基线起点到曲线顶部(或底部)以外的点绘制一条垂直线。
[*]创建一个多行文字,其中包含一个显示行长度的字段。
[*]排列垂直线和多行文字。
[*]使用曲线作为切割图元修剪所有垂直线。使用_Fence选项可以有效地选择要修剪的所有线。
[*]使用\u UpdateFields命令。
[/列表]

tomelgato 发表于 2022-7-5 17:00:37

非常感谢罗伊,我会试试的。
 
在虚拟机上安装了ACad,你的代码运行得很好。非常感谢,节省了我很多时间!!!!
页: 1 [2]
查看完整版本: 重复测量