明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1859|回复: 4

明总 帮帮小弟分析一下我错在哪,谢了!!!

[复制链接]
发表于 2003-9-23 08:41:00 | 显示全部楼层 |阅读模式
(defun c:xc1(/ ss n1 n2 s1 s2 d1 d2 d11 d12 d21 d22 l1 l2)
                (setq ocmde (getvar "cmdecho"))
                (setq oblip (getvar "blipmode"))
                (setq oosmode (getvar "osmode"))
                (setvar "cmdecho" 0)
                (setvar "blipmode" 0)
                (setvar "osmode" 0)
                (setq ss (ssget '((0 . "LINE"))))
                (setq n1 0)
                (setq s1 (sslength ss))
       (repeat s1
                (setq l1 (ssname ss n1))
                (setq l1_data (entget l1))
                (setq pts1 (assoc 10 l1_data))
                (setq p1 (cdr pts1))
                (setq pte1 (assoc 11 l1_data))
                (setq p2 (cdr pte1))
                (setq d1 (distance p1 p2))
                (setq n2 (+ n1 1))
                (setq s2 (- s1 n2))
           (repeat s2
                (setq l2 (ssname ss n2))
                (setq l2_data (entget l2))
                (setq pts2 (assoc 10 l2_data))
                (setq q1 (cdr pts2))
                (setq pte2 (assoc 11 l1_data))
                (setq q2 (cdr pte2))
                (setq d2 (distance q1 q2))
                (setq d11 (distance p1 q1))
                (setq d12 (distance p1 q2))
                (setq d21 (distance p2 q1))
                (setq d22 (distance p2 q2))
                (setq ang1 (angle p1 p2))
                (setq ang2 (angle q1 q2))
                (cond ((> d1 d2) (a1));;首先判断哪条直线长,在判断短直线两个端点是否在长直线上
                      ((< d1 d2) (a2))
                      ((= d1 d2) (a3))
                      (t         (princ))
                )
                      (setq n2 (+ 1 n2))
            )
                      (setq n1 (+ 1 n1))
        )
                (setq ss nil)
                (setvar "blipmode" oblip)
                (setvar "cmdecho" ocmde)
                (setvar "osmode" oosmode)
                (princ)
)      
(defun a1()
    (cond
         ((and (= d1 (+ d11 d21)) (= d1 (+ d12 d22)));;两端点在长直线上
               (if (< d11 d12) ;;判断短直线的方向
                   (progn
                       (command "line" p1 q1 "")
                       (command "line" q2 p2 "")
                       (command "erase" l1 "")
                    )
                    (progn
                        (command "line" p2 q1 "")
                        (command "line" q2 p1 "")
                        (command "erase" l1 "")
                     )
                )
          )
          ((and (/= d1 (+ d11 d21)) (= d1 (+ d12 d22)) (= ang1 ang2));; 起点不在长直线上
                (if (< d11 d21) ;;判断短直线的方向
                    (progn
                          (command "line" q2 p2 "")
                          (command "erase" l1 "")
                    )
                    (progn
                          (command "line" q2 p1 "")
                          (command "erase" l1 "")
                    )
                 )
          )
          ((and (= d1 (+ d11 d21)) (/= d1 (+ d12 d22)) (= ang1 ang2));; 终点不在长直线上
                (if (< d12 d22) ;;判断短直线的方向
                    (progn
                          (command "line" p2 q1 "")
                          (command "erase" l1 "")
                    )
                    (progn
                          (command "line" p1 q1 "")
                          (command "erase" l1 "")
                    )
                )
          )
          (t         (princ))
       )
)
(defun a2()
      (cond
           ((and (= d2 (+ d11 d12)) (= d2 (+ d21 d22)));;两端点在长直线上
                          (command "erase" l1 "")
           )
           ((and (/= d2 (+ d11 d12)) (= d2 (+ d21 d22)) (= ang1 ang2));;起点在长直线上
                 (if (< d11 d12) ;;判断短直线的方向
                      (progn
                          (command "line" p1 q1 "")
                          (command "erase" l1 "")
                       )
                       (progn
                          (command "line" q2 p1 "")
                          (command "erase" l1 "")
                       )
                  )
            )
            ((and (= d2 (+ d11 d12)) (/= d2 (+ d21 d22) (= ang1 ang2));; 终点不在长直线上
                  (if (< d21 d22) ;;判断短直线的方向
                      (progn
                           (command "line" p2 q1 "")
                           (command "erase" l1 "")
                       )
                       (progn
                           (command "line" q2 p2 "")
                           (command "erase" l1 "")
                       )
                  )
             )
             (t         (princ))
       )         
)
(defun a3() ;;判断两点是否同一点     
              (cond
                    ((and (= d11 0 ) (= d22 0))
                         (command "erase" l1 "")
                    )
                    ((and (= d12 0) (= d21 0))  
                           (command "erase" l1 "")
                    )
                    (t         (princ))
               )
)
发表于 2003-9-23 09:00:00 | 显示全部楼层
a2函数中cond的倒数第二项少个括号。
程序从运行上没有问题,你说说看是什么问题
发表于 2003-9-23 09:09:00 | 显示全部楼层
看法和樓上一樣.
但我運行選了一堆LINE確認后什麼也沒有看到.也沒有很充足的時間來看.所以想問問.你這個東東是用來做什麼用的(應用在哪方面)


------------------
我愛CAD, 向人民群眾學習.
 楼主| 发表于 2003-9-23 09:16:00 | 显示全部楼层
运行后不能消除重复的直线,meflying大侠麻烦再帮我分析一下,谢谢
 楼主| 发表于 2003-9-23 09:20:00 | 显示全部楼层
我刚学lisp不久,用来消除重复的直线,运行后提示“创建零长度直线“重线没有消除。请各位大侠多多指教!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-27 00:15 , Processed in 0.185122 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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