QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
   在网上找的一个删除重复图元的LISP程序 加载使用后发现对重复线段的删除有时候无效 而且线段内部的线段无法删除 就是说如果一条线段长100一条长50 使用这个删除不掉!!请高手帮忙修改下!!
4 X) D4 E$ I0 j& [: Z/ X 以下是程序原文:(附件内容是程序源文件)
3 K( a' l! y: z; R$ W2 G) k(defun c:ere(); c; R7 F9 g5 K. X! ~+ s2 [
  (setq m0 (getpoint "\n左下角:"))! B* @" w! V4 l) r
  (setq m1 (getpoint "\n右上角:"))# L9 v0 a! u" x3 T) p: m0 U
  (setq x0 (car m0) x1 (car m1) y0 (cadr m0) y1 (cadr m1) m2 m0 x2 x0 y2 y0)6 {/ N2 I7 b2 ^' g+ Q
  (while (< x2 x1)
! v  G5 M0 X+ N    (setq y2 y0 m3 m2)
- e) X- O' E6 j, @! ^+ \: N& |    (while (< y2 y1)
! q3 E+ ^1 x8 q7 H% r      (setq m4 (polar m3 0.785398 70.72))* }$ `. P/ w5 T9 O3 Z, V7 V% }+ W
      (setq a (ssget "_C" m3 m4))
! I9 x% P* V2 A) F% G8 Y      (if (not a)(setq i 0)(setq i (sslength a)))8 S2 J& p' N) K4 W1 q
      (while (> i 1). ]2 ?9 s# Z- C# d
        (setq j (- i 1))3 w& e# Y8 Y" ]& |1 H
        (setq b (ssname a (setq i (1- i)))) ;(setq b (ssname a 1))
/ z; M; }1 E* j        (setq c (entget b))9 U: W! h9 D6 ?3 P+ ^) Y" T
        (setq d (cdr (assoc 0 c)))
, H6 m4 v& X% s0 y( s4 q6 J        (while (> j 0)) T1 _3 f2 W2 ?2 f0 H8 h: w
          (setq b1 (ssname a (setq j (1- j))))5 E1 |! A3 n* L; _9 J
          (setq c1 (entget b1))
: q  O# e- R$ K6 Q1 Q& A: l; B2 P          (setq d1 (cdr (assoc 0 c1)))$ Z# C' p8 \! q# C
          (if (= d d1)
: J  w0 P3 P5 X/ \5 N. r            (if (= d "LINE")
$ _5 c; ~9 i' ?$ n              (if (and (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))5 {. }0 D/ c  U* |
                       (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))
, U2 y; N1 u3 G                       (= (rtos (cadr (assoc 11 c)) 2 4)(rtos (cadr (assoc 11 c1)) 2 4))9 `$ c3 W( O5 M4 |- r5 E! d
                       (= (rtos (caddr (assoc 11 c)) 2 4)(rtos (caddr (assoc 11 c1)) 2 4))* N, e) ^3 A7 u' U- `# E$ b
                  )(command "erase" b1 "")
9 {2 I' }" p' X- }5 e( B              )
! u0 J$ E  P- o: D0 y              (if (= d "INSERT")! z: ^  Y( e# O! V
                (if (and (equal (assoc 2 c) (assoc 2 c1))
9 M. J' Z8 D, ]' |# L                         (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))
( E( c: N9 l7 A" k3 Q/ a                         (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))1 L7 S, ^7 n! h1 \6 z
                    )(command "erase" b1 "")8 y/ y/ ?. O& s3 M8 G) V
                )6 {" s2 w  Y$ C$ o1 |8 ?  H. ]
                (if (= d "LWPOLYLINE")
! i$ u( ^: m" ~5 A                  (progn
9 }7 d3 ^: E- z4 B                    (setq e (cddddr c) e1 (cddddr c1) e (cddddr e) e1 (cddddr e1))( Q2 G& s9 G& a- B
                    (while (and e e1)
* _1 k' F; ?% |, Z                      (progn . R: y+ Y. n8 O! O
                      (setq f (car e) f1 (car e1) e (cdr e) e1 (cdr e1))
) V; |) d0 V# T% x4 u3 ^                      (while (and e (/= (car f) 10))(setq f (car e) e (cdr e)))
$ Q" M$ R+ m' J3 q# H                      (while (and e1 (/= (car f1) 10))(setq f1 (car e1) e1 (cdr e1)))* Z5 J+ q  G& c
                      (if (or (/= (rtos (cadr f) 2 4)(rtos (cadr f1) 2 4))+ f/ Z: u5 m# F- g+ s$ S- b
                              (/= (rtos (caddr f) 2 4)(rtos (caddr f1) 2 4)))(setq e1 nil)
' h% p/ {' ?/ D                        (if (not e1) (command "erase" b1 "")(if (not e)
  l+ M( {8 f. W5 L                           (progn (command "erase" b "")(setq b b1 b1 nil))))
+ Z1 e# W# }9 L( Z7 }4 O+ S                  ) ) ) )          ! h- F6 l0 b) ^$ G) K
                  (if (= d "SPLINE")
, O4 k: d6 r8 F9 \3 H) b* Y7 H1 p                    (progn
. ]; H: g8 b6 c  ^+ a/ z                      (setq e (cddddr c) e1 (cddddr c1) e (cddddr e) e1 (cddddr e1))
& [- n7 E. H" v8 S# x                      (while (and e e1)
' B( N8 _6 d  [6 L, a9 Z* F3 I                        (progn 3 x% Z$ l; m- O3 l  w4 P
                          (setq f (car e) f1 (car e1) e (cdr e) e1 (cdr e1))
4 B1 u) \8 P* y" i; ]/ ^2 x                          (while (and e (/= (car f) 10))(setq f (car e) e (cdr e)))* y3 S! X: u# n6 i5 ]
                          (while (and e1 (/= (car f1) 10))(setq f1 (car e1) e1 (cdr e1))): X$ V  y; Q4 [; A8 T0 q7 {9 o3 M3 C7 E
                          (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)
6 y9 P6 R1 S! `! X/ R                            (if (not e1 ) (command "erase" b1 "")(if (not e)(progn (command "erase" b "")(setq b b1 b1 nil))))
0 b3 @" E* V' Y                    ) ) ) )         
' E$ p# D7 j! x6 x                    (if (= d "TEXT")
4 \& Q3 w' `9 o4 Y) C                      (if (and (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))
( J; b( l2 V1 N' X7 k" B                               (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))2 Y1 N% r. \) @" B
                          )(command "erase" b1 "")- n- c; Q2 O1 c. M- W% e: f
                      )/ Z" d; P/ d2 Z4 F0 E- n3 v
                      (if (= d "CIRCLE")2 r$ }5 I( i4 h$ B( O5 \
                        (if (and (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))
# t# p' c: f& w                                 (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))9 a3 a9 Y8 O8 }2 J# B! ^) B4 `- K; {( {8 ]
                                 (= (rtos (cdr (assoc 40 c)) 2 4)(rtos (cdr (assoc 40 c1)) 2 4))9 d! l* b, E. K. U* ?
                            )(command "erase" b1 "")
( J3 r, z/ K1 _% h; h      ) ) ) ) ) ) ) ) ) )
' d1 s) `# T4 F      (setq m3 (polar m3 1.5708 50.0) y2 (+ y2 50.0))
8 r4 D$ f1 D& B8 u  Z    )
& z8 Y4 d4 y' C" i, X0 t: N    (setq m2 (polar m2 0.0 50.0) x2 (+ x2 50.0))
3 C1 h0 V  }- C" m  )3 n) ]5 P' I4 Z2 ~% B4 j8 r
  (princ)  y! a9 L7 u5 I+ z1 v. S6 M4 L
)" g5 F4 l' N8 {4 I+ o: b/ `
(princ "\n\"ere\"启动")
  Y: i. t2 p8 l9 j) D
. ^, d; Y, {* r' _' A[ 本帖最后由 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/ `" G8 U8 x8 O+ R2 A9 z
有没有中间使用变量得说明?做什么用得?
" w4 |2 r3 e" H& V7 F2 G
没有 这个程序用来删除多余的图元。程序特点,可以删除完全重合的直线、多段线、光滑曲线(程序中设置了4位小数,当坐标数值四舍五入精确到4位小数时认为重合),删除位置重合的文字,删除位置和半径相同的圆,删除位置和块名相同的块。
发表于 2008-12-6 15:17:15 | 显示全部楼层 来自: 中国四川成都
给你一个思路:8 p: U6 R- y* l+ v) }/ k$ K& n0 ~2 ]
    处理"LINE"时,增加一个判定函数,用于首先判定直线L1的两个端点是否在直线L2上面;若在,再判定直线L1的两个端点是否在直线L2的两个端点以内,则返回直线L1,否则返回直线L2。2 u/ W" v4 e5 C# L1 c4 v
    判定直线L1的两个端点是否在直线L2上面:
2 g( d8 f' [+ r4 F/ O# r       可以逐点计算直线L1的两个端点到直线L2的距离是否小余你的精度要求,若小余,则判定为该点在直线L2上,否则,该点不在直线L2上。

评分

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

查看全部评分

发表于 2008-12-6 22:42:04 | 显示全部楼层 来自: 中国台湾
  1.    
    6 ^7 i3 Z+ r9 N) R  ]) h8 i" O
  2.     (defun dxg (code ele)
    6 P" @5 j- |; J( @& ]& y
  3.       (cdr (assoc code (entget ele)))6 O' M0 W, G2 \9 l* _1 @
  4.     )
    5 p5 }& x- f7 U
  5.        8 Z. R# ~1 x0 \& W$ L5 u
  6. 6 {! r) [5 t+ L. a
  7.     (defun vpt (a b c)
    5 w( [( k3 ^4 C
  8.        (equal( t: B, \2 H* Y
  9.          (if (caddr a) a (reverse (cons 0.0 (reverse a))))
    ' T/ W6 |( e: v' L' j
  10.          (if (caddr b) b (reverse (cons 0.0 (reverse b))))8 V' i  s& l! E
  11.          (expt 0.1 c)
    + J0 K7 r! i4 ^" G3 M
  12.        )
    0 [) k1 j! s+ X2 v
  13.     )7 S; A+ x2 u+ `# p* T2 T5 }
  14.     , o2 ^& P0 o/ ]( W
  15. ;;; =========== for Test only =========================================) p6 A. @, y, c  i
  16. ;;; 删除线段内的短线( B7 R0 i0 b: a- B$ c
  17. ;; ssen = Line Selection" E/ k* y( s/ f0 Q) a1 h
  18. (setq nn (sslength ssen))
    / @* \: T5 R( z& |
  19. (cond
    ; \7 l" f- t0 G+ g* l
  20.   ((< nn 2) nil)                        ; Nothing to do
    : I8 l' S9 W& i1 R
  21.   (T! h% M# W; `- h
  22.    (princ "\nProceeding with Line ....."+ x# e' O* t/ I
  23.    (while (setq ee (ssname ssen (setq nn (1- nn)))) + M: O0 y. z7 }1 y
  24.      (cond
    6 S4 [# P9 T" h: i+ H: ]* r
  25.        ((null (entget ee)))                ; bypass7 U5 F" @+ O& h( x6 o
  26.        (T- N* n! s7 A4 T; B
  27.         (setq p1  (dxg 10 ee)
    & m# ]( o1 C1 E  n7 ?: ]1 R# j/ _
  28.               p2  (dxg 11 ee)( D! c$ t) Z" k9 h. z) C9 f
  29.               v1  (angle p1 p2)% e* B# e* \: G+ _
  30.               e1d (cdddr (cddr (entget ee)))
    + V, P! ^/ e4 Z) |+ I$ q
  31.               sc  (ssget "f" (list p1 p2) '((0 . "LINE")
    7 ?) R$ D1 w! x! z0 [3 [
  32.               sum (if sc (sslength sc))- f; D+ s) Q3 e. a; F" Q: J7 T
  33.         )
    * t" o! Q7 K6 f; }
  34.         (while (and (entget ee) (> sum 0))2 ~6 a$ E; m* d
  35.           (setq e1 (ssname sc (setq sum (1- sum))))
    ' G( O* P, c+ A) O: h1 n" E+ X5 U2 W) z
  36.           (cond
    3 O# S" ^" @. a
  37.             ((eq e1 ee) nil)                ; Itself
    , s' S/ w; Q: V; Y2 K
  38.             ((equal (cdddr (cdddr (entget e1))) e1d)5 ], w8 }6 D; ]
  39.              (entdel e1)' S# n7 X* e, }3 R
  40.             )
    6 A' d* F3 E' L* k( g
  41.             (T; ]5 k3 V5 W8 U/ g) `' z
  42.              (setq p3 (dxg 10 e1)  A& K$ Y! u. e, f7 g
  43.                    p4 (dxg 11 e1)
    0 @1 \' J- Y# E3 k1 E9 W9 S# s
  44.                    v2 (if (vpt p1 p3 5)! e0 ?; u4 L6 A% C1 C
  45.                         (angle p2 p3)
    / k4 C! Q/ ~# C7 u2 |
  46.                         (angle p1 p3). s/ B* t& y4 z: {3 Y" Y1 \
  47.                       ), p- {) C3 L8 ?& z9 u% j" K
  48.              )4 W3 r, X8 ^# @! O; a% ~
  49.              (if (< (rem (abs (- v1 v2)) pi) 0.0001), `7 w0 O8 u, M5 W* @) `) }
  50.                (if (< (distance p3 p4) (distance p1 p2))- N% H: _6 e& O4 F: n' c
  51.                  (entdel e1)
    ) h; t* q% H' o2 Y" O8 b
  52.                  (entdel ee)2 `  P# E. U# I' `* S& ?
  53.                )" `8 O$ ?  `- t+ U7 u6 P7 o) L
  54.              )
    % w, H* U: q: C& l
  55.             )
    : q" y6 ]) T3 Z) ]6 k& e+ U
  56.           )+ `, B$ T3 Q, E" p0 x; z
  57.         )
    5 \2 g! ^- R9 J
  58.        )
    8 E% d4 c3 q( B& l( g9 F% @
  59.      )6 u, @9 O4 V- Z% c3 C0 u
  60.    )
    / r7 _/ C* i9 C, I. R& f- _
  61.   )9 |/ C5 O& n( l" N) {! @
  62. )
    ( W+ \+ T9 d3 @7 U

  63. . H4 w1 Y$ n) \: u6 ?
复制代码

6 F& e5 H8 m1 |/ z- r. `[ 本帖最后由 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 )

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