328302216 发表于 2012-10-10 18:21:32

小练习,忘高手指点错在哪里

(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
求各位高手帮忙看一下是哪里出错了
执行此程序选择对象是的直线画的时候顺序是左右上

328302216 发表于 2012-10-10 18:23:14

虽然是小练习但是对我以后还是有挺大帮助的,希望高手们能帮帮忙 看看哪里错了! 先自己顶一下

Andyhon 发表于 2012-10-10 21:01:54

(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:22

多谢前辈指导

328302216 发表于 2012-10-11 18:08:14

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

328302216 发表于 2012-10-11 18:24:00

想要的结果如图

328302216 发表于 2012-10-12 11:22:15

五楼的程序ss2a不为空了又到了pp哪里为空了……

328302216 发表于 2012-10-12 17:51:17

程序以暂时解决

混沌初开 发表于 2013-12-28 00:22:17

楼主的图例看不明白!
页: [1]
查看完整版本: 小练习,忘高手指点错在哪里