[求助] 请帮忙写一个lisp获得pline线的分段长度
本帖最后由 作者 于 2010-11-9 16:35:58 编辑 <br /><br /> <font face="Verdana">请帮忙写一个lisp获得pline线的分段长度,并把每个得到的数据,按顺序变成变量,第一段的长度为a,二段b,等等,最终的目的是想做一个等高矩形的命令,不需要对话框。每个矩形之间有一定的距离</font> 没有对话框的!(defun c:tt()
(setq osmode (getvar "osmode")
cla (getvar "clayer"))
(setvar "osmode" 0)
(setq Height (getreal "\n输入高度:")
jj (getreal "\n输入间距:"))
(princ "\n选择多段线")
(setq en (entsel))
(setq p0 (cadr en)
en (car en)
)
(setq la (cdr (assoc 8 (entget en))))
(setvar "clayer" la)
(setq pt (getpoint p0 "\n标注位置:"))
(setq endPara (vlax-curve-getEndParam en)
n 0)
(repeat (fix endPara)
(setq d (distance (vlax-curve-getPointAtParam en n) (vlax-curve-getPointAtParam en (setq n (1+ n)))))
(command "_.rectang" pt (strcat "@" (rtos d 2) "," (rtos Height 2)))
(setq pt (polar pt 0 (+ d jj)))
)
(setvar "osmode" osmode)
(setvar "clayer" cla)
(princ)
)
本帖最后由 作者 于 2010-11-10 8:38:44 编辑
有对话框的!
(defun c:tt(/ jj height)
(defun gxl-chkreal (a *key*)
(setq a (read a))
(if (or (= 'INT (type a)) (= 'REAL (type a)))
(progn
(setq chk_flag t)
(setq a a)
);progn
(progn
(alert "\请输入实型数!")
(mode_tile *key* 2)
(setq chk_flag nil)
);progn
);if
)
(setq fn (vl-filename-mktemp "aa.dcl"))
(setq f (open fn "w"))
(write-line "getdata:dialog{" f)
(write-line "label = \" 【等高矩形】\";" f)
(write-line ":boxed_column {" f)
(write-line "label = \"\";" f)
(write-line ": edit_box {" f)
(write-line "key = \"height\";" f)
(write-line "value = 500.00;" f)
(write-line "label = \"高度\";" f)
(write-line "width = 20;" f)
(write-line "}" f)
(write-line ": edit_box {" f)
(write-line "key = \"jj\";" f)
(write-line "value = 30.00;" f)
(write-line "label = \"间隔\";" f)
(write-line "width = 20;" f)
(write-line " }" f)
(write-line "}" f)
(write-line "ok_cancel;" f)
(write-line "}" f)
(close f)
(setq dlg_code (load_dialog fn))
(new_dialog "getdata" dlg_code)
(setq height 500.0 jj 30.0)
(Action_tile "height" "(setq height (gxl-chkreal $value $key))")
(Action_tile "jj" "(setq jj (gxl-chkreal $value $key))")
(mode_tile "height" 2)
(setq ecode (start_dialog))
(if (= 1 ecode)
(progn
(setq osmode (getvar "osmode")
cla (getvar "clayer"))
(setvar "osmode" 0)
(princ "\n选择多段线")
(while (not (and (setq en (entsel)) (= "LWPOLYLINE" (cdr (assoc 0 (entget (car en)))))))
(princ "\n你选择的不是多段线,请重新选择多段线")
)
(setq p0 (cadr en)
en (car en)
)
(setq la (cdr (assoc 8 (entget en))))
(setvar "clayer" la)
(setq pt (getpoint p0 "\n标注位置:"))
(setq endPara (vlax-curve-getEndParam en)
n 0)
(repeat (fix endPara)
(setq d (distance (vlax-curve-getPointAtParam en n) (vlax-curve-getPointAtParam en (setq n (1+ n)))))
(if (> d 0)
(progn
(command "_.rectang" pt (strcat "@" (rtos d 2) "," (rtos Height 2)))
(setq pt (polar pt 0 (+ d jj)))
)
)
)
(setvar "osmode" osmode)
(setvar "clayer" cla)
(princ)
)
)
(vl-file-deletefn)
(princ)
) <p>谢谢,万分感谢,</p> 非常好的程序!谢谢版主! 谢谢楼主的启发,我有想法了 很受启发 学习了!!!! Gu_xl 发表于 2010-11-9 19:50
有对话框的!
这个无法运行,很奇怪啊:'(
页:
[1]