乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 65|回复: 4

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

[复制链接]

15

主题

35

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
95
发表于 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))
               )
)
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2003-9-23 09:00:00 | 显示全部楼层
a2函数中cond的倒数第二项少个括号。
程序从运行上没有问题,你说说看是什么问题
回复

使用道具 举报

63

主题

1203

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1455
发表于 2003-9-23 09:09:00 | 显示全部楼层
看法和樓上一樣.
但我運行選了一堆LINE確認后什麼也沒有看到.也沒有很充足的時間來看.所以想問問.你這個東東是用來做什麼用的(應用在哪方面)
------------------
我愛CAD, 向人民群眾學習.
回复

使用道具 举报

15

主题

35

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
95
发表于 2003-9-23 09:16:00 | 显示全部楼层
运行后不能消除重复的直线,meflying大侠麻烦再帮我分析一下,谢谢
回复

使用道具 举报

15

主题

35

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
95
发表于 2003-9-23 09:20:00 | 显示全部楼层
我刚学lisp不久,用来消除重复的直线,运行后提示“创建零长度直线“重线没有消除。请各位大侠多多指教!!!
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-6 05:49 , Processed in 1.487553 second(s), 62 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表