QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
   在网上找的一个删除重复图元的LISP程序 加载使用后发现对重复线段的删除有时候无效 而且线段内部的线段无法删除 就是说如果一条线段长100一条长50 使用这个删除不掉!!请高手帮忙修改下!!" t0 X) Y  N( z
 以下是程序原文:(附件内容是程序源文件)
: |  o- x) {4 t: H" U9 d(defun c:ere()6 h6 k3 ]0 U( M$ z- b
  (setq m0 (getpoint "\n左下角:"))7 G4 p  I; Q# J
  (setq m1 (getpoint "\n右上角:"))
1 a$ Y: w/ l+ w  (setq x0 (car m0) x1 (car m1) y0 (cadr m0) y1 (cadr m1) m2 m0 x2 x0 y2 y0)9 [' d% ?' k& F- B9 G2 P0 A* \
  (while (< x2 x1)
6 L1 G* c4 ?* J    (setq y2 y0 m3 m2)5 L; G+ Q+ ~7 F% y: t
    (while (< y2 y1)
* `$ ^) Y9 n" L' k8 z& A: W      (setq m4 (polar m3 0.785398 70.72))( v0 c6 Q- d% j& S0 G8 w+ M/ w
      (setq a (ssget "_C" m3 m4))
) N7 ?  Z. i0 l( j      (if (not a)(setq i 0)(setq i (sslength a)))9 I& c3 c8 b  P+ _) V
      (while (> i 1)
0 m  r  y" s. `7 {! H" \& r        (setq j (- i 1))- z' d' H4 c5 w! N% ^* J
        (setq b (ssname a (setq i (1- i)))) ;(setq b (ssname a 1))
1 o9 O, y7 G$ h2 U3 o$ P6 m0 J        (setq c (entget b))
! ^; B) G$ Q- V6 N- D, d+ `( u0 H7 R        (setq d (cdr (assoc 0 c)))
' v$ Y8 Y* K& }  Z* Z, ]8 A8 K5 I        (while (> j 0)8 C* W) p% d7 _* r
          (setq b1 (ssname a (setq j (1- j))))% ~4 N& k2 u- N+ e
          (setq c1 (entget b1))" p3 S" B5 }- R8 d
          (setq d1 (cdr (assoc 0 c1)))
  N' I3 [9 I, j0 e/ S; Q# h1 c/ [2 m) R          (if (= d d1)0 s- o0 |" t2 N
            (if (= d "LINE")
% a9 R  ]  l/ B) N. Y              (if (and (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))
( V( y5 h' ~% A4 x                       (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))6 s; I( ^, \) c9 j" v# f4 _0 I& H
                       (= (rtos (cadr (assoc 11 c)) 2 4)(rtos (cadr (assoc 11 c1)) 2 4))
/ M& u; e) ~0 p                       (= (rtos (caddr (assoc 11 c)) 2 4)(rtos (caddr (assoc 11 c1)) 2 4))7 B% d4 ~; x* X: c- [& z& N
                  )(command "erase" b1 "")! b& u' P$ n0 |7 D# `
              ). V( G. c9 o# {" ]* B$ ]5 a$ n
              (if (= d "INSERT")
' H6 q4 W0 w. ?                (if (and (equal (assoc 2 c) (assoc 2 c1))5 J  ?( E4 ^' g: x: X
                         (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))- R9 w- H: {5 D
                         (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4)), P9 a% L: l$ ^+ h" {
                    )(command "erase" b1 "")! J; U  q' c  t
                )( J' b- O, b5 ]$ N
                (if (= d "LWPOLYLINE")( O; p# d7 S! ?9 r9 i& t
                  (progn/ p; r, d, `' Q5 f3 e1 Q
                    (setq e (cddddr c) e1 (cddddr c1) e (cddddr e) e1 (cddddr e1))
3 x' t9 t' |- \) i                    (while (and e e1)
0 f) W6 T  Q5 M4 d8 ], J; C                      (progn
- V! _) H# u( }: k1 a' E5 u                      (setq f (car e) f1 (car e1) e (cdr e) e1 (cdr e1))
4 O) e1 r0 a- a1 s; A  W1 }                      (while (and e (/= (car f) 10))(setq f (car e) e (cdr e)))2 G. j) T; b3 t1 @# N* t* i1 Z* U
                      (while (and e1 (/= (car f1) 10))(setq f1 (car e1) e1 (cdr e1)))' S/ ]7 q& ?0 A5 s
                      (if (or (/= (rtos (cadr f) 2 4)(rtos (cadr f1) 2 4))8 |$ K* B3 L) n" l1 t7 C; K$ j
                              (/= (rtos (caddr f) 2 4)(rtos (caddr f1) 2 4)))(setq e1 nil)
8 a) m# Y( C8 D' F. N, g. U                        (if (not e1) (command "erase" b1 "")(if (not e)
1 B6 \4 B6 j7 k# ~                           (progn (command "erase" b "")(setq b b1 b1 nil))))
5 W) Z& D& F5 o                  ) ) ) )         
3 i' A7 L" H* i                  (if (= d "SPLINE")
9 J8 F- M! V3 u/ `( o                    (progn
- k0 o' W% W: @- Z. p4 j( N1 F" s                      (setq e (cddddr c) e1 (cddddr c1) e (cddddr e) e1 (cddddr e1)): V2 j4 n: O4 R4 d
                      (while (and e e1)
5 _; Y+ K( Z8 s- `% D& `" e! f                        (progn
  |% L/ u0 t7 J6 r* e; ]# A- l                          (setq f (car e) f1 (car e1) e (cdr e) e1 (cdr e1))
* n( c  Z1 _* Z- A& \* v: S. X  c                          (while (and e (/= (car f) 10))(setq f (car e) e (cdr e)))
, u8 r- _& I% R2 P  T4 m! P0 r                          (while (and e1 (/= (car f1) 10))(setq f1 (car e1) e1 (cdr e1)))# {' |& X& S/ L* v
                          (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)
9 }3 m9 l/ @- u# c6 J                            (if (not e1 ) (command "erase" b1 "")(if (not e)(progn (command "erase" b "")(setq b b1 b1 nil)))): f! G! k- {! l! Z- O& x& ^- z4 g
                    ) ) ) )          9 `6 ?4 k) x* y5 E8 x& n7 `) c
                    (if (= d "TEXT")2 M9 n, D9 c: }2 ?
                      (if (and (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))
: s- h( ]  P3 T' j  r& o+ c! S                               (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))
9 T  W% q& \4 H" R2 x; w                          )(command "erase" b1 "")' f* }+ z8 W+ [
                      )
* _! h: N" q- ^- m$ J                      (if (= d "CIRCLE")
; m0 R/ ~! C. |& u$ `' A- V                        (if (and (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))6 @1 F9 T4 }0 A; t0 V
                                 (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))% ?$ Z; t. @  Z  a
                                 (= (rtos (cdr (assoc 40 c)) 2 4)(rtos (cdr (assoc 40 c1)) 2 4))
7 Q+ r0 [1 l2 g4 p9 o4 R8 H+ i' g  C                            )(command "erase" b1 "")
+ ^8 F7 j8 |( X$ C      ) ) ) ) ) ) ) ) ) )
# O. k" m  R$ ^5 C      (setq m3 (polar m3 1.5708 50.0) y2 (+ y2 50.0))
- [" r* |4 F3 o    )4 F- h; A& y5 S& l+ C
    (setq m2 (polar m2 0.0 50.0) x2 (+ x2 50.0)): a# H( P  }3 c/ `/ ?. q1 u
  )1 x9 o: ]# G% L/ ?" q3 p- Q
  (princ)- i; ~: H( O3 }* A/ h5 O7 U
)
4 a7 f: |( m/ m+ r- E; @(princ "\n\"ere\"启动")
- ]3 B& g7 Z3 w/ {! a+ U9 Y3 K6 j( x; L& N5 G/ X! G7 W" T/ d: \1 _
[ 本帖最后由 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.gif9 x5 w* H! l1 O0 S" [% _6 ~" d2 q( d
有没有中间使用变量得说明?做什么用得?
& F9 ~3 ]0 x0 _9 ], A2 e% j8 M
没有 这个程序用来删除多余的图元。程序特点,可以删除完全重合的直线、多段线、光滑曲线(程序中设置了4位小数,当坐标数值四舍五入精确到4位小数时认为重合),删除位置重合的文字,删除位置和半径相同的圆,删除位置和块名相同的块。
发表于 2008-12-6 15:17:15 | 显示全部楼层 来自: 中国四川成都
给你一个思路:
( D  z0 u5 Q8 e  ?    处理"LINE"时,增加一个判定函数,用于首先判定直线L1的两个端点是否在直线L2上面;若在,再判定直线L1的两个端点是否在直线L2的两个端点以内,则返回直线L1,否则返回直线L2。
7 r+ r4 I( \& A# Q) Y! B4 O# D    判定直线L1的两个端点是否在直线L2上面:  G* m/ ]3 t$ b; q' d
       可以逐点计算直线L1的两个端点到直线L2的距离是否小余你的精度要求,若小余,则判定为该点在直线L2上,否则,该点不在直线L2上。

评分

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

查看全部评分

发表于 2008-12-6 22:42:04 | 显示全部楼层 来自: 中国台湾
  1.     5 ]" s9 A: H! I! Q. \
  2.     (defun dxg (code ele)
    * @: E% c/ u6 x& {2 P
  3.       (cdr (assoc code (entget ele)))
    " w# ]0 t2 T7 L) B) Y% t/ ]5 b1 @
  4.     )' C* k* B- d- t6 t+ \
  5.       
    0 G7 _" x- Y# W* n, E

  6. 0 A2 x0 g# w2 E4 o; ]! H1 v# n  M
  7.     (defun vpt (a b c)
    ) P1 c  m+ \5 I7 _) Q  P
  8.        (equal
    ; C# P1 d8 i9 V" k! X# I  P) b' N8 x
  9.          (if (caddr a) a (reverse (cons 0.0 (reverse a))))
    $ l/ U9 C; l+ _- o
  10.          (if (caddr b) b (reverse (cons 0.0 (reverse b))))4 _1 o* D# n& t3 M
  11.          (expt 0.1 c)( v9 H5 |; d& f# K
  12.        )! E$ u1 D; B- E4 Z
  13.     ). R5 j3 O- B% p; i* i1 G
  14.    
    * a8 z& E! z( G4 y
  15. ;;; =========== for Test only =========================================6 d0 |$ D) _$ i# Q0 s
  16. ;;; 删除线段内的短线
    0 y/ y4 Y- x1 E2 q# V
  17. ;; ssen = Line Selection
    $ E: E+ Q# h( g+ d1 h- D; A
  18. (setq nn (sslength ssen))$ g4 h7 |( {' a5 S, x
  19. (cond
    ) e6 D8 U! M. V5 e1 f
  20.   ((< nn 2) nil)                        ; Nothing to do
    6 F' Q. M+ y) [) N: j2 R# v8 p3 u! G
  21.   (T
    , @5 P) t! L! S3 F$ x; B
  22.    (princ "\nProceeding with Line ....."
    , v* w. N* X" p
  23.    (while (setq ee (ssname ssen (setq nn (1- nn)))) ) |5 s/ g. k1 O; E9 @. l0 p6 ^
  24.      (cond) K+ E$ B$ _* O. B/ i
  25.        ((null (entget ee)))                ; bypass
    * m9 O3 h) F# s1 F  t
  26.        (T
      m! g2 I+ m2 m8 N2 c, |* W5 f
  27.         (setq p1  (dxg 10 ee)! N* l/ t4 d* b, v
  28.               p2  (dxg 11 ee)$ W6 K( k( x  o, r& @% o3 e' z9 w, W' r
  29.               v1  (angle p1 p2)5 b5 U) e. ?3 s; q
  30.               e1d (cdddr (cddr (entget ee)))) Q. K8 m, [2 P5 V9 P: L4 x
  31.               sc  (ssget "f" (list p1 p2) '((0 . "LINE")' ~5 L+ E: Y8 m" b+ S; T/ S
  32.               sum (if sc (sslength sc))& r6 y$ B* }. f; n1 Q$ Y! D
  33.         )
    5 w0 b+ [( n& x& |: A; I, H' ?8 P( z
  34.         (while (and (entget ee) (> sum 0))  S/ x  n& |5 x! u4 ], {( x
  35.           (setq e1 (ssname sc (setq sum (1- sum)))), I: D( C* f, j/ {. {+ e  O9 w+ V9 E
  36.           (cond
    5 y- q1 M, v& N
  37.             ((eq e1 ee) nil)                ; Itself
    $ E! `1 c5 A8 H
  38.             ((equal (cdddr (cdddr (entget e1))) e1d)8 R, i8 I3 u8 K) s  d) I7 d
  39.              (entdel e1)
    % B4 N+ ^2 R3 T$ x
  40.             ), [* V* `6 H) p, u6 E
  41.             (T5 s8 F1 I1 Z- e  V
  42.              (setq p3 (dxg 10 e1)( F. |' v( w+ M# a- a( h
  43.                    p4 (dxg 11 e1)& \; c9 v2 E: F' N  s, f
  44.                    v2 (if (vpt p1 p3 5)
    8 r; A! v! [  _1 [0 Q) Z( q, ^
  45.                         (angle p2 p3)
    # D( \8 o- ^7 p; a# a
  46.                         (angle p1 p3)
    - H. F. G3 [3 K5 h3 O
  47.                       ): u0 B3 L: @9 V- |" g
  48.              )
    , x5 x) Q, Q( j, c# q
  49.              (if (< (rem (abs (- v1 v2)) pi) 0.0001)
    + z  e# l( n7 _. k. c: n9 _
  50.                (if (< (distance p3 p4) (distance p1 p2))
    ( Y* Z0 m  G% u* N4 r0 Z
  51.                  (entdel e1)* f. r7 G( P+ K+ A+ S& Z6 _9 D
  52.                  (entdel ee)8 |; e9 u6 p: S6 o" ~7 E, D
  53.                )
      O( P6 k% P, f6 z+ R- U
  54.              )
    + \- {* A3 J5 g) I# ]; H
  55.             )
    8 ?9 O% M+ c% E, ]
  56.           )
    0 V, l4 n# A$ Z& K, s# _' V
  57.         )8 ?5 z0 r3 q2 r3 n% \% Y/ X
  58.        )
    5 M3 O. S: s/ _! S/ M
  59.      )% d% Q# J8 l- ^
  60.    )
    & I" P( t- l8 T
  61.   )
    & r  ]: B8 K$ ~3 E
  62. )
    0 V- A" u- M0 D

  63. * T) b& g; @  i2 Y% J( H/ W; D$ ]
复制代码

  t1 t3 n  b) A' Z$ j: x. ^0 f[ 本帖最后由 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 )

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