关于 (command ".line" p1 p2 "") 和(entmake (list '(0 . "line") (cons 10 p1) (cons...
本来也不想说,但是又不得不说的事情。
今天有陌生人发过来一串lisp,请我帮忙看看。于是我认真拜读了一下代码 - ;;;加载线型
- (SETQ exsitly (TBLSEARCH "LTYPE" "CENTER"))
- (IF (= exsitly nil)
- (COMMAND ".Linetype" "l" "CENTER2" "acadiso.lin" "")
- (PRINC)
- )
- ;;draw slot hole
- (defun C:HH (/ op di ip p1 p2 p3 p4 pt1 pt2 pt3 pt4 ent1 ent2 ent3 ent4 rot)
- (setq slot nil)
- (setvar "CMDECHO" 0)
- (initget 1)
- (setq ip (getpoint "\nSpecify base point指定基点:"))
- (initget 1)
- (setq op (getdist "\nSpecify slot hole diameter指定槽孔直径: "))
- (initget 1)
- (setq di (getdist "\nSpecify slot hole length指定槽孔长度度: "))
- (initget 128 "Vertical垂直 Horizontal水平")
- (setq rot (getkword "\nSpecify the slot direction指定槽方向 [Vertical垂直/Horizontal水平] : "))
- (if (= rot "Vertical垂直")
- (progn
- (setq pt1 (list (- (car ip)(/ op 2)) (- (cadr ip) (/ (- di op) 2)))
- pt2 (list (- (car ip)(/ op 2)) (+ (cadr ip) (/ (- di op) 2)))
- pt3 (list (+ (car ip)(/ op 2)) (- (cadr ip) (/ (- di op) 2)))
- pt4 (list (+ (car ip)(/ op 2)) (+ (cadr ip) (/ (- di op) 2)))
- p1 (polar ip 0 op)
- p2 (polar ip (* pi 0.5) (+ (* 0.5 op) (* 0.5 di)))
- p3 (polar ip pi op)
- p4 (polar ip (* pi 1.5) (+ (* 0.5 op) (* 0.5 di))))
-
- )
- )
- (if (= rot "Horizontal水平")
- (progn
- (setq pt1 (list (- (car ip)(/ (- di op) 2)) (- (cadr ip)(/ op 2)))
- pt2 (list (+ (car ip)(/ (- di op) 2)) (- (cadr ip)(/ op 2)))
- pt3 (list (- (car ip)(/ (- di op) 2)) (+ (cadr ip)(/ op 2)))
- pt4 (list (+ (car ip)(/ (- di op) 2)) (+ (cadr ip)(/ op 2)))
- p1 (polar ip 0 (+ (* 0.5 op) (* 0.5 di)))
- p2 (polar ip (* pi 0.5) op)
- p3 (polar ip pi (+ (* 0.5 op) (* 0.5 di)))
- p4 (polar ip (* pi 1.5) op))
- )
- )
- (if (= rot nil)
- (progn
- (setq pt1 (list (- (car ip)(/ (- di op) 2)) (- (cadr ip)(/ op 2)))
- pt2 (list (+ (car ip)(/ (- di op) 2)) (- (cadr ip)(/ op 2)))
- pt3 (list (- (car ip)(/ (- di op) 2)) (+ (cadr ip)(/ op 2)))
- pt4 (list (+ (car ip)(/ (- di op) 2)) (+ (cadr ip)(/ op 2)))
- p1 (polar ip 0 (+ (* 0.5 op) (* 0.5 di)))
- p2 (polar ip (* pi 0.5) op)
- p3 (polar ip pi (+ (* 0.5 op) (* 0.5 di)))
- p4 (polar ip (* pi 1.5) op))
- )
- )
-
- (setvar "osmode" 0)
- (setvar "cecolor" "bylayer")
- (setvar "celtype" "bylayer")
- (command ".line" pt1 pt2 "")
- (setq ent1 (entlast))
- (command ".line" pt3 pt4 "")
- (setq ent2 (entlast))
- (command ".fillet" pt1 pt3)
- (setq ent3 (entlast))
- (command ".fillet" pt2 pt4)
- (setq ent4 (entlast))
- (command ".pedit" ent1 "" "join" ent2 ent3 ent4 "" "")
- (setvar "celtype" "CENTER2")
- (command ".line" p1 p3 "")
- (setq ent5 (entlast))
- (command ".line" p2 p4 "")
- (setvar "cecolor" "bylayer")
- (setvar "celtype" "bylayer")
- (setvar "osmode" 679)
- (setvar "filletrad" 0)
- (prin1)
- )
- 大师看看哪里的问题啊
本人真的不是大师,也就是个lisp学徒。本着学习交流的态度,我回复如下: - 一大堆的
- (setvar "osmode" 0)
- (setvar "cecolor" "bylayer")
- (setvar "celtype" "bylayer")
- (command ".line" pt1 pt2 "")
- (setq ent1 (entlast))
- (command ".line" pt3 pt4 "")
- (setq ent2 (entlast))
- (command ".fillet" pt1 pt3)
- (setq ent3 (entlast))
- (command ".fillet" pt2 pt4)
- (setq ent4 (entlast))
- (command ".pedit" ent1 "" "join" ent2 ent3 ent4 "" "")
- (setvar "celtype" "CENTER2")
- (command ".line" p1 p3 "")
- (setq ent5 (entlast))
- (command ".line" p2 p4 "")
- (setvar "cecolor" "bylayer")
- (setvar "celtype" "bylayer")
- (setvar "osmode" 679)
- (setvar "filletrad" 0)
- 看着就头疼,你可以修改成这个试试
- (entmake
- (list
- '(0 . "LWPOLYLINE")
- '(100 . "AcDbEntity")
- '(100 . "AcDbPolyline")
- '(90 . 4)
- '(70 . 1)
- (cons 10 pt1) '(40 . 0.0) '(41 . 0.0) '(42 . 0.0)
- (cons 10 pt2) '(40 . 0.0) '(41 . 0.0) '(42 . -1.0)
- (cons 10 pt4) '(40 . 0.0) '(41 . 0.0) '(42 . 0.0)
- (cons 10 pt3) '(40 . 0.0) '(41 . 0.0) '(42 . -1.0)
- ))
- (entmake (list '(0 . "line") (cons 10 p1) (cons 11 p3)))
- (entmake (list '(0 . "line") (cons 10 p2) (cons 11 p4)))
 - 这一大串,看着也头疼,你可以用cond来试试
- (if (= rot "Vertical垂直")
- (progn
- (setq pt1 (list (- (car ip)(/ op 2)) (- (cadr ip) (/ (- di op) 2)))
- pt2 (list (- (car ip)(/ op 2)) (+ (cadr ip) (/ (- di op) 2)))
- pt3 (list (+ (car ip)(/ op 2)) (- (cadr ip) (/ (- di op) 2)))
- pt4 (list (+ (car ip)(/ op 2)) (+ (cadr ip) (/ (- di op) 2)))
- p1 (polar ip 0 op)
- p2 (polar ip (* pi 0.5) (+ (* 0.5 op) (* 0.5 di)))
- p3 (polar ip pi op)
- p4 (polar ip (* pi 1.5) (+ (* 0.5 op) (* 0.5 di))))
-
- )
- )
- (if (= rot "Horizontal水平")
- (progn
- (setq pt1 (list (- (car ip)(/ (- di op) 2)) (- (cadr ip)(/ op 2)))
- pt2 (list (+ (car ip)(/ (- di op) 2)) (- (cadr ip)(/ op 2)))
- pt3 (list (- (car ip)(/ (- di op) 2)) (+ (cadr ip)(/ op 2)))
- pt4 (list (+ (car ip)(/ (- di op) 2)) (+ (cadr ip)(/ op 2)))
- p1 (polar ip 0 (+ (* 0.5 op) (* 0.5 di)))
- p2 (polar ip (* pi 0.5) op)
- p3 (polar ip pi (+ (* 0.5 op) (* 0.5 di)))
- p4 (polar ip (* pi 1.5) op))
- )
- )
- (if (= rot nil)
- (progn
- (setq pt1 (list (- (car ip)(/ (- di op) 2)) (- (cadr ip)(/ op 2)))
- pt2 (list (+ (car ip)(/ (- di op) 2)) (- (cadr ip)(/ op 2)))
- pt3 (list (- (car ip)(/ (- di op) 2)) (+ (cadr ip)(/ op 2)))
- pt4 (list (+ (car ip)(/ (- di op) 2)) (+ (cadr ip)(/ op 2)))
- p1 (polar ip 0 (+ (* 0.5 op) (* 0.5 di)))
- p2 (polar ip (* pi 0.5) op)
- p3 (polar ip pi (+ (* 0.5 op) (* 0.5 di)))
- p4 (polar ip (* pi 1.5) op))
- )
- )
我问了一下这位高人一句:“你自己写的代码?”
得到一句答复“难不成 是你写的?”
首先,我不是这专业不会写这串代码,也没写过这个代码,其次,这样的态度,你叫别人怎么帮你?
在这里,我要说的是,在学习工作中,如果想得到自己的目的,说话做事要讲究方式方法,要会拿捏分寸。
(command ".line" p1 p2 "") 和(entmake (list '(0 . "line")都能实现绘制一条线,但是什么时候用什么方式,要看情况。
|