QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
8天前
查看: 1870|回复: 5
收起左侧

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

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

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

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

x
   在网上找的一个删除重复图元的LISP程序 加载使用后发现对重复线段的删除有时候无效 而且线段内部的线段无法删除 就是说如果一条线段长100一条长50 使用这个删除不掉!!请高手帮忙修改下!!4 z8 ^+ r1 r: R! `! ]
 以下是程序原文:(附件内容是程序源文件)% g' _; v  T/ G; n+ z1 k
(defun c:ere()& J0 D* o0 H& ^  d# p- s1 t" k
  (setq m0 (getpoint "\n左下角:"))
$ S; _- R$ q/ y1 L( r  (setq m1 (getpoint "\n右上角:"))
) Q) R8 K9 ?, P4 ~  (setq x0 (car m0) x1 (car m1) y0 (cadr m0) y1 (cadr m1) m2 m0 x2 x0 y2 y0)* o' F" |$ I- _- h
  (while (< x2 x1)! ^, ^# M' d- Z  [; }: y
    (setq y2 y0 m3 m2)6 D- J; i8 g6 s4 n% G
    (while (< y2 y1)
. x) I' x7 |" p$ J3 X; i      (setq m4 (polar m3 0.785398 70.72))" w( N, {% }" _
      (setq a (ssget "_C" m3 m4))' i1 ^' R1 \$ j7 @) d
      (if (not a)(setq i 0)(setq i (sslength a)))+ X2 i/ K% b* r" A4 b
      (while (> i 1)
, D0 Z. _& U7 \) a$ m        (setq j (- i 1))# U9 x' {7 T; C! a2 ]
        (setq b (ssname a (setq i (1- i)))) ;(setq b (ssname a 1))
5 ]$ A4 G4 o5 B" u# Z4 W        (setq c (entget b))
: B7 \6 l: C' l        (setq d (cdr (assoc 0 c)))6 H+ d' O+ k% T6 q" v
        (while (> j 0)
& p( v/ `( C- K, A4 H9 h          (setq b1 (ssname a (setq j (1- j))))$ r( f% ~, W( A  o* _' ?
          (setq c1 (entget b1))
  X4 G& c2 f5 n& p2 x! q' [          (setq d1 (cdr (assoc 0 c1)))2 g+ n5 \; K3 q0 y+ I; A9 ^. n
          (if (= d d1)
7 e# A3 f* l1 G) U; Z5 I1 i            (if (= d "LINE")8 n( M. f# O% T
              (if (and (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))% K) h' ~' g% }0 _8 H
                       (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))' C0 N" A: C' m6 m7 O  Q* N" Q
                       (= (rtos (cadr (assoc 11 c)) 2 4)(rtos (cadr (assoc 11 c1)) 2 4))
4 X  ?! F4 H  e0 `2 j, K                       (= (rtos (caddr (assoc 11 c)) 2 4)(rtos (caddr (assoc 11 c1)) 2 4))
, m8 r6 P' a7 d: h5 A0 \                  )(command "erase" b1 "")
! W6 B9 g+ s# }. l  ?+ I              )  c# C' ^- X: B. \! t6 W% Q! k
              (if (= d "INSERT")
- B2 z1 [0 h; B. I0 u! Q' a                (if (and (equal (assoc 2 c) (assoc 2 c1))
- P4 ~- I7 M1 |+ L; e                         (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))! H1 ?# Y+ `6 L) S
                         (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))& |- s0 `5 A% X4 a4 A
                    )(command "erase" b1 "")( p/ v7 G$ o, g3 |7 Y3 ^, [. e: E
                )/ x* _+ \# Z9 Q7 l) L
                (if (= d "LWPOLYLINE")
& R3 z; a+ k5 K9 ^% g/ j! S                  (progn
, e$ y8 M/ R7 g) }# e& r- \7 Q                    (setq e (cddddr c) e1 (cddddr c1) e (cddddr e) e1 (cddddr e1))
* |: N$ P# Q1 y# Z% x5 v) K9 H7 W                    (while (and e e1)
' n2 u; I" D  F" W                      (progn ) _5 `; o* Y3 P* B$ J
                      (setq f (car e) f1 (car e1) e (cdr e) e1 (cdr e1)). a# F7 A' z2 O8 W" ^
                      (while (and e (/= (car f) 10))(setq f (car e) e (cdr e)))2 {) @7 S; _. n4 s
                      (while (and e1 (/= (car f1) 10))(setq f1 (car e1) e1 (cdr e1)))6 Z" U5 r9 c- v& i
                      (if (or (/= (rtos (cadr f) 2 4)(rtos (cadr f1) 2 4))
' \7 U5 W! f  D) }; Z                              (/= (rtos (caddr f) 2 4)(rtos (caddr f1) 2 4)))(setq e1 nil)
4 V# D! J8 {' c* T3 {                        (if (not e1) (command "erase" b1 "")(if (not e)8 x' z# f8 P2 L) Y$ U! T
                           (progn (command "erase" b "")(setq b b1 b1 nil))))% s) M+ }: ~- |' U; w+ q$ R$ b
                  ) ) ) )         
. N) ]9 N9 W) K4 G                  (if (= d "SPLINE")$ ~+ g" A# r0 [% T" a8 x
                    (progn
/ i# O, r( p, E4 o                      (setq e (cddddr c) e1 (cddddr c1) e (cddddr e) e1 (cddddr e1))7 L! g; u( a7 |- Y) ?
                      (while (and e e1)/ H) ]; S: y% b6 p
                        (progn
: x; s$ n6 L; o% w2 b- d                          (setq f (car e) f1 (car e1) e (cdr e) e1 (cdr e1))4 E2 F' _4 d  C! c' k
                          (while (and e (/= (car f) 10))(setq f (car e) e (cdr e)))
+ p' |. s) |" A: V* s                          (while (and e1 (/= (car f1) 10))(setq f1 (car e1) e1 (cdr e1)))$ Y/ o  [" I# G6 Y& _0 {
                          (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)
, ?* u! \9 z  p, W2 K                            (if (not e1 ) (command "erase" b1 "")(if (not e)(progn (command "erase" b "")(setq b b1 b1 nil))))% q/ S% A( j, m
                    ) ) ) )          3 ~- i3 [* q) s  p. C7 P7 Z6 [$ h4 k& Z
                    (if (= d "TEXT")8 k+ L1 N& r$ O2 N( |" g
                      (if (and (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4)); F/ P5 E' M6 E0 j! S. Y
                               (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))
! E9 p' J( r- Q! V9 c                          )(command "erase" b1 "")
7 J# Z8 C/ S1 k- t; f7 s                      ); ~2 R6 b; S  \
                      (if (= d "CIRCLE")
; k, x; G/ k% {% x6 L$ o, l                        (if (and (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))
8 `) c, _' B  f3 [                                 (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))2 L: ?& H8 m$ X
                                 (= (rtos (cdr (assoc 40 c)) 2 4)(rtos (cdr (assoc 40 c1)) 2 4))
  G8 w" L9 k: N6 M                            )(command "erase" b1 "")
: S& B5 R% k5 p! j      ) ) ) ) ) ) ) ) ) )7 F8 u* `* ^+ T
      (setq m3 (polar m3 1.5708 50.0) y2 (+ y2 50.0))
. L+ n9 l" g3 _  x$ Y% [    )  t$ Y0 ]. A; Z$ z4 [6 Q( ~
    (setq m2 (polar m2 0.0 50.0) x2 (+ x2 50.0))5 r; y' E8 M. f% l/ Y6 @
  )5 {# `" i/ A, F. |
  (princ)
; k& U7 s8 ?  _  g4 A)0 N' I$ O6 [$ w$ A; x3 A
(princ "\n\"ere\"启动")3 L9 r( O$ d0 [+ {; M
8 S( p: y  s9 k- x. e2 l: N
[ 本帖最后由 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% t/ }. p8 Q( X9 ]6 V9 X4 h
有没有中间使用变量得说明?做什么用得?
  \9 T, q6 j, o4 D* A8 B% n' _+ Y
没有 这个程序用来删除多余的图元。程序特点,可以删除完全重合的直线、多段线、光滑曲线(程序中设置了4位小数,当坐标数值四舍五入精确到4位小数时认为重合),删除位置重合的文字,删除位置和半径相同的圆,删除位置和块名相同的块。
发表于 2008-12-6 15:17:15 | 显示全部楼层 来自: 中国四川成都
给你一个思路:
- F$ m' A, F; {0 e    处理"LINE"时,增加一个判定函数,用于首先判定直线L1的两个端点是否在直线L2上面;若在,再判定直线L1的两个端点是否在直线L2的两个端点以内,则返回直线L1,否则返回直线L2。0 h; E& o. N& v; m5 f6 x
    判定直线L1的两个端点是否在直线L2上面:$ ~" H% l" u9 b$ H, w2 l
       可以逐点计算直线L1的两个端点到直线L2的距离是否小余你的精度要求,若小余,则判定为该点在直线L2上,否则,该点不在直线L2上。

评分

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

查看全部评分

发表于 2008-12-6 22:42:04 | 显示全部楼层 来自: 中国台湾
  1.    
    8 }8 s; z+ N9 G" [4 \
  2.     (defun dxg (code ele)
    ; c. B! T4 l+ f+ {
  3.       (cdr (assoc code (entget ele)))6 e4 b4 T* E! o5 Q: p! Q: x
  4.     )
    9 H, t, @; v& V; {" z3 x6 ?) a
  5.        0 @6 ]; \9 J1 W" c" S* p
  6. 5 Z/ ]" X* o3 f1 B2 b) y( a
  7.     (defun vpt (a b c)3 b4 c- Q9 @: K! V* n/ |
  8.        (equal% L" F# M) f  X# G1 h
  9.          (if (caddr a) a (reverse (cons 0.0 (reverse a))))
    5 ~. j# ^9 [! w% e, {) P
  10.          (if (caddr b) b (reverse (cons 0.0 (reverse b))))5 H2 G* N( q: P
  11.          (expt 0.1 c)
    & `2 O+ r8 ]' _# F: A! Z: \7 P
  12.        )
    ! c' M$ u/ a2 L: P1 Y" [: d
  13.     )
    ' k$ I$ V, x$ _* R
  14.    
    ! s* z+ y0 \1 _7 d: J
  15. ;;; =========== for Test only =========================================6 p7 s7 x; w% L6 [( Q. S
  16. ;;; 删除线段内的短线
      u2 C$ O, h4 n# h
  17. ;; ssen = Line Selection8 K. q* B0 m7 S4 {1 O
  18. (setq nn (sslength ssen))9 j2 `: C8 P* b3 s
  19. (cond3 R2 Y+ F0 e6 e$ W. M
  20.   ((< nn 2) nil)                        ; Nothing to do) ^, `* w1 h) k- B) ]
  21.   (T
    ) k; W2 w! J1 }9 u9 B7 w' `
  22.    (princ "\nProceeding with Line .....": t7 M& `# e8 ~  Z2 x. m+ O8 A* g" V
  23.    (while (setq ee (ssname ssen (setq nn (1- nn))))
    8 H6 E. d( p' ^6 }0 H  ?. y
  24.      (cond
    - E- a- `6 [0 E8 P$ k8 J
  25.        ((null (entget ee)))                ; bypass
    # B3 _' k7 X# T/ E& V# b  ]
  26.        (T$ k8 _; F  X6 }+ ^' B
  27.         (setq p1  (dxg 10 ee)% h, v5 x9 j3 e
  28.               p2  (dxg 11 ee)) a! B4 [8 D, g: z; X0 i+ d  `1 Q
  29.               v1  (angle p1 p2)
    , q9 o" T7 S; B; ?: O- {2 I9 G1 N) T
  30.               e1d (cdddr (cddr (entget ee)))+ T$ V! j' F- k3 s6 A4 m
  31.               sc  (ssget "f" (list p1 p2) '((0 . "LINE")2 }( x2 x# A6 b' p0 m
  32.               sum (if sc (sslength sc))
    ( i. P) E+ x& @
  33.         )
    ) @( G/ Q2 S4 U7 I* ]/ V
  34.         (while (and (entget ee) (> sum 0))
    ' N0 ]8 G9 C" q3 D! c
  35.           (setq e1 (ssname sc (setq sum (1- sum))))# K+ ], T* t3 b' c
  36.           (cond4 l& ]5 B& l6 t
  37.             ((eq e1 ee) nil)                ; Itself: e) H! {7 Y7 C' p& B& O( r
  38.             ((equal (cdddr (cdddr (entget e1))) e1d)
    ) {. q1 M. s2 }5 X/ q" W' C8 {
  39.              (entdel e1)
      q' P& [$ R; A7 ]! r7 l/ ~* S
  40.             )
    $ i8 M, l9 S" ~; `
  41.             (T
    * w/ t! R' P6 g9 e, n. `
  42.              (setq p3 (dxg 10 e1)
    % _2 c# `# a: g5 l6 q1 D9 I
  43.                    p4 (dxg 11 e1)) ?* ^& q4 D  r( q4 t/ e
  44.                    v2 (if (vpt p1 p3 5)  _& q, _6 ?0 v( q
  45.                         (angle p2 p3)
    8 K8 S3 q# S2 Q" N
  46.                         (angle p1 p3)
    % U# c) M% @) G* @# ^$ Y( ~5 i
  47.                       )- }9 K" y% V/ _: _
  48.              ): E; ~; P, E1 |* Y1 y
  49.              (if (< (rem (abs (- v1 v2)) pi) 0.0001)
    : C/ t& Q. y& j$ T! |) I. f6 C8 I
  50.                (if (< (distance p3 p4) (distance p1 p2))
    . C& [7 f% m6 s3 P1 ~+ }
  51.                  (entdel e1)
    1 a: g7 Q0 n9 _2 c, o( S/ P) L& Q
  52.                  (entdel ee)
    + b9 p& V9 \0 D* Y! t
  53.                )
    ( e2 r- I! }% B" A  \+ s
  54.              )
    2 B' W2 n; e3 G
  55.             )) d' Y5 g  E% |+ _
  56.           )
    ( Z* U9 n* S: G
  57.         )
    1 k. J9 Z6 M. k# B
  58.        )$ A! @2 h2 \0 K8 X
  59.      )+ q4 a+ N8 |4 L& I
  60.    )
    : F4 p, S8 q( G/ }+ K: T; [
  61.   )
    ; {: }* v# K$ J
  62. )9 ^+ S7 U. ?, A! w7 r- j" Q

  63. ( r) A( v+ B& Z+ W2 l2 P. c5 P; [3 r
复制代码
) V$ g. O: o4 C* Y' W% C0 |& ~1 _
[ 本帖最后由 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 )

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