QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 1822|回复: 5
收起左侧

[求助] 请高手帮修改一个程序

[复制链接]
发表于 2008-11-26 09:33:57 | 显示全部楼层 |阅读模式 来自: 中国湖北孝感

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

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

x
   在网上找的一个删除重复图元的LISP程序 加载使用后发现对重复线段的删除有时候无效 而且线段内部的线段无法删除 就是说如果一条线段长100一条长50 使用这个删除不掉!!请高手帮忙修改下!!9 R' _& N+ X% @: W, u) C
 以下是程序原文:(附件内容是程序源文件)$ i! u5 x) ]3 ^- o1 _
(defun c:ere()
8 l( t+ K# w6 H$ n' U  (setq m0 (getpoint "\n左下角:"))
. \9 H; m6 U  L6 q  (setq m1 (getpoint "\n右上角:"))
% |7 U) F* N; m1 j  (setq x0 (car m0) x1 (car m1) y0 (cadr m0) y1 (cadr m1) m2 m0 x2 x0 y2 y0): m0 f, f3 B+ H8 v( U" P
  (while (< x2 x1)
9 ]2 M- J" z/ ?5 p% x$ T9 Z    (setq y2 y0 m3 m2)
% q+ ]# M0 R% S( G" E    (while (< y2 y1)
& S: J5 A8 _: m      (setq m4 (polar m3 0.785398 70.72))
; T# Z( c3 m8 P4 A( w      (setq a (ssget "_C" m3 m4))
& E& l6 p& p7 @. e0 P      (if (not a)(setq i 0)(setq i (sslength a)))$ t7 Z2 @6 e; N7 X5 `: N" Y
      (while (> i 1)  E& _( q+ a5 X3 Q9 X
        (setq j (- i 1))
  L, Z3 a. H8 h9 a8 I1 ^; P6 L4 V$ e  x        (setq b (ssname a (setq i (1- i)))) ;(setq b (ssname a 1))$ h  S  a  S$ ]7 c' |
        (setq c (entget b))
+ ~4 h0 i9 U; }1 @* J, {& I        (setq d (cdr (assoc 0 c)))- L' c5 x" g* x. O) [% r" T4 N8 j
        (while (> j 0)* m" Y/ p7 }: u3 p0 U! V
          (setq b1 (ssname a (setq j (1- j))))
5 A) Z$ I) [# t( R6 B; T          (setq c1 (entget b1))
9 i0 S: q, V. B  P. o* ^; H          (setq d1 (cdr (assoc 0 c1)))
$ C& n( `1 t$ ^* Y! G8 d/ Y          (if (= d d1); j% g$ N3 s1 s( R
            (if (= d "LINE")
6 |; o% [: m1 |+ v# t6 b. m              (if (and (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))
# d8 l+ P' W9 K  O+ Q' P                       (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))
. f# c+ Y+ p1 z! h                       (= (rtos (cadr (assoc 11 c)) 2 4)(rtos (cadr (assoc 11 c1)) 2 4))+ I* j+ a! Q, K7 t
                       (= (rtos (caddr (assoc 11 c)) 2 4)(rtos (caddr (assoc 11 c1)) 2 4))
, v8 Y1 @- }, i8 ^' g7 ?. h' a                  )(command "erase" b1 "")% V% [5 `0 W/ p* ~
              )+ J) e# G& C/ ?$ f& g+ F
              (if (= d "INSERT")
8 }  t/ ~6 Y3 d+ r                (if (and (equal (assoc 2 c) (assoc 2 c1))
8 @( Y2 c8 L0 d  R; _1 o                         (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))
4 [$ N: k8 D+ D& Z7 |# H: J                         (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))# v8 Q3 L9 o2 ?7 N2 ?/ {
                    )(command "erase" b1 "")
7 T- O6 _6 b. o+ ^! b                )& b$ X- o4 ^9 u' Z
                (if (= d "LWPOLYLINE")
8 s4 I; Y* }2 B4 }                  (progn
+ h* n) C* X( Q% g) w                    (setq e (cddddr c) e1 (cddddr c1) e (cddddr e) e1 (cddddr e1))" m6 q) G- V; r' O- W9 F) M6 a
                    (while (and e e1)2 D+ y3 A$ A1 H3 i8 Q9 v, ?
                      (progn 2 s1 y5 d, E  s7 t/ X  X+ e
                      (setq f (car e) f1 (car e1) e (cdr e) e1 (cdr e1))2 s2 d' p% E! l0 f! i# {: J
                      (while (and e (/= (car f) 10))(setq f (car e) e (cdr e)))9 D+ T  X& ~: J$ }; J
                      (while (and e1 (/= (car f1) 10))(setq f1 (car e1) e1 (cdr e1)))
! w; Q+ P$ V: w1 S% b3 a2 p$ `4 D                      (if (or (/= (rtos (cadr f) 2 4)(rtos (cadr f1) 2 4))8 h4 X$ E3 T# q/ u
                              (/= (rtos (caddr f) 2 4)(rtos (caddr f1) 2 4)))(setq e1 nil). s+ Z: d: |' o9 [6 }7 D
                        (if (not e1) (command "erase" b1 "")(if (not e)
3 u: f! M& M  B: A* S) j                           (progn (command "erase" b "")(setq b b1 b1 nil))))
/ L. F) m9 y' L0 t                  ) ) ) )         
& h& Z  s. _3 T+ v: N                  (if (= d "SPLINE")
) B& E& E% z4 J3 |                    (progn: z2 o1 @4 ~6 i& N  q: q
                      (setq e (cddddr c) e1 (cddddr c1) e (cddddr e) e1 (cddddr e1))2 b; K& S+ W8 R$ {- |( v" g- |
                      (while (and e e1)
4 l+ r2 y" T& ~8 U! m                        (progn
- j; I) U3 \" z, A. N( s8 k                          (setq f (car e) f1 (car e1) e (cdr e) e1 (cdr e1))
9 Q' H' U# Y5 \7 {# u; {                          (while (and e (/= (car f) 10))(setq f (car e) e (cdr e)))  W- C+ v. B/ V; H# s
                          (while (and e1 (/= (car f1) 10))(setq f1 (car e1) e1 (cdr e1)))
* h3 R9 s, |/ v  z( b- w                          (if (or (/= (rtos (cadr f) 2 4)(rtos (cadr f1) 2 4))(/= (rtos (caddr f) 2 4)(rtos (caddr f1) 2 4)))(setq e1 nil)
7 ^: A. Q8 O  z- y5 @. u7 D                            (if (not e1 ) (command "erase" b1 "")(if (not e)(progn (command "erase" b "")(setq b b1 b1 nil))))
, X5 ^! @1 y4 l, M; I                    ) ) ) )          : f+ o( K, N9 l$ h9 B
                    (if (= d "TEXT")1 F! V$ {6 o! s7 Y& t3 R$ D0 U% M9 y3 f
                      (if (and (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))
4 z/ V' {0 N3 X5 s7 ^# p7 g                               (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))
! v/ M8 L" N" c" k2 d& j                          )(command "erase" b1 "")# N5 o9 D) l) a) ]* N* q1 D( V6 h
                      )
" B0 M2 z- e6 z  [  r/ d9 t) q                      (if (= d "CIRCLE")
) _$ G7 S  ]! f  a3 }  T, S                        (if (and (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))
) f9 o6 `3 R( ^0 s* O: @                                 (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))
# w& J& T5 ]* `+ R3 W                                 (= (rtos (cdr (assoc 40 c)) 2 4)(rtos (cdr (assoc 40 c1)) 2 4))
2 n  Y( H: r- ?2 r  H                            )(command "erase" b1 "")
) H: ~: u/ G( ]! }; t      ) ) ) ) ) ) ) ) ) )
9 e9 @" z$ r" C9 ~* [* h( X4 f      (setq m3 (polar m3 1.5708 50.0) y2 (+ y2 50.0))
0 w, |8 G  ]! ?3 ]; u5 J8 c    )
1 h/ d$ F( Z0 _& C. L    (setq m2 (polar m2 0.0 50.0) x2 (+ x2 50.0))# Z& `, A( G# m+ p
  )4 T9 Z- [, V, D) l/ N/ ^9 f1 V
  (princ)2 i4 X  e: ]( A% }  P
)& K8 W# w4 ^+ \0 l, D
(princ "\n\"ere\"启动")
% q0 S, c9 T2 L1 [- ^
8 ?* T& l6 V; Y[ 本帖最后由 zedcar 于 2008-11-26 09:35 编辑 ]

删除重复元素.rar

1.12 KB, 下载次数: 6

发表于 2008-11-26 11:05:42 | 显示全部楼层 来自: 中国辽宁鞍山
有没有中间使用变量得说明?做什么用得?
 楼主| 发表于 2008-11-26 12:40:25 | 显示全部楼层 来自: 中国湖北孝感
原帖由 maoyangmy 于 2008-11-26 11:05 发表 http://www.3dportal.cn/discuz/images/common/back.gif
/ x! @5 w# |4 _# c1 X0 b8 n" e7 W# y( O有没有中间使用变量得说明?做什么用得?
: `3 x/ i- o1 S/ _+ s
没有 这个程序用来删除多余的图元。程序特点,可以删除完全重合的直线、多段线、光滑曲线(程序中设置了4位小数,当坐标数值四舍五入精确到4位小数时认为重合),删除位置重合的文字,删除位置和半径相同的圆,删除位置和块名相同的块。
发表于 2008-12-6 15:17:15 | 显示全部楼层 来自: 中国四川成都
给你一个思路:
' j; a! O1 L; x7 k, n8 |  t    处理"LINE"时,增加一个判定函数,用于首先判定直线L1的两个端点是否在直线L2上面;若在,再判定直线L1的两个端点是否在直线L2的两个端点以内,则返回直线L1,否则返回直线L2。  O/ ^# u5 j5 _; S5 t3 @
    判定直线L1的两个端点是否在直线L2上面:
& H: S; ^, ~3 A4 [8 o/ h, `       可以逐点计算直线L1的两个端点到直线L2的距离是否小余你的精度要求,若小余,则判定为该点在直线L2上,否则,该点不在直线L2上。

评分

参与人数 1三维币 +5 收起 理由
woaishuijia + 5 技术讨论

查看全部评分

发表于 2008-12-6 22:42:04 | 显示全部楼层 来自: 中国台湾
  1.     ' j2 ]& P# [2 f; J8 A- O% U* J; c+ N4 {5 f
  2.     (defun dxg (code ele)$ I. Z" R  |, \% v5 W0 W: A# E
  3.       (cdr (assoc code (entget ele)))! T3 b) k" @, p# w% h! u( e! v
  4.     )
      {# ]1 V) K# j. e( L
  5.        ! B1 W  k& }! `6 ?3 Z9 g& D( k

  6. 2 `6 O5 \' E; F( ~
  7.     (defun vpt (a b c)
    & z  I1 R+ P9 ?9 Z
  8.        (equal: q/ |, ~$ Y* }; N+ s* I
  9.          (if (caddr a) a (reverse (cons 0.0 (reverse a))))
    * G1 l* X. y3 O4 j7 v; q
  10.          (if (caddr b) b (reverse (cons 0.0 (reverse b))))! O# U$ }" g& K$ H
  11.          (expt 0.1 c)' V2 C4 ~# N1 n6 J- T4 M
  12.        )- Z& q; @$ R2 N, w% Z! _
  13.     )
    4 W) z* a2 [4 w* G" f$ B
  14.    
    : S9 P( q$ |9 ], t2 B
  15. ;;; =========== for Test only =========================================/ C8 F2 X( Y6 j, l, J9 x
  16. ;;; 删除线段内的短线! p. N+ n: a* S7 W7 P3 t9 P$ c( r
  17. ;; ssen = Line Selection9 r) L3 V# b8 A! d. k
  18. (setq nn (sslength ssen))
    2 @3 B: {" W' X4 c
  19. (cond
    9 {6 j: ]; H) S* U- w- v
  20.   ((< nn 2) nil)                        ; Nothing to do
    , G8 l: A: W+ b9 x  l
  21.   (T
    8 M7 W, [/ z1 T8 ?/ v- ^6 M* v$ L
  22.    (princ "\nProceeding with Line ....."
    8 C) N0 ?1 k" D/ q2 y+ _
  23.    (while (setq ee (ssname ssen (setq nn (1- nn))))
    5 x( ~3 j( V7 m, D- T
  24.      (cond( X8 q, c9 k1 B& n) r6 Q. J
  25.        ((null (entget ee)))                ; bypass+ ^2 c7 P( W) g
  26.        (T$ @, X, V0 {: d
  27.         (setq p1  (dxg 10 ee)) y, ^, x6 @0 @
  28.               p2  (dxg 11 ee)7 F' P" O6 p: h. K& g% J, @
  29.               v1  (angle p1 p2)
    / p$ N. G3 C5 w4 Y, V
  30.               e1d (cdddr (cddr (entget ee)))
    + E' ^/ }, X- ?9 |/ \% [: v
  31.               sc  (ssget "f" (list p1 p2) '((0 . "LINE")9 a6 R) E- x4 y; h' W
  32.               sum (if sc (sslength sc))0 ~  K, R6 ?' h8 Q
  33.         )
    / w/ U- n. u1 ]- a! ?- m
  34.         (while (and (entget ee) (> sum 0))+ s. h6 Y& S3 C. v
  35.           (setq e1 (ssname sc (setq sum (1- sum))))
    $ |2 @/ N) Y- c5 `8 N
  36.           (cond6 S; P& N- G! K* e, f: b
  37.             ((eq e1 ee) nil)                ; Itself0 {9 g; j+ U+ L6 G$ D  C" H) d% D
  38.             ((equal (cdddr (cdddr (entget e1))) e1d)
    ( c# }" B  i; P3 ^
  39.              (entdel e1)
    : t& O' o, E1 [0 y) f5 D
  40.             )
    & a/ A( @% D  t2 _! H. v: \8 a6 a5 [
  41.             (T) Q5 X! \1 j2 q- A% S- b
  42.              (setq p3 (dxg 10 e1)9 l3 O' ~0 C9 w2 T8 b
  43.                    p4 (dxg 11 e1)
    / Y6 N* W( b% u
  44.                    v2 (if (vpt p1 p3 5)6 q. V. O& N0 K: U. R$ c; d
  45.                         (angle p2 p3)
    . Z0 y( }* g+ f) `9 Y8 ?- b
  46.                         (angle p1 p3)% x% Q% U& `9 P
  47.                       )
    ; a9 l+ j* N2 Q1 T: h% ^
  48.              )
    ! A% Q) |3 e+ T
  49.              (if (< (rem (abs (- v1 v2)) pi) 0.0001)
    8 D) T6 n' h6 e/ t2 z, }
  50.                (if (< (distance p3 p4) (distance p1 p2))
    1 w2 Y4 X: ~- L, a6 G% a+ n- B
  51.                  (entdel e1)
    & ^3 U, O' ?$ i, L  D
  52.                  (entdel ee)
    . {! b4 ?; l8 u, c4 F3 S& L, m: \
  53.                )
    8 w$ M* {) [: j
  54.              )  `  H9 z; ?) v! N
  55.             )0 t. n3 K# i* m) Q8 u" C
  56.           )
    * P5 Q4 g6 x1 @( j, e8 b3 s
  57.         ). i7 S) \! l% C; \9 v; q
  58.        )
    . r6 ~5 M) |( W0 P1 I
  59.      )0 a3 V$ v% W. c( x+ l# p3 A
  60.    )
    # ?. C1 m8 S* e+ B2 \4 S" ]
  61.   )
    1 T& W/ c2 a8 _: `  H
  62. )6 v. n# z+ X8 N" n% f' V

  63. 9 R+ p0 r- |1 c2 C/ Z. e( b$ E8 Z
复制代码
& T) M: i' F& R8 j- d
[ 本帖最后由 SunVei 于 2008-12-6 23:24 编辑 ]

评分

参与人数 1三维币 +10 收起 理由
woaishuijia + 10 应助

查看全部评分

发表于 2008-12-7 09:59:37 | 显示全部楼层 来自: 中国广东深圳
我认为对有利于促进论坛的发展,同时也激励会员多参与.但对于管理人员应该考虑工作需要,不收取流量.

评分

参与人数 1三维币 -50 收起 理由
woaishuijia -50 灌水

查看全部评分

发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

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