QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
   在网上找的一个删除重复图元的LISP程序 加载使用后发现对重复线段的删除有时候无效 而且线段内部的线段无法删除 就是说如果一条线段长100一条长50 使用这个删除不掉!!请高手帮忙修改下!!
. o2 |( P6 g8 F5 g  [9 p 以下是程序原文:(附件内容是程序源文件)
+ U- F' s0 B$ h1 E( H! R9 P(defun c:ere()- a1 s4 m0 X) |8 ]( e/ H5 i2 {
  (setq m0 (getpoint "\n左下角:"))
5 X8 j8 P+ e! U$ n  (setq m1 (getpoint "\n右上角:"))3 n) n$ R1 ]3 a$ h1 u
  (setq x0 (car m0) x1 (car m1) y0 (cadr m0) y1 (cadr m1) m2 m0 x2 x0 y2 y0)& s' n2 h; i; v* z/ H( ~
  (while (< x2 x1)
0 K8 d4 K  v9 _; Y9 r# ]' ?  F    (setq y2 y0 m3 m2)( E( n% |/ L. U
    (while (< y2 y1)/ j- o& R+ _. r! Y) E
      (setq m4 (polar m3 0.785398 70.72))2 c: Z$ \! B9 o5 D. t! P' [
      (setq a (ssget "_C" m3 m4))/ n+ W! t4 n. {" p) q2 L( c/ k
      (if (not a)(setq i 0)(setq i (sslength a)))4 k2 V5 W) [7 L
      (while (> i 1)
- p9 E* t7 {8 S3 v        (setq j (- i 1))$ [1 |# _" y( C/ N4 J  p+ N
        (setq b (ssname a (setq i (1- i)))) ;(setq b (ssname a 1))1 W9 e6 i$ o) {$ z, y  k/ g6 I
        (setq c (entget b)), g3 t) D" S$ y! A; f3 B. S
        (setq d (cdr (assoc 0 c)))
' F* Q, z1 @  u3 |+ K( Q        (while (> j 0)5 u/ E! U. U$ K4 j. D
          (setq b1 (ssname a (setq j (1- j))))
, J# t& X6 Q: I; f+ T( y          (setq c1 (entget b1))) I0 y; n; _# r( e0 f9 y# }$ Z
          (setq d1 (cdr (assoc 0 c1)))1 m1 j: m' c* L) i5 L+ w- z! n
          (if (= d d1)
7 `, R. Y! S' K, B) U" A& t; ]            (if (= d "LINE")
8 ]# b" c+ |# e2 f6 J5 e              (if (and (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))
" s+ M+ r) B# ?% P, K' ^( @* U                       (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))7 P- }$ v( J& h. i* u* |
                       (= (rtos (cadr (assoc 11 c)) 2 4)(rtos (cadr (assoc 11 c1)) 2 4))
" k. q9 t3 ^4 W                       (= (rtos (caddr (assoc 11 c)) 2 4)(rtos (caddr (assoc 11 c1)) 2 4))4 y5 c! s6 T& ^4 c5 Y
                  )(command "erase" b1 "")- b& J, N( y7 i/ L9 t6 o! t7 a
              )
, n$ g1 E1 ?: c# B3 b! l              (if (= d "INSERT")
! j3 ?; C7 u: X6 F# C$ Y9 z                (if (and (equal (assoc 2 c) (assoc 2 c1))
7 I. f9 F! m+ A) r, Y( {. s- r                         (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))! g/ k! n! j4 ?2 [# l
                         (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))9 K3 i, ?( t# s7 T( V) v: Y
                    )(command "erase" b1 "")
9 R  j! v* b7 m! S$ P3 {5 ~                )- r$ ^6 l2 b6 d0 \3 T+ A6 `0 R; w
                (if (= d "LWPOLYLINE")+ A" I- _; P0 e  K6 h
                  (progn
& H& n/ v; K5 b  `4 G, Q                    (setq e (cddddr c) e1 (cddddr c1) e (cddddr e) e1 (cddddr e1))
8 G# ^2 \$ F7 p$ W2 E% c                    (while (and e e1)" o* f$ y3 f  `/ n6 V* R0 `
                      (progn
- q) e+ `! S, b4 l! U9 u9 ~2 X  b! T                      (setq f (car e) f1 (car e1) e (cdr e) e1 (cdr e1))
+ |0 b* _' C) |& T8 C( C" n8 _                      (while (and e (/= (car f) 10))(setq f (car e) e (cdr e)))
" M2 s7 C5 o3 B: K                      (while (and e1 (/= (car f1) 10))(setq f1 (car e1) e1 (cdr e1)))
" V5 M) ^$ u& a4 G                      (if (or (/= (rtos (cadr f) 2 4)(rtos (cadr f1) 2 4))
8 d4 [# y& G' J. U1 _6 d2 u% B0 u                              (/= (rtos (caddr f) 2 4)(rtos (caddr f1) 2 4)))(setq e1 nil)
) E+ ]; U9 c/ @, P7 o6 x' g- ?' v                        (if (not e1) (command "erase" b1 "")(if (not e)8 `0 b1 b: \! Y' f2 @- F3 V5 l" z
                           (progn (command "erase" b "")(setq b b1 b1 nil))))( ]2 k; `/ B; C1 L( e* d
                  ) ) ) )          $ i$ J( C# z& i$ L
                  (if (= d "SPLINE")0 j2 ?; J' i  n8 A1 a1 N
                    (progn
9 ~% W" e5 z1 h) g7 Z4 }: }# i) z: b) N                      (setq e (cddddr c) e1 (cddddr c1) e (cddddr e) e1 (cddddr e1))* p/ ]4 T! `0 S( j8 M
                      (while (and e e1)
2 D" ]. h) Z8 |/ c; {* k# k( B( F6 G                        (progn 5 i" r( Y9 D; p& `
                          (setq f (car e) f1 (car e1) e (cdr e) e1 (cdr e1))
9 F+ ~1 K! K% e; T$ r3 X; ]# t7 Z2 K                          (while (and e (/= (car f) 10))(setq f (car e) e (cdr e))): |8 {  J) H1 P( E6 G- d$ H; u: C3 |
                          (while (and e1 (/= (car f1) 10))(setq f1 (car e1) e1 (cdr e1)))( k: O3 q8 U. i5 G) X0 B* C
                          (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)& N& Y/ A) l4 e- t# V% c/ \. f
                            (if (not e1 ) (command "erase" b1 "")(if (not e)(progn (command "erase" b "")(setq b b1 b1 nil))))+ l" n. h% m* C
                    ) ) ) )          + P% B- Q7 {& v' ]( n0 m2 h$ m
                    (if (= d "TEXT")- G- c5 x- r9 u; c5 G  d1 D
                      (if (and (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))' E9 Z7 {4 B% n0 F+ g
                               (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))
- s: N5 \6 F$ z# o( A" @                          )(command "erase" b1 "")
; A: \" ]- b) }' \: y  c/ v% C% W                      )
8 H7 P2 r# J9 i' a! h! T                      (if (= d "CIRCLE")4 D: _# N" t+ o" U* T, x
                        (if (and (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))4 ~  a; L* V, x: p2 s1 ^  K
                                 (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))
2 m* x, C% z0 N+ f; L( k: C                                 (= (rtos (cdr (assoc 40 c)) 2 4)(rtos (cdr (assoc 40 c1)) 2 4)); ]# s9 i; @  j6 k
                            )(command "erase" b1 "")  X) n- {: y/ ]) g/ `
      ) ) ) ) ) ) ) ) ) )
; \6 [9 |, M' a      (setq m3 (polar m3 1.5708 50.0) y2 (+ y2 50.0))
9 z" Y: b( _8 \& \9 B    ); i4 Q0 P( v9 {; Y
    (setq m2 (polar m2 0.0 50.0) x2 (+ x2 50.0))
; n: S7 |! c2 b' j: n  )
! T( y6 i0 G; G/ P  (princ)
% Z  `2 t, s# Y) o5 ^)
$ e7 s+ W- H+ q' G( Q) S(princ "\n\"ere\"启动")
! C) c: U% O; f& ?: H9 }
9 U" P. l! x9 ^[ 本帖最后由 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( q+ [1 R! B3 A0 s  p' I) I
有没有中间使用变量得说明?做什么用得?

$ a- {& S( m& H2 j7 S; {7 W) Y没有 这个程序用来删除多余的图元。程序特点,可以删除完全重合的直线、多段线、光滑曲线(程序中设置了4位小数,当坐标数值四舍五入精确到4位小数时认为重合),删除位置重合的文字,删除位置和半径相同的圆,删除位置和块名相同的块。
发表于 2008-12-6 15:17:15 | 显示全部楼层 来自: 中国四川成都
给你一个思路:
$ G4 \# ]& a' I; V; X- ]& p    处理"LINE"时,增加一个判定函数,用于首先判定直线L1的两个端点是否在直线L2上面;若在,再判定直线L1的两个端点是否在直线L2的两个端点以内,则返回直线L1,否则返回直线L2。) ?2 u9 O8 a. I6 _  P8 x
    判定直线L1的两个端点是否在直线L2上面:
9 _* W$ v/ G# U% H' x       可以逐点计算直线L1的两个端点到直线L2的距离是否小余你的精度要求,若小余,则判定为该点在直线L2上,否则,该点不在直线L2上。

评分

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

查看全部评分

发表于 2008-12-6 22:42:04 | 显示全部楼层 来自: 中国台湾
  1.     7 Y# z- _; J/ k0 v/ r+ t  O
  2.     (defun dxg (code ele), f; a" ~6 q& c) J* K
  3.       (cdr (assoc code (entget ele)))
    8 @+ x+ O- U+ t( k+ d8 ?
  4.     ), x. P8 g  ^4 c4 A. _# X  P. k5 {0 ^; M
  5.       
    1 h/ ~9 ~2 [6 x+ W3 Z5 G& s
  6. ! N8 L# v3 \. [/ E" `% `* y! o
  7.     (defun vpt (a b c)* E- c5 d: {: Z( m/ ?; y. m5 E  E
  8.        (equal, V& C% m- j  Z, t) ?: L6 P
  9.          (if (caddr a) a (reverse (cons 0.0 (reverse a))))
    8 @, f& f# }* k( V1 z
  10.          (if (caddr b) b (reverse (cons 0.0 (reverse b))))2 j# l) G0 w- p8 w5 A& {
  11.          (expt 0.1 c)
    % U0 J- k2 r; w, v( _6 ~. D
  12.        ); i: T1 {9 |, \
  13.     )  X/ X6 m  x% p) O
  14.    
    / t/ t8 ]2 b7 ^: j+ p4 f
  15. ;;; =========== for Test only =========================================
    2 v% O; f% z6 f
  16. ;;; 删除线段内的短线, I9 F& Z' V6 ]! X
  17. ;; ssen = Line Selection2 R" f  t2 Y: P9 O
  18. (setq nn (sslength ssen))4 r2 ~$ L# D5 e" G8 I! L
  19. (cond  y3 P& G- a" i+ W' |! X
  20.   ((< nn 2) nil)                        ; Nothing to do7 S- b3 r, X6 H" h/ R' o# d
  21.   (T
      Y) O2 F' y3 S; X
  22.    (princ "\nProceeding with Line ....."! d1 n) `2 s2 }" X; a
  23.    (while (setq ee (ssname ssen (setq nn (1- nn)))) 0 I3 U$ A, J. {- c( J! \
  24.      (cond) _# T$ D! u' X7 q  P; A
  25.        ((null (entget ee)))                ; bypass
    8 {" n9 A! D1 N) z4 p
  26.        (T
    3 @+ B: b9 t) n6 n) _
  27.         (setq p1  (dxg 10 ee)
    : D" b) b" I7 B& V2 J. V. j
  28.               p2  (dxg 11 ee)
    8 n5 E( _3 I" a  B0 N; s
  29.               v1  (angle p1 p2)2 M7 A- m( N; I! b3 t  ?; J
  30.               e1d (cdddr (cddr (entget ee)))1 W5 S+ ]  n; }! E% P
  31.               sc  (ssget "f" (list p1 p2) '((0 . "LINE")+ D1 g, }4 N/ G/ e
  32.               sum (if sc (sslength sc))
    3 o' h9 ]0 b! g, m# I
  33.         )
    % Z9 s$ {, w: @) b- M
  34.         (while (and (entget ee) (> sum 0))4 t" T- P% l' v; I1 L2 n
  35.           (setq e1 (ssname sc (setq sum (1- sum))))
    ! U9 s+ h$ Z8 z
  36.           (cond  N7 C& f3 ]7 a, q
  37.             ((eq e1 ee) nil)                ; Itself8 v6 H8 ~6 V) Y- t8 G4 E
  38.             ((equal (cdddr (cdddr (entget e1))) e1d)8 `6 F& @2 h0 W: a
  39.              (entdel e1)0 X+ U  E: Z, J! A! a' w; v
  40.             )
    : q6 ]& _) Q5 Z5 A. D
  41.             (T% O5 r7 q$ [7 K5 _. h2 y: _
  42.              (setq p3 (dxg 10 e1)( r8 Z2 O# k' Z: L
  43.                    p4 (dxg 11 e1)
    , }- T+ v6 T& o
  44.                    v2 (if (vpt p1 p3 5)/ \! @! K1 E8 v; E/ F) l# U7 n( M
  45.                         (angle p2 p3)
    - y4 c  m6 S4 ^# a
  46.                         (angle p1 p3)
      u2 [3 D6 _5 ]+ w, n
  47.                       )' [# b: a! r- V3 C2 _- a2 Y1 t
  48.              ): o0 B( ?& ^0 t4 v- d
  49.              (if (< (rem (abs (- v1 v2)) pi) 0.0001)
    . J+ z3 k8 @) h8 D
  50.                (if (< (distance p3 p4) (distance p1 p2))
    . `& C$ ~  I* k0 @, G
  51.                  (entdel e1)
    ) V! _/ ~0 W5 p5 ^! P4 e4 n
  52.                  (entdel ee)
    " B4 ^. F* O! C1 z( q# ~
  53.                )% W( h6 [) ?; q: ^) {. N' K6 Q1 m5 E3 f
  54.              )
    ( r- |$ e  e5 O: |+ a! k
  55.             )
    6 S/ W; b& C9 Z' U/ a
  56.           )* I# S0 F9 s, }& v' J' S5 t0 C
  57.         )
    3 v7 G0 \( Y/ |: e, Q; r7 ^, h
  58.        )
    & K2 T3 @# M$ \
  59.      )7 u0 G- V) m! e/ R
  60.    )
    ; B$ l6 C2 q/ A0 g- t4 D
  61.   )7 E9 a! x1 N6 d( C3 C* D% t8 A
  62. )
    , U  k. y1 o' K
  63. * W( w+ x5 z& z1 i
复制代码

' R' B+ A6 }- n[ 本帖最后由 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 )

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