QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
   在网上找的一个删除重复图元的LISP程序 加载使用后发现对重复线段的删除有时候无效 而且线段内部的线段无法删除 就是说如果一条线段长100一条长50 使用这个删除不掉!!请高手帮忙修改下!!# X9 J3 |8 ~0 w: w
 以下是程序原文:(附件内容是程序源文件)
3 R+ X6 Q! l$ v6 e; ^$ j(defun c:ere()
5 H3 x$ L( R. [  (setq m0 (getpoint "\n左下角:"))
/ I: s( V7 d; c! F+ I8 m% P! u  (setq m1 (getpoint "\n右上角:"))# Z; {/ a! m1 H: j. q& p9 s
  (setq x0 (car m0) x1 (car m1) y0 (cadr m0) y1 (cadr m1) m2 m0 x2 x0 y2 y0)
9 `* B" X$ _; ~$ c, V6 ?; \# O  (while (< x2 x1)
; p- o+ E# Q/ _: I8 n, A    (setq y2 y0 m3 m2)
/ b/ t3 M# ?3 Y) b+ i0 v    (while (< y2 y1)! J( a& F+ `1 R! G) {: t) B7 l
      (setq m4 (polar m3 0.785398 70.72))" J5 ]; S( ]$ i1 d  v
      (setq a (ssget "_C" m3 m4))
' J3 N: P, }# O- z7 H) m: V! J      (if (not a)(setq i 0)(setq i (sslength a)))- |3 @8 U8 M3 w
      (while (> i 1)
4 o& A* n: w+ K& {, d        (setq j (- i 1))/ @* G4 ]1 V' A- B
        (setq b (ssname a (setq i (1- i)))) ;(setq b (ssname a 1))
1 `+ S2 Y5 d1 G9 \        (setq c (entget b))
# \/ X; n( v% V) n: W4 ]5 A$ i& R        (setq d (cdr (assoc 0 c)))% l) G+ y% R4 x# J
        (while (> j 0)
0 f0 G% H% u% u- ^/ `5 G; C! o( I          (setq b1 (ssname a (setq j (1- j))))9 N( s- G: D% J$ I8 a1 A
          (setq c1 (entget b1))- j8 [4 l. S7 l
          (setq d1 (cdr (assoc 0 c1)))" V, m8 M4 I2 r' C& q
          (if (= d d1)$ J% x4 f' G! T9 n* K" F' Y
            (if (= d "LINE")
  T0 |' \( s- ]8 R              (if (and (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))6 S% |: B1 G0 Z" B, X# i- \  z  \8 q
                       (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))) T2 t! T  A9 f  P% Q
                       (= (rtos (cadr (assoc 11 c)) 2 4)(rtos (cadr (assoc 11 c1)) 2 4))
. p: Q0 ~) Q! M8 u8 R                       (= (rtos (caddr (assoc 11 c)) 2 4)(rtos (caddr (assoc 11 c1)) 2 4))
  [, S) H* c2 O) S- @                  )(command "erase" b1 "")
# e" `* {$ T  K              )
1 q2 R1 l- k) Q  S" n; `5 y              (if (= d "INSERT")* l  J3 d+ d0 T* f' R( o
                (if (and (equal (assoc 2 c) (assoc 2 c1)); A- [, C3 O; x& E' q& S) G+ k7 [
                         (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))! p& _! x8 E& x  R4 ?
                         (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))8 \2 a$ M  p4 a! D- j4 e6 R
                    )(command "erase" b1 "")* h7 e  E) X- x% T! m& R1 ~9 ?
                )2 B4 H2 a3 D; G0 m! M/ D2 u/ b
                (if (= d "LWPOLYLINE")
: j' R5 k9 ]( q( R( D                  (progn
/ l: h' K( B9 L. e9 V" N! a; Q* r& O                    (setq e (cddddr c) e1 (cddddr c1) e (cddddr e) e1 (cddddr e1))* u/ p8 a& E0 K; t
                    (while (and e e1)
5 e& I: T( j0 h/ H! p9 A                      (progn # n" b2 ^' w' ?
                      (setq f (car e) f1 (car e1) e (cdr e) e1 (cdr e1)). @0 T: z* R; c0 S+ d8 g1 E* c
                      (while (and e (/= (car f) 10))(setq f (car e) e (cdr e)))/ D8 u) r$ \: S$ V  x
                      (while (and e1 (/= (car f1) 10))(setq f1 (car e1) e1 (cdr e1)))$ P, D$ B2 Y% j1 m
                      (if (or (/= (rtos (cadr f) 2 4)(rtos (cadr f1) 2 4))1 w! Q: N: E" T- r- x
                              (/= (rtos (caddr f) 2 4)(rtos (caddr f1) 2 4)))(setq e1 nil)1 o9 O% v! P+ z3 s  c8 y. g* C
                        (if (not e1) (command "erase" b1 "")(if (not e)
$ J5 G! u/ g; k7 s                           (progn (command "erase" b "")(setq b b1 b1 nil))))$ `: X0 V6 B" }8 l- W+ b9 E
                  ) ) ) )          * e- Z' a8 o# U3 x+ f+ Z) t2 N
                  (if (= d "SPLINE"): T, r0 |" Y* g- s
                    (progn8 y/ I1 ^0 r/ M) R
                      (setq e (cddddr c) e1 (cddddr c1) e (cddddr e) e1 (cddddr e1)): W: g. R) S7 X. f/ e0 w) `( K( u
                      (while (and e e1)7 V1 |3 x. M' a: {# \3 G7 R
                        (progn
0 ]7 |2 B) [* k+ G+ H3 Q* _                          (setq f (car e) f1 (car e1) e (cdr e) e1 (cdr e1))3 D4 R, O' V, i$ [/ C- P: p! h
                          (while (and e (/= (car f) 10))(setq f (car e) e (cdr e)))3 i8 L/ a, M9 e! E. h( f2 v1 F& N
                          (while (and e1 (/= (car f1) 10))(setq f1 (car e1) e1 (cdr e1))). O; W+ x% S% k% c6 _& y" W: q( `% S
                          (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)
% x3 e% }  Q( z, R                            (if (not e1 ) (command "erase" b1 "")(if (not e)(progn (command "erase" b "")(setq b b1 b1 nil))))
2 @8 G3 D* @. V+ `) d                    ) ) ) )         
9 k1 p* S0 e  Z4 n5 s2 _                    (if (= d "TEXT")8 a' Z4 u" c- C6 [- ~6 N! E. |
                      (if (and (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))8 c1 d- e% J$ g
                               (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))
  i, E$ l1 S1 G6 [$ [3 C) g                          )(command "erase" b1 "")
4 G( [7 t! M: }* J                      )
( i& \' K+ A, }' m                      (if (= d "CIRCLE")
* E. j: A4 I5 l2 D                        (if (and (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))/ f: K. v) o# L: Q3 w3 B1 H
                                 (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))3 D8 u; m5 P: J8 g1 e7 C6 f) K
                                 (= (rtos (cdr (assoc 40 c)) 2 4)(rtos (cdr (assoc 40 c1)) 2 4))( C' ~; C% }. D# E- b& X& T
                            )(command "erase" b1 "")
* p! S' Q' l3 k8 m      ) ) ) ) ) ) ) ) ) )
, L1 E; t( R" o$ b      (setq m3 (polar m3 1.5708 50.0) y2 (+ y2 50.0))
; c2 q/ @7 X( d) v. o8 U    )" t6 I$ ^  p2 `6 P
    (setq m2 (polar m2 0.0 50.0) x2 (+ x2 50.0))" V4 I" L' ]& ~& {1 @
  )
: d) a" k6 ?/ w# [. F  (princ)
& n) U2 }+ c* N$ ~) z9 K)
% M' ^/ r& ^$ K- Y/ ^) m(princ "\n\"ere\"启动")
1 @) C, }* s8 G( W, C1 p' P: d  Z$ m8 i
[ 本帖最后由 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. J3 C" X% \" ^
有没有中间使用变量得说明?做什么用得?
1 H6 i0 S3 I. X) j
没有 这个程序用来删除多余的图元。程序特点,可以删除完全重合的直线、多段线、光滑曲线(程序中设置了4位小数,当坐标数值四舍五入精确到4位小数时认为重合),删除位置重合的文字,删除位置和半径相同的圆,删除位置和块名相同的块。
发表于 2008-12-6 15:17:15 | 显示全部楼层 来自: 中国四川成都
给你一个思路:! Y9 j  L) M- r+ o
    处理"LINE"时,增加一个判定函数,用于首先判定直线L1的两个端点是否在直线L2上面;若在,再判定直线L1的两个端点是否在直线L2的两个端点以内,则返回直线L1,否则返回直线L2。  ]2 ?8 v5 D7 i$ q
    判定直线L1的两个端点是否在直线L2上面:
- q1 e4 ^9 w9 @1 v/ N. V       可以逐点计算直线L1的两个端点到直线L2的距离是否小余你的精度要求,若小余,则判定为该点在直线L2上,否则,该点不在直线L2上。

评分

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

查看全部评分

发表于 2008-12-6 22:42:04 | 显示全部楼层 来自: 中国台湾
  1.    
    5 a3 c4 F! w3 n! X- t
  2.     (defun dxg (code ele)2 n% v* S" r8 {- ]$ f0 c
  3.       (cdr (assoc code (entget ele)))
    3 j6 `1 ?8 U+ m3 J; I% M7 J6 Q. |+ O
  4.     )
    7 i+ Y3 [% H$ k$ V) y
  5.        ! Q* H' }: j* I1 _. a9 i+ g
  6. 7 r4 v  e  h7 D; H- M" \
  7.     (defun vpt (a b c)
    2 W0 q, L$ c3 E3 F
  8.        (equal5 d( Y" U# |& J" e4 M3 V
  9.          (if (caddr a) a (reverse (cons 0.0 (reverse a))))
    ' j8 f' l, C6 I* A+ T) Y' G# T
  10.          (if (caddr b) b (reverse (cons 0.0 (reverse b))))1 b# p1 k. j) Z) k0 v, e# ^8 N
  11.          (expt 0.1 c)
    * k7 o8 R6 W. y9 T( y; G! x0 f; x& E
  12.        )- k% z' U$ D# u8 p- S% m9 K
  13.     )
    ( D4 q3 N: W+ S- u
  14.    
    # R+ ]3 W0 F3 [+ D# Q0 `
  15. ;;; =========== for Test only =========================================
      {0 @  G; D5 `1 \* l
  16. ;;; 删除线段内的短线
    5 z0 q) D- u5 e, V. c$ S: o$ }5 T- ^
  17. ;; ssen = Line Selection
    & @/ [( q  c& F  C2 A
  18. (setq nn (sslength ssen)). f0 p4 K$ z& O
  19. (cond3 D  c! S2 i* l$ J6 h, X
  20.   ((< nn 2) nil)                        ; Nothing to do
    1 E' a$ R' F3 G$ ?/ O
  21.   (T
    % _4 k$ {" u: o$ t  M9 C
  22.    (princ "\nProceeding with Line .....": C- j, w4 H' a$ B/ D# M- {9 u
  23.    (while (setq ee (ssname ssen (setq nn (1- nn)))) 2 _# Y; r( N6 z* s( R/ J9 D/ S# k
  24.      (cond" d3 |, o$ R% p- C; ^
  25.        ((null (entget ee)))                ; bypass
    & I/ H  ?6 Y1 b1 e  ~
  26.        (T
    1 x' R  E: V3 u- n
  27.         (setq p1  (dxg 10 ee)1 e& b6 {, R: c
  28.               p2  (dxg 11 ee)
    ; c6 w1 B0 m- L$ k; Y/ L
  29.               v1  (angle p1 p2)
    . w7 i! ^1 ^- H" H* t; X
  30.               e1d (cdddr (cddr (entget ee)))2 j" S# c6 `7 }# K8 ^& G) Y
  31.               sc  (ssget "f" (list p1 p2) '((0 . "LINE")
    5 I# ^  [+ F+ O/ h8 f8 f% J9 s
  32.               sum (if sc (sslength sc))
    ! B1 r) [8 R/ a: B/ t- @; q
  33.         )- P: |7 J9 j( d8 W- P/ y  y  ^
  34.         (while (and (entget ee) (> sum 0))
    7 z; \4 u& b; ]' m
  35.           (setq e1 (ssname sc (setq sum (1- sum))))
    / b+ d' N4 K( j+ V$ i
  36.           (cond' O+ H5 a- l0 k
  37.             ((eq e1 ee) nil)                ; Itself' D. ^6 A0 o! d+ t
  38.             ((equal (cdddr (cdddr (entget e1))) e1d)# o8 X* Y: G3 W" J% e9 D4 Y4 v
  39.              (entdel e1)
    . o1 K0 x( F8 J0 B. b
  40.             )0 F( r! w3 ~, |+ Y3 u3 R
  41.             (T2 C) p; q4 A# b
  42.              (setq p3 (dxg 10 e1)
    9 |' b) I$ m" E2 @
  43.                    p4 (dxg 11 e1)$ D) {% A" K3 @3 u
  44.                    v2 (if (vpt p1 p3 5)
    6 k' l- }2 H. Q  e% J
  45.                         (angle p2 p3)9 T  m. w; b+ [2 p2 O
  46.                         (angle p1 p3)
    # ^/ ^% w' y$ V4 c/ C. |
  47.                       ): S2 h& T0 U- G2 h
  48.              )2 ~+ U$ u: Q; t5 U, Q6 G+ |
  49.              (if (< (rem (abs (- v1 v2)) pi) 0.0001): ^+ _8 R) u7 y0 i
  50.                (if (< (distance p3 p4) (distance p1 p2))
    + C" K7 F* C9 r7 h
  51.                  (entdel e1)
    * X, T0 c- O- i: M9 t) V8 K! Q
  52.                  (entdel ee)( l$ ?; |7 p& L; A" H5 U* j
  53.                )
    9 X, C$ S* I. }$ t1 L$ [2 w
  54.              )
    # p2 X9 g- w/ O( \$ X! T. m
  55.             )" q6 w- \: I4 B0 ?; k
  56.           )
    $ t7 I7 M7 [, Z( m
  57.         )6 c. |( Y5 i4 n0 R; P' T6 s- A2 X
  58.        )
      K+ F) [4 ]: O4 x) y- O. P
  59.      )6 D. I2 }. w1 r% D' t3 G: j: R
  60.    )
    / g* i  U" t& _5 `8 V
  61.   )/ R- ^, g1 p; [3 F' d
  62. )
    * e, n! S5 }1 _& e
  63. " M, m% D# \3 o# |
复制代码
" P! f( v1 d8 {
[ 本帖最后由 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 )

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