yfywk 发表于 2004-10-22 22:16:00

[求助][LISP][求助]急!!!!用lisp怎么样实现方向的变换等问题?

本帖最后由 作者 于 2004-10-28 8:22:23 编辑 <br /><br /> 我编的剖切符号插入lsp程序



但不能变换方向,请大虾们帮忙看看,错在那里?还有能不能讲程序简化,因为我是才学lisp,好些都不知道怎样做。


里面的命令


a1和a3剖切符号插入


a2图名插入


s1和s2分别为立面符号和索引符号插入


源代码: ;横向剖切符号插入命令<BR>(defun c:a1 (/ p1 p1 lst cdd pt1 pt2 n1)<BR>(princ "\n")<BR>(princ "横向剖切符号插入命令,输入a1调入命令。")<BR>(setvar "CMDECHO" 0)<BR>(setq lay (getvar "clayer"))<BR>(setq os (getvar "OSMODE"))<BR>(setvar "OSMODE" 4799)<BR>(setvar "ORTHOMODE" 1)<BR>(setq p1 (getpoint "\n指定横向剖线第一点:"))<BR>(setq p2 (getpoint p1 "\n指定横向剖线下一点:"))<BR>(setq p1 (trans p1 1 0))<BR>(setq p2 (trans p2 1 0))<BR>(entmake (list (cons 0 "LINE") (cons 10 P1) (cons 11 P2)))<BR>(entdel (entlast))<BR>(setvar "ORTHOMODE" 1)<BR>(command "_.pline" (trans p1 0 1) (trans p2 0 1))<BR>(while (= (getvar "cmdnames") "PLINE")<BR>       (command pause)<BR>       )<BR>       (command)<BR>       (command "ORTHOMODE" 0)<BR>(setq cdd (getvar "CDATE"))<BR>(setq cdd (rtos cdd 2 4))<BR>(setq pt1 (getpoint "\n输入剖切符号插入点:"))<BR>(if (= pt1 nil) <BR>               (setq pt1 '(0 0 0))<BR>)<BR>(setq pt2 (getpoint "\n输入剖切索引号插入点:"))<BR>(if (= pt2 nil) <BR>               (setq pt2 '(0 0 0))<BR>)<BR>(setq n1 (getint "\n缩放比例&lt;1&gt;:"))<BR>(if (= n1 nil) <BR>               (setq n1 1)<BR>)<BR>(command "INSERT" "pmfh01.dwg" pt1 n1 n1 "")<BR>(command "INSERT" "pmfh02.dwg" pt2 n1 n1 "")<BR>(princ)<BR>) ;图名符号插入命令<BR>(defun c:a2 (/ p1 p1 lst pt1 n1)<BR>(princ "\n")<BR>(princ "图名符号插入命令,输入a2调入命令。")<BR>(setvar "CMDECHO" 0)<BR>(setq lay (getvar "clayer"))<BR>(setq os (getvar "OSMODE"))<BR>(setvar "OSMODE" 4799)<BR>(setvar "ORTHOMODE" 1)<BR>(setq p1 (getpoint "\n指定图名线第一点:"))<BR>(setq p2 (getpoint p1 "\n指定图名线下一点:"))<BR>(setq p1 (trans p1 1 0))<BR>(setq p2 (trans p2 1 0))<BR>(entmake (list (cons 0 "LINE") (cons 10 P1) (cons 11 P2)))<BR>(entdel (entlast))<BR>(setvar "ORTHOMODE" 1)<BR>(command "_.pline" (trans p1 0 1) (trans p2 0 1))<BR>(while (= (getvar "cmdnames") "PLINE")<BR>       (command pause)<BR>       )<BR>       (command)<BR>       (command "ORTHOMODE" 0)<BR>(setq pt1 (getpoint "\n输入图名插入点:"))<BR>(if (= pt1 nil) <BR>               (setq pt1 '(0 0 0))<BR>)<BR>(setq n1 (getint "\n缩放比例&lt;1&gt;:"))<BR>(if (= n1 nil) <BR>               (setq n1 1)<BR>)<BR>(command "INSERT" "tm.dwg" pt1 n1 n1 "")<BR>(princ)<BR>) ;纵向剖切符号插入命令,<BR>(defun c:a3 (/ p1 p1 lst pt1 pt2 n1)<BR>(princ "\n")<BR>(princ "纵向剖切符号插入命令,输入a3调入命令。")<BR>(setvar "CMDECHO" 0)<BR>(setq lay (getvar "clayer"))<BR>(setq os (getvar "OSMODE"))<BR>(setvar "OSMODE" 4799)<BR>(setvar "ORTHOMODE" 1)<BR>(setq p1 (getpoint "\n指定纵向剖线第一点:"))<BR>(setq p2 (getpoint p1 "\n指纵向剖线定下一点:"))<BR>(setq p1 (trans p1 1 0))<BR>(setq p2 (trans p2 1 0))<BR>(entmake (list (cons 0 "LINE") (cons 10 P1) (cons 11 P2)))<BR>(entdel (entlast))<BR>(setvar "ORTHOMODE" 1)<BR>(command "_.pline" (trans p1 0 1) (trans p2 0 1))<BR>(while (= (getvar "cmdnames") "PLINE")<BR>       (command pause)<BR>       )<BR>       (command)<BR>       (command "ORTHOMODE" 0)<BR>(setq pt1 (getpoint "\n输入剖切符号插入点:"))<BR>(if (= pt1 nil) <BR>               (setq pt1 '(0 0 0))<BR>)<BR>(setq pt2 (getpoint "\n输入剖切索引号插入点:"))<BR>(if (= pt2 nil) <BR>               (setq pt2 '(0 0 0))<BR>)<BR>(setq n1 (getint "\n缩放比例&lt;1&gt;:"))<BR>(if (= n1 nil) <BR>               (setq n1 1)<BR>)<BR>(command "INSERT" "pmfh03.dwg" pt1 n1 n1 "")<BR>(command "INSERT" "pmfh04.dwg" pt2 n1 n1 "")<BR>(princ)<BR>) ;立面符号插入命令<BR>(defun c:s1 (/ lst pt1 pt2 rot n1)<BR>(princ "\n")<BR>(princ "立面符号插入命令,输入s1调入命令。")<BR>(setvar "CMDECHO" 0)<BR>(setq lay (getvar "clayer"))<BR>(setq os (getvar "OSMODE"))<BR>(setvar "OSMODE" 4799)<BR>(setq pt1 (getpoint "\n输入立面符号插入点:"))<BR>(if (= pt1 nil) <BR>               (setq pt1 '(0 0 0))<BR>)<BR>(setq pt2 (getpoint "\n输入立面方向插入点:"))<BR>(if (= pt2 nil)<BR>               (setq pt2 '(0 0 0))<BR>)<BR>(setq n1 (getint "\n缩放比例&lt;1&gt;:"))<BR>(if (= n1 nil) <BR>               (setq n1 1)<BR>)<BR>(setq rot (getangle "输入旋转角度 &lt;0&gt;"))<BR>(if (= rot nil)<BR>               (setq rot 0)<BR>)<BR>(command "INSERT" "lms.dwg" pt2 n1 rot "")<BR>(command "INSERT" "lm.dwg" pt1 n1 n1 "")<BR>(princ)<BR>) ;索引符号插入命令<BR>(defun c:s2 (/ lst pt1 pt2 pt3 n1)<BR>(princ "\n")<BR>(princ "索引符号插入命令,输入s2调入命令。")<BR>(setvar "CMDECHO" 0)<BR>(setq lay (getvar "clayer"))<BR>(setq os (getvar "OSMODE"))<BR>(setvar "OSMODE" 4799)<BR>(setq pt1 (getpoint "\n输入索引符号插入点[右索引(Y)/左索引(Z)]:"))<BR>(if (= pt1 nil) <BR>               (setq pt1 '(0 0 0))<BR>)<BR>(setq n1 (getint "\n缩放比例&lt;1&gt;:"))<BR>(if (= n1 nil) <BR>               (setq n1 1)<BR>)<BR>(command "INSERT" "sz.dwg" pt1 n1 n1 "")<BR>(princ)<BR>)

nono 发表于 2004-10-22 23:20:00

把你要得出的结果传上来(要得到的图)

yfywk 发表于 2004-10-23 10:24:00

贴图如下:

xyp1964 发表于 2004-10-23 23:19:00

提供一个定制的装修符号程序:zxfh.fas,加载zxfh,运行zxfh。

yfywk 发表于 2004-10-24 19:38:00

<A name=61663><FONT color=#990000><B>xyp1964</B></FONT></A>兄,你的程序我用了,是为2004以上版本的,结果如下,并不是很好用。


但你的程序设计的很好,能不能将源码共享了,我参照一下,因为才接触lisp编程,好多都不知道怎样做。


测试结果:

jmp678 发表于 2008-8-24 23:13:00

你的程序很有创造值得学习辛苦了
页: [1]
查看完整版本: [求助][LISP][求助]急!!!!用lisp怎么样实现方向的变换等问题?