明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2005|回复: 8

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

[复制链接]
发表于 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
求各位高手帮忙看一下是哪里出错了
执行此程序选择对象是的直线  画的时候顺序是  左右上
 楼主| 发表于 2012-10-10 18:23:14 | 显示全部楼层
虽然是小练习但是对我以后还是有挺大帮助的,希望高手们能帮帮忙 看看哪里错了! 先自己顶一下
发表于 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))

老帖中提及多次...
 楼主| 发表于 2012-10-11 10:49:22 | 显示全部楼层
多谢前辈指导
 楼主| 发表于 2012-10-11 18:08:14 | 显示全部楼层
328302216 发表于 2012-10-11 10:49
多谢前辈指导
  1. (defun c:zdpy()      ;;;单向偏移程序(墙线)
  2.   (setq ss (ssget))    ;;;选取对象
  3.   (setq i 0)      ;
  4.   (setq k 1)
  5.   (setq p1 (getdist "请输入偏移距离"))
  6.   (setq ssa (sslength ss))
  7.   (repeat ssa    ;;;循环
  8.     (setq ss2 (ssname ss i))  ;;;取得对象中的第一个名称
  9.     (setq ss3 (entget ss2))  ;;;取得对象属性
  10.     (setq ss4 (cdr (assoc 0 ss3)))  ;;;取得对象类别(如:LINE CIRCLE)
  11.    
  12. ;;;        (setq ss2a (ssname ss k))
  13. ;;;    (setq ss3a (entget ss2a))
  14. ;;;    (setq ss4a (cdr (assoc 0 ss3a)))

  15. ;;;    (setq ss5 (cdr (assoc 8 ss3)))  ;;;取得图层
  16.     (if  (= ss4 "LINE")  ;;;判断对象是否为直线且图层为07结构
  17.       (progn
  18.   (setq ss6 (cdr (assoc 10 ss3)))    ;;;取得对象的第一个端点坐标
  19.   (setq ss7 (cdr (assoc 11 ss3)))    ;;;取得对象的第二个端点坐标
  20.   (setq ss8a (angle ss6 ss7))
  21.   )
  22.       )
  23.     (if (equal ssa k 0.0001) (= k 0))  ;设置如果k等于ssa k就等于0
  24.     (setq ss2a (ssname ss k))
  25.     (setq ss3a (entget ss2a))
  26.     (setq ss4a (cdr (assoc 0 ss3a)))
  27. ;;;    (setq ss4b (cdr (assoc 8 ss3a)))
  28.    
  29.     (if  (= ss4a "LINE")
  30.       (progn
  31.   (setq ss6a (cdr (assoc 10 ss3a)))
  32.   (setq ss7a (cdr (assoc 11 ss3a)))
  33.   (setq ss9a (angle ss6a ss7a))
  34.   )
  35.       )
  36. ;;;    (setq ss8a (angle ss6 ss7))
  37. ;;;    (setq ss9a (angle ss6a ss7a))
  38.     (setq pp
  39.     (cond
  40.       (and (equal ss8a 1.5708 1e-4) (equal ss9a 0.0 1e-4)) (d01)  ;1
  41.       (and (equal ss8a 4.71239 1e-4) (equal ss9a 0.0 1e-4)) (d02)  ;2
  42.       (and (equal ss8a 0.0 1e-4) (equal ss9a 1.5708 1e-4)) (d01)  ;3
  43.       (and (equal ss8a 3.14159 1e-4) (equal ss9a 1.5708 1e-4)) (d03)  ;4
  44.       (and (equal ss8a 4.71239 1e-4) (equal ss9a 3.14159 1e-4)) (d04)  ;5
  45.       (and (equal ss8a 1.5708 1e-4) (equal ss9a 3.14159 1e-4)) (d03)  ;6
  46.       (and (equal ss8a 0.0 1e-4) (equal ss9a 4.71239 1e-4)) (d02)  ;7
  47.       (and (equal ss8a 3.14159 1e-4) (equal ss9a 4.71239 1e-4)) (d04)  ;8
  48.       )
  49.     )
  50.     (setq pp1 pp)
  51.     (setq pp1 (list pp1 pp))
  52.     (setq pp '())
  53.     (setq i (+ 1 i))
  54.     (setq k (+ 1 k))
  55.     )
  56.   (setq pp1 (cdr pp1))
  57.   (command "LINE" pp1 "")
  58.   (prin1)
  59.   )


  60. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


  61. (defun d01()
  62.   (setq aab 10)
  63.       (setq ss8 (sqrt (+ (* p1 p1) (* p1 p1))))
  64.       (setq ss9 (polar ss7a (* 0.75 pi) ss8))
  65.   )


  66. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  67. (defun d02()
  68.       (setq ss8 (sqrt (+ (* p1 p1) (* p1 p1))))
  69.       (setq ss9 (polar ss7a (* 0.25 pi) ss8))
  70.   )


  71. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  72. (defun d03()
  73.       (setq ss8 (sqrt (+ (* p1 p1) (* p1 p1))))
  74.       (setq ss9 (polar ss7a (* 1.25 pi) ss8))
  75.   )

  76. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  77. (defun d04()
  78.       (setq ss8 (sqrt (+ (* p1 p1) (* p1 p1))))
  79.       (setq ss9 (polar ss7a (* 1.75 pi) ss8))
  80.   )


前辈帮忙再看看这个程序,  为什么ss2a为 nil  ss3a又等于ss3  
 楼主| 发表于 2012-10-11 18:24:00 | 显示全部楼层
想要的结果如图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2012-10-12 11:22:15 | 显示全部楼层
五楼的程序ss2a不为空了又到了pp哪里为空了……
 楼主| 发表于 2012-10-12 17:51:17 | 显示全部楼层
程序以暂时解决
发表于 2013-12-28 00:22:17 | 显示全部楼层
楼主的图例看不明白!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 12:26 , Processed in 0.202790 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表