小练习,忘高手指点错在哪里
(defun c:xq()(setq ss (ssget))
(setq ss1 (getdist "请输入偏移距离"))
(setq ss2 (ssname ss 0))
(setq ss3 (entget ss2))
(setq ss4 (cdr (assoc 0 ss3)))
(if (= ss4 "LINE")
(progn
(setq ss5 (cdr (assoc 10 ss3)))
(setq ss6 (cdr (assoc 11 ss3)))
(setq ss7 (angle ss5 ss6))
)
)
(setq ss21 (ssname ss 1))
(setq ss31 (entget ss21))
(setq ss41 (cdr (assoc 0 ss31)))
(if (= ss41 "LINE")
(progn
(setq ss51 (cdr (assoc 10 ss31)))
(setq ss61 (cdr (assoc 11 ss31)))
(setq ss71 (angle ss51 ss61))
))
(if (and (= ss7 1.5708) (= ss71 0.0)) (ss10)
)
(command "POINT" ss9 "")
(prin1)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun ss10()
(setq aa 10)
(setq ss8 (sqrt (+ (* ss1 ss1) (* ss1 ss1))))
(setq ss9 (polar ss6 (* 1.25 pi) ss8))
)
我的这程序怎么调用不了子程序啊
到了ss7 和ss71 那里都还是对了
ss7= 1.5708 ss71= 0.0 这也是对了
如果不用子程序 直接用(progn )放在(and (= ss7 1.5708) (= ss71 0.0)) 这的后面也不行
ss8 和ss9 都是 nil
求各位高手帮忙看一下是哪里出错了
执行此程序选择对象是的直线画的时候顺序是左右上
虽然是小练习但是对我以后还是有挺大帮助的,希望高手们能帮帮忙 看看哪里错了! 先自己顶一下 (if (and (= ss7 1.5708) (= ss71 0.0))
==>
(if (and (equal ss7 1.5708 1e-4) (equal ss71 0.0 1e-4))
老帖中提及多次... 多谢前辈指导 328302216 发表于 2012-10-11 10:49 static/image/common/back.gif
多谢前辈指导
(defun c:zdpy() ;;;单向偏移程序(墙线)
(setq ss (ssget)) ;;;选取对象
(setq i 0) ;
(setq k 1)
(setq p1 (getdist "请输入偏移距离"))
(setq ssa (sslength ss))
(repeat ssa ;;;循环
(setq ss2 (ssname ss i));;;取得对象中的第一个名称
(setq ss3 (entget ss2));;;取得对象属性
(setq ss4 (cdr (assoc 0 ss3)));;;取得对象类别(如:LINE CIRCLE)
;;; (setq ss2a (ssname ss k))
;;; (setq ss3a (entget ss2a))
;;; (setq ss4a (cdr (assoc 0 ss3a)))
;;; (setq ss5 (cdr (assoc 8 ss3)));;;取得图层
(if(= ss4 "LINE");;;判断对象是否为直线且图层为07结构
(progn
(setq ss6 (cdr (assoc 10 ss3))) ;;;取得对象的第一个端点坐标
(setq ss7 (cdr (assoc 11 ss3))) ;;;取得对象的第二个端点坐标
(setq ss8a (angle ss6 ss7))
)
)
(if (equal ssa k 0.0001) (= k 0));设置如果k等于ssa k就等于0
(setq ss2a (ssname ss k))
(setq ss3a (entget ss2a))
(setq ss4a (cdr (assoc 0 ss3a)))
;;; (setq ss4b (cdr (assoc 8 ss3a)))
(if(= ss4a "LINE")
(progn
(setq ss6a (cdr (assoc 10 ss3a)))
(setq ss7a (cdr (assoc 11 ss3a)))
(setq ss9a (angle ss6a ss7a))
)
)
;;; (setq ss8a (angle ss6 ss7))
;;; (setq ss9a (angle ss6a ss7a))
(setq pp
(cond
(and (equal ss8a 1.5708 1e-4) (equal ss9a 0.0 1e-4)) (d01);1
(and (equal ss8a 4.71239 1e-4) (equal ss9a 0.0 1e-4)) (d02);2
(and (equal ss8a 0.0 1e-4) (equal ss9a 1.5708 1e-4)) (d01);3
(and (equal ss8a 3.14159 1e-4) (equal ss9a 1.5708 1e-4)) (d03);4
(and (equal ss8a 4.71239 1e-4) (equal ss9a 3.14159 1e-4)) (d04);5
(and (equal ss8a 1.5708 1e-4) (equal ss9a 3.14159 1e-4)) (d03);6
(and (equal ss8a 0.0 1e-4) (equal ss9a 4.71239 1e-4)) (d02);7
(and (equal ss8a 3.14159 1e-4) (equal ss9a 4.71239 1e-4)) (d04);8
)
)
(setq pp1 pp)
(setq pp1 (list pp1 pp))
(setq pp '())
(setq i (+ 1 i))
(setq k (+ 1 k))
)
(setq pp1 (cdr pp1))
(command "LINE" pp1 "")
(prin1)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun d01()
(setq aab 10)
(setq ss8 (sqrt (+ (* p1 p1) (* p1 p1))))
(setq ss9 (polar ss7a (* 0.75 pi) ss8))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun d02()
(setq ss8 (sqrt (+ (* p1 p1) (* p1 p1))))
(setq ss9 (polar ss7a (* 0.25 pi) ss8))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun d03()
(setq ss8 (sqrt (+ (* p1 p1) (* p1 p1))))
(setq ss9 (polar ss7a (* 1.25 pi) ss8))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun d04()
(setq ss8 (sqrt (+ (* p1 p1) (* p1 p1))))
(setq ss9 (polar ss7a (* 1.75 pi) ss8))
)
前辈帮忙再看看这个程序,为什么ss2a为 nilss3a又等于ss3 想要的结果如图 五楼的程序ss2a不为空了又到了pp哪里为空了…… 程序以暂时解决 楼主的图例看不明白!
页:
[1]