yaohui 发表于 2004-2-28 15:22:00

求助飞哥

飞哥:能给我找个作图的lisp程序吗?比较简单得就行了,比如说一个轴、螺母等。谢谢你。上次你告我,我没找到合适的,都是动画的啊。

meflying 发表于 2004-2-28 17:02:00

你想做什么呢?


简单的:


(defun c:test()


(command "_.line" '(0 0 0) '(100 200 0) "")


(princ)


)


复杂的,命令:shaft2


(vl-load-com)<BR>(defun loadline(lname / adoc msp ltps lname)<BR>       ;(setq lname (getstring "输入需要添加的线型:"))<BR>       (setq adoc (vla-get-activedocument (vlax-get-acad-object)))<BR>       (setq ltps (vla-get-linetypes adoc))<BR>       (setq ltp (vl-catch-all-apply 'vla-load (list ltps lname "acadiso.lin")))<BR>       (if (vl-catch-all-error-p ltp)<BR>                       ;(princ "此线型已存在!")<BR>                       (princ)<BR>       )<BR>       (princ)<BR>)


(defun Newlayer(lname lcolor lin / layer layers adoc)<BR>       (setq adoc (vla-get-activedocument (vlax-get-acad-object)))<BR>       (setq layers (vla-get-layers adoc))<BR>       (setq layer (vl-catch-all-apply 'vla-item (list layers lname)))<BR>       (if (vl-catch-all-error-p layer)<BR>                       (progn<BR>                                       (setq layer (vla-add layers lname))<BR>                                       (vla-put-color layer lcolor)<BR>                       )<BR>       )<BR>       (vla-put-ActiveLayer adoc layer)<BR>       (if lin<BR>                       (vla-put-linetype layer lin)<BR>       )<BR>       (princ)<BR>)<BR>;;;;;;;以上两个函数是加载线型和图层的,可以用(command "_.layer" ...)代替


<BR>(defun DrawCircle(para_list ptLeftCenter / n i d ds m pt1 pt2 pt3 pt4)<BR>       (setq n (length para_list))<BR>       (setq i (1- n))<BR>       (while (&gt;= i 0)<BR>                       (setq d (cadr (nth i para_list)))<BR>                       (setq ds (append ds (list d)))<BR>                       (if (&gt;= d (apply 'max ds))<BR>                                       (progn<BR>        (newlayer "1" 1 nil)<BR>        (command "_.circle" ptLeftCenter "d" d)<BR>                                       )<BR>                                       (progn<BR>        (newlayer "dash" 4 "dashed")<BR>        (command "_.circle" ptLeftCenter "d" d)<BR>                                       )<BR>                       )<BR>                       (setq i (1- i))<BR>       )<BR>       (setq m (* (apply 'max ds) 1.1))<BR>       (setq pt1 (polar ptLeftCenter (/ pi 2) (+ (/ m 2) 0)))<BR>       (setq pt2 (polar ptLeftCenter (* (/ pi 2) 3) (+ (/ m 2) 0)))<BR>       (setq pt3 (polar ptLeftCenter pi (+ (/ m 2) 0)))<BR>       (setq pt4 (polar ptLeftCenter 0 (+ (/ m 2) 0)))<BR>       <BR>       (newlayer "center" 3 "center")<BR>       (command "_.line" pt1 pt2 "")<BR>       (command "_.line" pt3 pt4 "")<BR>       ds<BR>)


(defun DrawLine(ds para_list ptLeftCenter / n i md ptsc ptse l ls d pt1 pt2 pt3 pt4 pta1 pta2 ptdim1 ptdim2 ptdimc ptd)<BR>       (setq n (length ds))<BR>       (setq i 1)<BR>       (setq ds (reverse ds))<BR>       (setq md (apply 'max ds))<BR>       (setq ptsc (polar ptLeftCenter 0 (* md 1.2)))<BR>       (setq ls (append ls (list (car (nth i para_list)))))<BR>       (newlayer "1" 1 nil)<BR>       ;;;画轴及标注所需各点——第一阶轴                                                                                                                                       ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<BR>       (setq pt1 (list (+ (car ptsc) (car (nth 0 para_list))) (+ (cadr ptsc) (/ (nth 0 ds) 2.0))));                                                                                                       ptdim1                                               ;<BR>       (setq pt2 (list (car ptsc) (+ (cadr ptsc) (/ (nth 0 ds) 2.0))));                                                                                                                                                                                                                                                                               pt2┌─────┐pt1;<BR>       (setq pt3 (list (car ptsc) (- (cadr ptsc) (/ (nth 0 ds) 2.0))));                                                                                                                                                                                                                                                                                                       │                                                                       │               ;<BR>       (setq pt4 (list (+ (car ptsc) (car (nth 0 para_list))) (- (cadr ptsc) (/ (nth 0 ds) 2.0))));                                                                       │       ptdimc       │               ;<BR>       (setq pta1 pt1 pta2 pt4);                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               │                                                                       │               ;<BR>       (setq ptdimc (list (- (car pt2) 3.0) (cadr ptsc)));                                                                                                                                                                                                                                                                                                                                                                                       pt3└─────┘pt4;<BR>       (setq ptsc (polar pt1 (/ (* pi 3.0) 2.0) (/ (nth 0 ds) 2.0)));                                                                                                                                                                                                                                                                                                                                                       ptdim2                                               ;<BR>       (setq ptd (polar ptsc (/ (* pi 3.0) 2.0) (+ (/ md 2.0) 5)));                                                                                                                                                                                                                                                                                                                                                                                                                                                                               ;<BR>       <BR>       (command "_.pline" pt1 pt2 pt3 pt4 "c")<BR>       (newlayer "dim" 3 nil)<BR>       (command "_.dimlinear" pt2 pt3 ptdimc)<BR>       (command "_.dimlinear" pt3 pt4 ptd)<BR>       (while (&lt; i n)<BR>                       (setq l (car (nth i para_list)))<BR>                       (setq ls (append ls (list l)))<BR>                       (setq d (nth i ds))<BR>                       ;;;画轴及标注所需各点;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                                                                                                                                                                                                               ;<BR>                       (setq pt1 (list (+ (car ptsc) l) (+ (cadr ptsc) (/ d 2.0))));                                                                                       ptdim1               pt1               ;<BR>                       (setq pt2 (list (car ptsc) (+ (cadr ptsc) (/ d 2.0))));                                                                                               pt2┌─────┐               ;<BR>                       (setq pt3 (list (car ptsc) (- (cadr ptsc) (/ d 2.0))));                                                                                       pta1│                                                                       │               ;<BR>                       (setq pt4 (list (+ (car ptsc) l) (- (cadr ptsc) (/ d 2.0))));                                                                                                       ptdimc       │               ;<BR>                       (setq ptdim1 (list (/ (+ (car pt1) (car pt2)) 2.0) (cadr pt1)));               pta2│                                                                       │               ;<BR>                       (setq ptdim2 (polar ptdim1 (/ (* pi 3.0) 2.0) d));                                                                                                                                       pt3└─────┘pt4;<BR>                       (setq ptdimc (polar ptdim1 (/ (* pi 3.0) 2.0) (/ d 2.0)));                                                                                                               ptdim2                                                               ;<BR>                       ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                                                                                                                                                                                       ;<BR>                       <BR>                       (newlayer "1" 1 nil);<BR>                       (if (&gt; (cadr pt2) (cadr pta1))<BR>                                       (command "_.pline" pta1 pt2 pt1 pt4 pt3 pta2 "")<BR>                                       (command "_.pline"pt2 pt1 pt4 pt3 "")<BR>                       )<BR>                       <BR>                       (if (= i (1- n))<BR>                                       (progn<BR>        (setq ptdimc (list (+ 5 (car pt1)) (cadr ptdimc)))<BR>        (setq ptdim1 pt1)<BR>        (setq ptdim2 pt4)<BR>                                       )<BR>                       )<BR>                       (newlayer "dim" 3 nil)<BR>                       (command "_.dimlinear" ptdim1 ptdim2 ptdimc)<BR>                       (command "_.dimlinear" pt3 pt4 ptd)<BR>                       (setq pta1 pt1 pta2 pt4)<BR>                       (setq ptsc (polar pt1 (/ (* pi 3) 2) (/ d 2)))<BR>                       (setq i (1+ i))<BR>       )<BR>       (setq ptsc (polar ptLeftCenter 0 (- (* md 1.2) 3)))<BR>       (setq ptse (polar ptsc 0 (+ (apply '+ ls) 6)))<BR>       (newlayer "center" 3 "center")<BR>       (command "_.line" ptsc ptse "")<BR>)


(defun c:shaft2( / n width height para_list olduprec oldse1 oldse2 oldcen os cmd ds ptLeftCenter)<BR>       (setq cmd (getvar "cmdecho"))<BR>       (setq os (getvar "osmode"))<BR>       ;(setvar "cmdecho" 0)<BR>       (setvar "osmode" 0)<BR>       (setvar "LUPREC" 2)<BR>       <BR>       (setq n (getint "输入轴阶数:"))<BR>       (initget 7)<BR>       (setq i 0)<BR>       (repeat n<BR>                       (setq i (1+ i))<BR>                       (setq width (getreal (strcat "第" (itoa i) "阶轴长度:")))<BR>                       (initget 7)<BR>                       (setq height (getreal (strcat "第" (itoa i) "阶轴直径:")))<BR>                       (initget 7)<BR>                       (setq para_list (append para_list (list (list width height))))<BR>       )<BR>       (setq ptLeftCenter (getpoint "左视图中心点:"))


       (loadline "center")<BR>       (loadline "dashed")<BR>       <BR>       (setq ds (drawcircle para_list ptLeftCenter));画圆<BR>       (setvar "LTSCALE" (/ (apply 'max ds) 100))<BR>       (setvar "dimtxt" 2.5)<BR>       (drawline ds para_list ptLeftCenter);画各轴<BR>       (command "regen")<BR>       (setvar "cmdecho" cmd)<BR>       (setvar "osmode" os)<BR>       ;para_list<BR>       (princ)<BR>)


(defun c:test( / i n)<BR>       (setq i 0)<BR>       (setq n 100)<BR>       (while (&lt; i n)<BR>                       (cond<BR>                                       ((&lt; i 10) (princ "aaa"))<BR>                                       ((&lt; i 20) (princ "bbb"))<BR>                                       ((&lt; i 100) (princ i))<BR>                       )<BR>                       (princ "\n")<BR>                       (setq i (1+ i))<BR>       )<BR>)

yaohui 发表于 2004-2-29 09:59:00

谢谢飞哥了,我看看能不能看明白,到时在向飞哥请教

yaohui 发表于 2004-3-1 20:10:00

飞哥,调入时怎么光有数据啊,只是在求值啊,没图啊,是不是还要编译呢,怎作那,请指教,我得弄个图出来啊

meflying 发表于 2004-3-1 20:16:00

不知道你要个程序干什么?给你个程序,又一点都看不懂。。。


建议你找本入门的书(随便哪本都可以的),先慢慢看,

yaohui 发表于 2004-3-1 20:30:00

实话说吧,我是应付老师的啊,要用lisp编个程序作图出来就行了,你得帮帮我啊

cxzr8 发表于 2004-3-1 22:36:00

干嘛非要别人帮着害你呢,兄弟

yaohui 发表于 2004-3-1 23:03:00

不是那样的呵,我是用cad作图的,选修的课程啊,现在能画图了,编程真是天书呵,不好意思,这方面只好求教大侠了!

meflying 发表于 2004-3-2 08:23:00

你连加载使用程序都不会,怎么说能写程序给老师?别人给你的程序你又怎么知道行不行呢?


我给的第二个程序是可以的。。。
页: [1]
查看完整版本: 求助飞哥