求助飞哥
飞哥:能给我找个作图的lisp程序吗?比较简单得就行了,比如说一个轴、螺母等。谢谢你。上次你告我,我没找到合适的,都是动画的啊。 你想做什么呢?简单的:
(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 (>= i 0)<BR> (setq d (cadr (nth i para_list)))<BR> (setq ds (append ds (list d)))<BR> (if (>= 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 (< 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 (> (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 (< i n)<BR> (cond<BR> ((< i 10) (princ "aaa"))<BR> ((< i 20) (princ "bbb"))<BR> ((< i 100) (princ i))<BR> )<BR> (princ "\n")<BR> (setq i (1+ i))<BR> )<BR>) 谢谢飞哥了,我看看能不能看明白,到时在向飞哥请教 飞哥,调入时怎么光有数据啊,只是在求值啊,没图啊,是不是还要编译呢,怎作那,请指教,我得弄个图出来啊 不知道你要个程序干什么?给你个程序,又一点都看不懂。。。
建议你找本入门的书(随便哪本都可以的),先慢慢看, 实话说吧,我是应付老师的啊,要用lisp编个程序作图出来就行了,你得帮帮我啊 干嘛非要别人帮着害你呢,兄弟 不是那样的呵,我是用cad作图的,选修的课程啊,现在能画图了,编程真是天书呵,不好意思,这方面只好求教大侠了! 你连加载使用程序都不会,怎么说能写程序给老师?别人给你的程序你又怎么知道行不行呢?
我给的第二个程序是可以的。。。
页:
[1]