QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
   在网上找的一个删除重复图元的LISP程序 加载使用后发现对重复线段的删除有时候无效 而且线段内部的线段无法删除 就是说如果一条线段长100一条长50 使用这个删除不掉!!请高手帮忙修改下!!6 R9 U" Q$ q+ K8 e8 a
 以下是程序原文:(附件内容是程序源文件)7 j! Q6 O2 k* E, U3 ?( {! u/ L
(defun c:ere()4 m& E& v0 w% b+ ^
  (setq m0 (getpoint "\n左下角:"))
9 F( I% n0 t3 o; J/ |* F5 ?* t  (setq m1 (getpoint "\n右上角:"))9 R7 n- ?1 U- o
  (setq x0 (car m0) x1 (car m1) y0 (cadr m0) y1 (cadr m1) m2 m0 x2 x0 y2 y0)+ s! H8 R4 X6 t2 e( N
  (while (< x2 x1)5 N! |3 z3 ]( r' m5 |1 n4 _
    (setq y2 y0 m3 m2)
% x2 H5 A. y+ O& J    (while (< y2 y1)
: Z! d) ?/ P- g* x      (setq m4 (polar m3 0.785398 70.72))
! v! L9 y5 A6 o# f      (setq a (ssget "_C" m3 m4))! C. y# ]. h8 l
      (if (not a)(setq i 0)(setq i (sslength a)))2 I" ]0 R" c5 k+ e! E
      (while (> i 1)/ H' f9 e1 Y; z$ l8 z1 @$ `; o
        (setq j (- i 1))1 A" w8 y/ X" s9 V8 g: ]
        (setq b (ssname a (setq i (1- i)))) ;(setq b (ssname a 1))
" s7 }, `: c  ?$ N        (setq c (entget b))% g& p! ?: m, S" S! g3 s( s
        (setq d (cdr (assoc 0 c)))
9 v2 S7 e6 f4 x, i# z  Q7 K8 r* _        (while (> j 0)
+ c: {% r$ m8 n1 `, t; |# ?          (setq b1 (ssname a (setq j (1- j))))
2 l% x0 J) t) [; W; y+ `          (setq c1 (entget b1))
# E4 ?" ?& j6 v9 g          (setq d1 (cdr (assoc 0 c1)))
+ @4 |* U6 Y: d9 P          (if (= d d1)
. g) E' O0 v- S0 ^- I            (if (= d "LINE")8 s6 h% R; ?# C/ F
              (if (and (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))& i, l" A+ n6 M3 ^' [
                       (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))
9 \1 g( s% ~# W: f* d6 N                       (= (rtos (cadr (assoc 11 c)) 2 4)(rtos (cadr (assoc 11 c1)) 2 4))) H1 V& U: X- u) d& R  @6 N( h+ g
                       (= (rtos (caddr (assoc 11 c)) 2 4)(rtos (caddr (assoc 11 c1)) 2 4))
* S# I6 y6 F. K                  )(command "erase" b1 "")" ^) a( r& e2 M/ G0 a1 |/ i; x
              )* W  f* b4 [: T2 y" y* z9 @/ X
              (if (= d "INSERT")
% ^, V3 d: a7 M9 ]- ?( H, k                (if (and (equal (assoc 2 c) (assoc 2 c1))
) J5 C: g) ^8 O) C- A7 S% v- `                         (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))
. V* [; o2 x$ ~. q                         (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))
3 b: A7 }. s% a                    )(command "erase" b1 "")
6 f/ }) W" f' R; [8 i                )
4 z4 V( K; g5 Z* X" q( P, B                (if (= d "LWPOLYLINE")5 u8 Y+ H* b: `2 O, e: K
                  (progn
, r9 r3 G3 k. }                    (setq e (cddddr c) e1 (cddddr c1) e (cddddr e) e1 (cddddr e1))
- x$ y4 u; n( X                    (while (and e e1)& h& g# j. G& b
                      (progn 8 x# C" f& Z% @- X
                      (setq f (car e) f1 (car e1) e (cdr e) e1 (cdr e1))
# y% C1 B: G  H                      (while (and e (/= (car f) 10))(setq f (car e) e (cdr e))); V; L4 u' X1 `/ K
                      (while (and e1 (/= (car f1) 10))(setq f1 (car e1) e1 (cdr e1)))
! G4 r! P( a% y" Z# L) n                      (if (or (/= (rtos (cadr f) 2 4)(rtos (cadr f1) 2 4))
" D4 k4 \8 ~+ U3 T; Z                              (/= (rtos (caddr f) 2 4)(rtos (caddr f1) 2 4)))(setq e1 nil)
. x( m) h9 d8 t, d2 J4 k/ R7 ?9 |                        (if (not e1) (command "erase" b1 "")(if (not e)
% ]) {8 H3 k6 y9 `                           (progn (command "erase" b "")(setq b b1 b1 nil))))7 W7 z' }3 y5 A# T+ N9 m6 u
                  ) ) ) )          : @8 D0 R+ m3 v1 \' |
                  (if (= d "SPLINE")
. w5 F2 g7 {) u7 X$ a+ [$ v, N3 t                    (progn
3 s  R* r- l6 x# r& x. v                      (setq e (cddddr c) e1 (cddddr c1) e (cddddr e) e1 (cddddr e1))
5 d4 z5 |$ G* b$ k                      (while (and e e1)
3 ]7 U9 V- k1 Y, p3 A, {0 O                        (progn 5 b% A7 b, [% W1 a) \
                          (setq f (car e) f1 (car e1) e (cdr e) e1 (cdr e1))
* b0 ?2 F( q" z                          (while (and e (/= (car f) 10))(setq f (car e) e (cdr e)))+ o( T- I9 x+ t, O+ _
                          (while (and e1 (/= (car f1) 10))(setq f1 (car e1) e1 (cdr e1)))! r( @: S6 Y+ Q
                          (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)% B4 e' I, _$ C+ @. F
                            (if (not e1 ) (command "erase" b1 "")(if (not e)(progn (command "erase" b "")(setq b b1 b1 nil))))
+ i& \& X2 c$ |0 l  C3 l1 t; \                    ) ) ) )         
. J4 c, v7 G  p8 k% m                    (if (= d "TEXT")4 O8 \; O9 |4 {2 |+ c, q& _* X7 P
                      (if (and (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))
" M8 c9 g( [- Z6 }                               (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))2 C* h% o0 q% x% n$ r7 a
                          )(command "erase" b1 "")
2 g: g3 i, D0 e# \( f                      )% H* w5 ^( U1 ^$ v8 @& w7 Q! L6 ]
                      (if (= d "CIRCLE")
! Q+ o6 y8 ~* l                        (if (and (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))0 O1 V; i, Q$ U; B: S1 Y
                                 (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))
" A. T' k8 `% U1 p! F                                 (= (rtos (cdr (assoc 40 c)) 2 4)(rtos (cdr (assoc 40 c1)) 2 4))6 x! K4 z( @/ r, b
                            )(command "erase" b1 "")
6 B4 i3 u( f8 V6 P      ) ) ) ) ) ) ) ) ) )
) L5 Z, _4 s/ F) @" i1 Q, {' D      (setq m3 (polar m3 1.5708 50.0) y2 (+ y2 50.0))3 j1 W% }) S2 W, W; _5 V
    )
& f* A- X0 c0 X. }; P% K    (setq m2 (polar m2 0.0 50.0) x2 (+ x2 50.0))
: B% u% x! H8 h) R  q7 n  )8 w7 h% R8 v, p& l3 f6 {" `2 J
  (princ)
) `/ n" n: d6 A% u/ w8 i)- D9 v) y: M: z* ~" A; W4 Y$ N3 J% Y
(princ "\n\"ere\"启动")
. k# p9 @: L: w. ?' p: i* F5 E2 G- W/ {. {7 J  z) M' V3 T' M
[ 本帖最后由 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
4 c$ ^6 _# _' E- c) M7 X; o! Z有没有中间使用变量得说明?做什么用得?
) P( a) t5 t9 U7 N+ T( O
没有 这个程序用来删除多余的图元。程序特点,可以删除完全重合的直线、多段线、光滑曲线(程序中设置了4位小数,当坐标数值四舍五入精确到4位小数时认为重合),删除位置重合的文字,删除位置和半径相同的圆,删除位置和块名相同的块。
发表于 2008-12-6 15:17:15 | 显示全部楼层 来自: 中国四川成都
给你一个思路:
  i4 X/ C) p: R  @0 a( I7 g    处理"LINE"时,增加一个判定函数,用于首先判定直线L1的两个端点是否在直线L2上面;若在,再判定直线L1的两个端点是否在直线L2的两个端点以内,则返回直线L1,否则返回直线L2。
; f; Y7 O" c; i    判定直线L1的两个端点是否在直线L2上面:# `3 p8 e* C+ q
       可以逐点计算直线L1的两个端点到直线L2的距离是否小余你的精度要求,若小余,则判定为该点在直线L2上,否则,该点不在直线L2上。

评分

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

查看全部评分

发表于 2008-12-6 22:42:04 | 显示全部楼层 来自: 中国台湾
  1.     8 b4 [2 f# {2 v7 r: u
  2.     (defun dxg (code ele)
    5 K3 n* C! C/ F& X: r% V! O  S
  3.       (cdr (assoc code (entget ele)))$ I! x. ^$ V" ^$ r5 y2 B
  4.     )) D, g; M3 g) h# @4 m( b6 t
  5.        6 C5 |6 d$ ?% t* t5 A+ ~% U

  6. 9 f5 {' {9 p9 C
  7.     (defun vpt (a b c)5 C/ u5 T, e, w% G/ O
  8.        (equal
    3 I) m$ k2 p" |" o
  9.          (if (caddr a) a (reverse (cons 0.0 (reverse a))))
    3 I+ ^& W- F( B* c5 g- ]
  10.          (if (caddr b) b (reverse (cons 0.0 (reverse b))))
    9 p& f% n" ]2 N3 M  y
  11.          (expt 0.1 c)' y& j2 N, X) y% o
  12.        )
    - G1 `) G% s7 [/ Z
  13.     ): W, H) n+ j  ~  E$ j
  14.     + Z9 A0 f) v0 K
  15. ;;; =========== for Test only =========================================: w( i& P/ \8 S$ u- @
  16. ;;; 删除线段内的短线9 n" `( f% i7 r0 D9 G% k. n* w
  17. ;; ssen = Line Selection, Y% L7 O2 U( W
  18. (setq nn (sslength ssen))
    4 M0 {2 W/ {! y8 `/ K9 ]- B9 Q
  19. (cond* D0 B( a. X: E$ _
  20.   ((< nn 2) nil)                        ; Nothing to do
    , C  o3 [) r, a$ ]
  21.   (T/ ]6 r$ V( w2 y( V
  22.    (princ "\nProceeding with Line ....."
    , J- U" c3 c" r+ h" F
  23.    (while (setq ee (ssname ssen (setq nn (1- nn)))) . W: }$ a" q/ A7 Z, n! i0 {- K# e( `" ?( z$ d
  24.      (cond4 Q4 Z" ~; K2 ^- p# \3 z% ^
  25.        ((null (entget ee)))                ; bypass
    7 \  i% A1 Y1 S. S  y. U% l$ H
  26.        (T
    - V% g& B1 F6 E# g4 _
  27.         (setq p1  (dxg 10 ee)
    ' J& _* H5 m+ J7 S1 F
  28.               p2  (dxg 11 ee)
    ( h2 j8 `8 b; P, f- e) N+ c! @% K* @
  29.               v1  (angle p1 p2)
    1 e- j; h) ]) V. J) O# }! E0 \
  30.               e1d (cdddr (cddr (entget ee)))
    / n. f  R; D2 D0 Y6 `* H- F
  31.               sc  (ssget "f" (list p1 p2) '((0 . "LINE")
    , a# X* U: z8 L( P
  32.               sum (if sc (sslength sc))+ r8 X$ R9 g7 Z- u0 p5 {6 _
  33.         ): X) f' f3 n1 [# ~/ M/ j6 G/ H. s2 w$ p
  34.         (while (and (entget ee) (> sum 0))
    & g4 M+ H6 Q8 H0 j: D
  35.           (setq e1 (ssname sc (setq sum (1- sum)))); m  v8 z4 [) a9 O9 F0 V
  36.           (cond0 ?$ Q# I' R8 G2 v6 I
  37.             ((eq e1 ee) nil)                ; Itself
    2 j: C: ?3 h8 L2 L
  38.             ((equal (cdddr (cdddr (entget e1))) e1d)1 i; m' O, z+ b2 O
  39.              (entdel e1)
    - K: c% C2 Y1 X" q, y! l% N
  40.             )
    ! \# _& z; w  }. O* ~7 j0 w  N
  41.             (T
    * `% _. P  a0 V" o) A6 k$ t! W! Z& m9 A
  42.              (setq p3 (dxg 10 e1)
    3 j% ^' R- W; F* O
  43.                    p4 (dxg 11 e1)
    . w7 f; N. b: @9 v; A' C
  44.                    v2 (if (vpt p1 p3 5)
    * i/ _2 @8 B  _
  45.                         (angle p2 p3)
    & a' W( w0 E( }) F: z  u. [$ c
  46.                         (angle p1 p3)
    " b; K$ j0 f1 I
  47.                       )7 t! w  r( ?: u* [/ T
  48.              )( D, j1 s: h+ g& i! O$ U$ a0 t& I
  49.              (if (< (rem (abs (- v1 v2)) pi) 0.0001)
    / L1 n  z# Q: G0 O- }) ?
  50.                (if (< (distance p3 p4) (distance p1 p2))
    - ]8 b" U2 n  A  c
  51.                  (entdel e1)
    2 }1 ^6 y/ A% {- f( \/ n# I
  52.                  (entdel ee)
    ; \8 O1 d) E8 B7 H8 J2 W
  53.                )
    $ O/ T) n) e$ s' ^3 V8 P5 d- y
  54.              )) ^: T' s/ L: G* }
  55.             )
    & U# X4 Q0 K& v1 C3 b
  56.           )
    4 G. f2 C7 _. o$ `+ M/ d
  57.         )
    / U. ^7 Q4 L9 W
  58.        )
    7 [! j. ~$ Q" Z7 P3 `
  59.      )
    & X! P$ Z8 Z1 K  v- n3 Q
  60.    )
    8 ]! j3 \: ]7 B! p  s* K
  61.   )+ W* }. k' N3 U; t5 }7 i* |
  62. )
    " R7 Y  N: V9 f' ?" _

  63. 0 u7 \0 e) o9 P" P7 o6 r
复制代码
& ^+ q; z2 ^( r5 C
[ 本帖最后由 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 )

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