adc 发表于 2011-7-5 12:44:30

求各点总距离

依次选中各点,求总距离,想法是先画pl线,统计pl线长度,然后删除,但是不能正确执行,请帮忙看看是什么问题;;求各点总距离
(defun C:tt ()
(setq gp1 (getpoint))
(command "pline" gp1)
(while (> (getvar "cmdactive") 0) (command pause))
(vl-load-com)
(setq ent (entlast))
(setq curve-obj (vlax-ename->vla-object (car ent)))
(setq leng (vlax-curve-getDistAtParam
               curve-obj
               (vlax-curve-getEndParam curve-obj)
             )
)
(command "ERASE" ent "")
(princ leng)
)

snddd2000 发表于 2011-7-5 13:23:11

(defun C:tt ()
(setq gp1 (getpoint))
(command "pline" gp1)
(while (> (getvar "cmdactive") 0) (command pause))

(setq ent (entlast))
(command "lengthen" ent "")
(setq leng (getvar "perimeter"))
(command "ERASE" ent "")
(print leng)
(princ)
)

adc 发表于 2011-7-5 13:25:11

谢谢楼上,也多谢ljpnb给了另一个方法

snddd2000 发表于 2011-7-5 13:52:08

分享下另一个方法嘛

adc 发表于 2011-7-5 14:37:54

ljpnb的,再次谢谢
(defun c:dtt ()
(setq p1 (getpoint "\n选择起点:")dis 0)
(while (setq p2 (getpoint p1 "\n选择起点:"))
    (setq dis (+ (distance p1 p2) dis))
    (setq p1 p2)
)
(princ (strcat "各点的总长= " (rtos dis)))
(princ)
)

mandala 发表于 2011-7-5 22:19:00

本帖最后由 mandala 于 2011-7-5 22:25 编辑

你的lsp问题在这里:

(defun C:tt ()
(setq gp1 (getpoint))
(command "pline" gp1)
(while (> (getvar "cmdactive") 0) (command pause))
(vl-load-com)
(setq ent (entlast))
(setq curve-obj (vlax-ename->vla-object (car ent)))      >>>>>>改成   (setq curve-obj (vlax-ename->vla-object ent))
(setq leng (vlax-curve-getDistAtParam
curve-obj
(vlax-curve-getEndParam curve-obj)
)
)
(command "ERASE" ent "")
(princ leng)
)

entlast跟entsel的结果是有区别滴……

mandala 发表于 2011-7-5 22:24:43

如果单纯是为了完成主贴的任务,我倒觉得一楼、二楼的思路比5楼要更具实用性,因为更直观。虽然5楼的lsp不用连线,但带来的后果是结果的不可靠性——选点时,实际操作中我们可能会漏掉,或者多点了那么一个点。

在lisp编程时,往往是走了一点弯路的解决方案却偏偏是最实用的方案。

chengx2000 发表于 2011-7-5 22:32:48

本帖最后由 chengx2000 于 2011-7-5 22:34 编辑

回复 mandala 的帖子

请问楼主系统变量“cmdactive”控制什么的,”(< (getvar "cmdactive") 0)“是否表示输入了“Esc”?
命令看考中这么写的:
1      激活普通命令
2      激活普通命令和透明命令
4      激活脚本
8      激活对话框
16      激活 DDE
32      激活 AutoLISP(仅对 ObjectARX 定义的命令可见)
64      激活 ObjectARX 命令

mandala 发表于 2011-7-6 09:35:53

本帖最后由 mandala 于 2011-7-6 09:36 编辑

chengx2000 发表于 2011-7-5 22:32 http://bbs.mjtd.com/static/image/common/back.gif
回复 mandala 的帖子

请问楼主系统变量“cmdactive”控制什么的,”(< (getvar "cmdactive") 0)“是否表 ...

简单的说该变量就是判断cad命令是否还在进行中。如果还在进行,那么pause,等待下一步输入。具体可自己查一下cad系统变量大全。
另外我不是楼主,是楼上。

adc 发表于 2011-7-6 11:06:44

本帖最后由 adc 于 2011-7-6 11:33 编辑

回复 mandala 的帖子

看来细节的东西要遇到具体问题才更清楚,谢谢,如果要加一个执行过程中退出时,删除以前画的线要怎样处理?
页: [1] 2
查看完整版本: 求各点总距离