小妹丁 发表于 2010-5-6 17:04:00

[求助]很长时间没碰程序,帮忙看下。

<p>(defun c:zxx<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (/&nbsp;ss en os oldlayer endata y_endata pt10 pt11 p10&nbsp;p11 ptx<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pt k pt_y)<br/>&nbsp; (setq os (getvar "osmode"))<br/>&nbsp; (setq oldlayer (getvar "CLAYER"))<br/>&nbsp; (command "_.undo" "be")<br/>&nbsp; (setvar "clayer" "中心线")<br/>&nbsp; (prompt "选取投影圆和投影中心线位置")<br/>&nbsp; (prompt "选取投影圆:")<br/>&nbsp; (setq ss (ssget '((0 . "CIRCLE"))))<br/>&nbsp; (prompt "选取投影中心线第一条边线:")<br/>&nbsp; (setq en (nentsel))<br/>&nbsp; (setq&nbsp;pt&nbsp;&nbsp;&nbsp;&nbsp; (osnap (cadr en) "nea")<br/>&nbsp;endata<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (entget (car en))<br/>&nbsp; )<br/>&nbsp; (setq&nbsp;pt10<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cdr (assoc 10 endata))<br/>&nbsp;pt11<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cdr (assoc 11 endata))<br/>&nbsp; )<br/>&nbsp; (setvar "osmode" 128)<br/>&nbsp; (setq ptf (getpoint pt "\n投影中心线第二条边线:"))<br/>&nbsp; (setq ang1 (angle ptf pt))<br/>&nbsp; (setq ang2 (angle pt ptf))<br/>&nbsp; (setq dis (distance pt ptf))<br/>&nbsp; (setq k 0)<br/>&nbsp; (repeat (sslength ss)<br/>&nbsp;&nbsp;&nbsp; (setq y_endata (entget (ssname ss k)))<br/>&nbsp;&nbsp;&nbsp; (setq pt_y<br/>&nbsp;&nbsp;&nbsp; (cdr (assoc 10 y_endata))<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; (setq ptx (inters pt_y<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (polar pt_y ang2 5.0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pt10<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pt11<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; (setq p10 (polar ptx ang1 3.0))<br/>&nbsp;&nbsp;&nbsp; (setq p11 (polar ptx ang2 (+ 3.0 dis)))<br/>&nbsp;&nbsp;&nbsp; (setvar "osmode" 0)<br/>&nbsp;&nbsp;&nbsp; (command "line" p10 p11 "")<br/>&nbsp;&nbsp;&nbsp; (setq k (1+ k))<br/>&nbsp; )<br/>&nbsp; (command "_.undo" "e")<br/>&nbsp; (setvar "osmode" os)<br/>&nbsp; (setvar "clayer" oldlayer)<br/>&nbsp; (princ)<br/>)</p><p><br/>(princ "**zxx**")<br/>在p10 处出错了,!endata时,返回nil</p>

ZZXXQQ 发表于 2010-5-6 19:43:00

两平行线无交点(inters pt_y (polar pt_y ang2 5.0) pt10 pt11 T)

小妹丁 发表于 2010-5-6 22:53:00

<p>二楼版主,是正交线,如何变成平行了?</p><p>ptx是有值的,我再查查,最早是可以画线的。</p>

小妹丁 发表于 2010-5-7 21:38:00

昏,没找出错处。

小妹丁 发表于 2010-5-10 23:45:00

再来提提这个问题

ZZXXQQ 发表于 2010-5-11 20:18:00

因(setvar "osmode" 128)捕捉的是垂直点,所以直线(pt,ptf)与直线(pt10,pt11)平行。<br/>因为不明白楼主到底原来的目的是什么,所以没法改程序。最好给个示意图。

小妹丁 发表于 2010-5-11 21:13:00

ZZXXQQ发表于2010-5-11 20:18:00static/image/common/back.gif因(setvar \"osmode\" 128)捕捉的是垂直点,所以直线(pt,ptf)与直线(pt10,pt11)平行。因为不明白楼主到底原来的目的是什么,所以没法改程序。最好给个示意图。

<p>刚才,抽了点时间修改,现在对水平和垂直线可行,对任意平行线,还没做到。 </p><p>(defun c:zxx (/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; os&nbsp;&nbsp;&nbsp;&nbsp; oldlayer&nbsp;&nbsp; ss&nbsp; en&nbsp;pt&nbsp;&nbsp;&nbsp;&nbsp; endata<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pt10&nbsp;&nbsp; pt11&nbsp;&nbsp; ang&nbsp;&nbsp;&nbsp; dist&nbsp;&nbsp; k&nbsp; y_endata&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pt_y<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pt_yy&nbsp; p10&nbsp;&nbsp;&nbsp; p11&nbsp;&nbsp;&nbsp; ptx<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp; (setq os (getvar "osmode"))<br/>&nbsp; (setq oldlayer (getvar "CLAYER"))<br/>&nbsp; (command "_.undo" "be")<br/>&nbsp; (setvar "clayer" "中心线")<br/>&nbsp; (prompt "\选取投影圆:")<br/>&nbsp; (setq ss (ssget '((0 . "CIRCLE"))))<br/>&nbsp; (prompt "选取投影中心线第一条边线:")<br/>&nbsp; (setq en (nentsel))<br/>&nbsp; (setq&nbsp;pt&nbsp;&nbsp;&nbsp;&nbsp; (osnap (cadr en) "nea")<br/>&nbsp;endata<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (entget (car en))<br/>&nbsp; )<br/>&nbsp; (setq&nbsp;pt10<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cdr (assoc 10 endata))<br/>&nbsp;pt11<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cdr (assoc 11 endata))<br/>&nbsp; )<br/>&nbsp; (cond<br/>&nbsp;&nbsp;&nbsp; ((or (= pi (abs (angle pt10 pt11)))<br/>&nbsp; (= 0.0 (abs (angle pt10 pt11)))<br/>&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq ang (* 0.5 pi))<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; ((or (= (* 0.5 pi) (abs (angle pt10 pt11)))<br/>&nbsp; (= (* 1.5 pi) (abs (angle pt10 pt11)))<br/>&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq ang 0.0)<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; )<br/>&nbsp; (setvar "osmode" 128)<br/>&nbsp; (setq dist (getdist pt "\n投影中心线第二条边线:"))<br/>&nbsp; (setvar "osmode" 0)<br/>&nbsp; (setq k 0)<br/>&nbsp; (repeat (sslength ss)<br/>&nbsp;&nbsp;&nbsp; (setq y_endata (entget (ssname ss k)))<br/>&nbsp;&nbsp;&nbsp; (setq pt_y<br/>&nbsp;&nbsp;(cdr (assoc 10 y_endata))<br/>&nbsp;&nbsp; pt_yy&nbsp;(polar pt_y ang 5.0)<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; (setq ptx (inters pt_y pt_yy pt10 pt11 nil)<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; (setq p10 ptx)<br/>&nbsp;&nbsp;&nbsp; (setq p11 (polar ptx ang dist))<br/>&nbsp;&nbsp;&nbsp; (setq p10 (polar p10 (angle p11 p10) 3)<br/>&nbsp;&nbsp; p11 (polar p11 (angle p10 p11) 3)<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; (setvar "osmode" 0)<br/>&nbsp;&nbsp;&nbsp; (command "line" p10 p11 "")<br/>&nbsp;&nbsp;&nbsp; (setq k (1+ k))<br/>&nbsp; )<br/>&nbsp; (command "_.undo" "e")<br/>&nbsp; (setvar "osmode" os)<br/>&nbsp; (setvar "clayer" oldlayer)<br/>&nbsp; (princ)<br/>) </p><p><br/>(princ "**zxx**") </p><p>已知,圆、一组平行线,画出圆之圆心,在平行线上的对应的线,线两端超出平行线距离3。 </p><p>见图,如能改成不限水平和垂直线,就完善了。 </p><p>
        </p><p></p>

小妹丁 发表于 2010-5-11 21:20:00

<p>从PROE转DWG图,用来补中心线,这个程序还是很好用的。</p><p>当选直线时,再加入出错处理,防止没选到线,就更好。</p>

小妹丁 发表于 2010-5-11 23:06:00

选直线时,现在只能先选近圆端线,否则中心线不在平行线之间。

xyp1964 发表于 2010-5-12 13:24:00

本帖最后由 作者 于 2010-5-12 19:13:04 编辑 <br /><br /> <p></p>
页: [1] 2 3
查看完整版本: [求助]很长时间没碰程序,帮忙看下。