[求助]请高手帮忙看看这个"线段等分打断"程序为什么会'认生"
<FONT face=宋体 size=2>我是从论坛下载这"线段等分打断"程序,很实用方便,是我一人在单位四台机子拷贝加载,却获得二个效果,二台能运行命令行提示见图一,,二台无法运行命令行提示见图二.<BR>四台机子都是XP操作系统,我都加载在CAD2004版本,CAD2004并没有装任何外挂工具,但二台无法运行的还装有CAD2002版本,我不懂编程,误认为是否二个版本冲突引起,就将CAD2002删除了,但还是不能运行,见笑了.<BR>恳请高手帮看看到底是什么原因,会不会程序不完善呢,附上该程序,先谢谢了!<BR><BR><BR>(defun c:xbr (/ os oe ss vss n d len e obj e)<BR>(princ "\n等分打断线段")<BR>(defun *error* (msg) (setvar "osmode" os)(vl-cmdf ".undo" "e")(setq *error* oe))<BR>(vl-cmdf ".undo" "be")<BR>(princ "\n选择要等分的对象:")<BR>(setq oe *error*<BR>os (getvar "osmode")<BR>ss (ssget '((0 . "LINE,*POLYLINE,SPLINE,ARC")))<BR>vss (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object))))<BR>(setvar "osmode" 0)<BR>(or (setq n (getint "\n定数等分<需定距等分/直接回车>:")) (setq d (getdist "\n指定线段长度:")))<BR>(vlax-for obj vss<BR>(setq len (vlax-curve-getdistatparam obj (vlax-curve-getendparam obj))<BR>e (vlax-vla-object->ename obj))<BR>(if n (setq d (/ len n) m n)<BR>(setq m (1+ (fix (/ len d)))))<BR>(repeat (1- m)<BR>(if (setq pt (vlax-curve-getpointatdist obj d))<BR>(vl-cmdf ".break" (list e pt) pt)<BR>)<BR>(setq e (entlast)<BR>obj (vlax-ename->vla-object e))<BR>)<BR>)<BR>(setvar "osmode" os)<BR>(vl-cmdf ".undo" "e")(princ)<BR>)</FONT> 图不是很清楚,你还是描述一下出问题的系统是出现什么问题。我WIN2000+CAD2004运行没有问题 管理员您好!当选择线段回车后,就结束了.我不懂编程,一位斑主提出看法如下:请管理员参考,能给一个完善的程序.
<FONT face=宋体 size=2>VLISP中这句会经常出错,<BR>(vla-get-activeselectionset<BR>(vla-get-activedocument (vlax-get-acad-object))<BR>)<BR>[转贴]<BR>调用activeselectionset时真正的内部过程是<BR>新建CURRENT选择集(如果选择集不存在则新建,如果选择集<BR>存在则Clear清空)->用AddItems方法将最后一次选择集的物<BR>件放到该选择集中。</FONT> 本帖最后由 作者 于 2005-3-30 19:01:52 编辑 <br /><br /> 改成这样你再试试
(defun c:xbr (/ os oe ss vss n i d len e obj e)<BR> (princ "\n等分打断线段")<BR> (defun *error* (msg)<BR> (setvar "osmode" os)<BR> (vl-cmdf ".undo" "e")<BR> (setq *error* oe)<BR> )<BR> (vl-cmdf ".undo" "be")<BR> (princ "\n选择要等分的对象:")<BR> (setq oe *error*<BR> os (getvar "osmode")<BR> ss (ssget '((0 . "LINE,*POLYLINE,SPLINE,ARC")))<BR> )<BR> (setvar "osmode" 0)<BR> (or (setq n (getint "\n定数等分<需定距等分/直接回车>:"))<BR> (setq d (getdist "\n指定线段长度:"))<BR> )<BR> (setq i 0)<BR> (if ss<BR> (repeat (sslength ss)<BR> (setq e (ssname ss i))<BR> (setq len (vlax-curve-getdistatparam e (vlax-curve-getendparam e)))<BR> (if n<BR> (setq d (/ len n)<BR> m n<BR> )<BR> (setq m (1+ (fix (/ len d))))<BR> )<BR> (repeat (1- m)<BR> (if (setq pt (vlax-curve-getpointatdist e d))<BR> (vl-cmdf ".break" (list e pt) pt)<BR> )<BR> (setq e (entlast))<BR> )<BR> (setq i (1+ i))<BR> )<BR> (setvar "osmode" os)<BR> (vl-cmdf ".undo" "e")<BR> (princ)<BR>)<BR> 管理员您好!
谢谢您的热心帮助,在原不能运行命令的机子试了,还是不行,连命令也为未知命令了.
复制上来的时候不知道怎么漏了一个括号,4楼的程序已修改好,你再试试 管理员您好!
不好意思,给你增添麻烦了,还是不行,也许这程序不完善,有时在画的曲线打断等分也不一样,我也想放弃了.谢谢了 ;;4楼程序还是差一个")"(defun C:XBR (/ OS OE SS VSS N I D LEN E OBJ E)
(princ "\n等分打断线段") (defun *ERROR* (MSG)
(setvar "osmode" OS)
(vl-cmdf ".undo" "e")
(setq *ERROR* OE)
) (vl-cmdf ".undo" "be")
(princ "\n选择要等分的物件:")
(setqOE *ERROR*
OS (getvar "osmode")
SS (ssget '((0 . "LINE,*POLYLINE,SPLINE,ARC")))
)
(setvar "osmode" 0)
(or (setq N (getint "\n定数等分<需定距等分/直接回车>:"))
(setq D (getdist "\n指定线段长度:"))
)
(setq I 0)
(if SS
(repeat (sslength SS)
(setq E (ssname SS I))
(setq
LEN (vlax-curve-getdistatparam E (vlax-curve-getendparam E))
)
(if N
(setq D(/ LEN N)
MN
)
(setq M (1+ (fix (/ LEN D))))
)
(repeat (1- M)
(if (setq PT (vlax-curve-getpointatdist E D))
(vl-cmdf ".break" (list E PT) PT)
)
(setq E (entlast))
)
(setq I (1+ I))
)
)
(setvar "osmode" OS)
(vl-cmdf ".undo" "e")
(princ)
) 为什么?难怪开始会少一个括号,我记得我是测试过再复制上来的,而且怎么会少中间的括号,真是搞不明白了。。。 龙龙仔您好!
您总算出面了,先谢谢您了,成功了.
<FONT face=宋体 size=2>但另外这程序还有个问题,在西南等轴测画曲线再用三维动态观察器转动后去打断时,有时会出现打断的等分数少了,产生长短不一,有时又是绝对等分,挺奇怪的.您不信的话多试试,不知这问题如何解决?</FONT>
页:
[1]
2