QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
10天前
查看: 1817|回复: 5
收起左侧

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

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

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

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

x
   在网上找的一个删除重复图元的LISP程序 加载使用后发现对重复线段的删除有时候无效 而且线段内部的线段无法删除 就是说如果一条线段长100一条长50 使用这个删除不掉!!请高手帮忙修改下!!  n  N9 W& D5 e& O
 以下是程序原文:(附件内容是程序源文件)7 Z1 }" k( X' n: ]" i# f2 {) Y
(defun c:ere()
) Q* W0 W: r& f% u# I5 e  (setq m0 (getpoint "\n左下角:"))
* D' D4 {- e% r+ y" t( N  (setq m1 (getpoint "\n右上角:"))
! m$ T: v% M+ ^2 p7 |  (setq x0 (car m0) x1 (car m1) y0 (cadr m0) y1 (cadr m1) m2 m0 x2 x0 y2 y0)
1 h' q3 o- Y! v2 N7 P. T  (while (< x2 x1)
1 ~8 t! I. ^" D5 ]' D7 Y7 e. C# ?    (setq y2 y0 m3 m2)
' i) |$ n1 b. B! V: `1 H    (while (< y2 y1)
6 L& D- m& Z3 X      (setq m4 (polar m3 0.785398 70.72))
7 p' B7 s  J( @- x      (setq a (ssget "_C" m3 m4))4 H; d5 D( J5 N
      (if (not a)(setq i 0)(setq i (sslength a)))* F8 f& E0 D3 m, D# c2 f8 _( x
      (while (> i 1)" v  h; D3 k- V
        (setq j (- i 1))
8 i9 j8 ^8 M9 J5 ~- m3 E/ I3 G        (setq b (ssname a (setq i (1- i)))) ;(setq b (ssname a 1))
" Y, k# H; b5 g0 m8 a: ]        (setq c (entget b))
: W6 f/ Q3 b) U+ L" k+ N        (setq d (cdr (assoc 0 c)))$ `3 I0 y% J) n9 a! m6 k* T
        (while (> j 0)
0 p( F, m) [1 Q% G          (setq b1 (ssname a (setq j (1- j)))), z: o6 {+ a) ~+ E6 T% F
          (setq c1 (entget b1))7 ]: Y  ]" e4 X( J: i# U( `
          (setq d1 (cdr (assoc 0 c1)))
  W# ~' `1 I7 I) [+ t          (if (= d d1)
% T' ]) @/ [, c3 S6 C& H% R            (if (= d "LINE")
- m; T1 n2 U8 d( w2 F              (if (and (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))
/ V8 e8 r* Y) M4 s" h9 y                       (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))
  ]& w: Z( Q" X( h                       (= (rtos (cadr (assoc 11 c)) 2 4)(rtos (cadr (assoc 11 c1)) 2 4))2 ?5 W- s+ G; i" p9 _8 [
                       (= (rtos (caddr (assoc 11 c)) 2 4)(rtos (caddr (assoc 11 c1)) 2 4))  A2 w* P/ `( K  e
                  )(command "erase" b1 ""), A4 [! B1 |4 ?- _. {5 m% j! p
              )0 n: i8 {) @* c* C6 `/ _- K6 m
              (if (= d "INSERT")1 i, `4 h0 N4 a( M
                (if (and (equal (assoc 2 c) (assoc 2 c1))
, W6 c5 J; w( K/ q$ Q9 G  s                         (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4)); U- K3 S+ W1 \
                         (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))
1 E, @% c. X1 \9 e                    )(command "erase" b1 "")
/ w) p! y8 ~8 a4 H                )
8 |) p0 P& u: H1 o  j: k5 o$ d                (if (= d "LWPOLYLINE")  t) _; F0 a, d- P6 b2 p# E
                  (progn4 A" m' \  B7 a* ^) |( W% [
                    (setq e (cddddr c) e1 (cddddr c1) e (cddddr e) e1 (cddddr e1))% o! O( f9 ]+ h5 U, p# Y
                    (while (and e e1)$ N5 e3 p# I- l
                      (progn 2 i3 A- D4 U: g3 K
                      (setq f (car e) f1 (car e1) e (cdr e) e1 (cdr e1))9 z& {$ T# ^0 B. ^/ b
                      (while (and e (/= (car f) 10))(setq f (car e) e (cdr e)))
2 C9 \; b$ W# O                      (while (and e1 (/= (car f1) 10))(setq f1 (car e1) e1 (cdr e1)))% n4 ~4 q, v; C
                      (if (or (/= (rtos (cadr f) 2 4)(rtos (cadr f1) 2 4))
. n2 L7 {: l0 Z9 G1 p" V                              (/= (rtos (caddr f) 2 4)(rtos (caddr f1) 2 4)))(setq e1 nil)5 u* U7 z+ x. K' q: W0 x
                        (if (not e1) (command "erase" b1 "")(if (not e)
2 p# i# r4 q- A) O  M                           (progn (command "erase" b "")(setq b b1 b1 nil)))); [4 \  k& v8 W& r% H" M
                  ) ) ) )          4 a" K5 Z. |- d  e& u! r
                  (if (= d "SPLINE")% W) f; H# I: C. b! n
                    (progn
3 l/ ~4 X& X- H! K3 m( C                      (setq e (cddddr c) e1 (cddddr c1) e (cddddr e) e1 (cddddr e1))
, Z. g5 P# ]) \+ V8 @. |6 ]                      (while (and e e1)9 d3 i3 [. V$ z: p6 O
                        (progn
! {+ p$ {8 N0 g* y, m9 Z( U/ A                          (setq f (car e) f1 (car e1) e (cdr e) e1 (cdr e1))
3 }( S+ f: Z/ H5 B2 w                          (while (and e (/= (car f) 10))(setq f (car e) e (cdr e))); ^! w) ^) {: x% r1 L$ A9 s* F' P
                          (while (and e1 (/= (car f1) 10))(setq f1 (car e1) e1 (cdr e1)))
2 T$ {$ h$ H! q4 v1 _                          (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)7 E- _$ {4 E2 X% g
                            (if (not e1 ) (command "erase" b1 "")(if (not e)(progn (command "erase" b "")(setq b b1 b1 nil))))
8 r+ Q  ]; Z. `1 S$ |                    ) ) ) )         
: ^3 r& o5 @1 M% k* E                    (if (= d "TEXT")1 w/ O5 v6 K' }, h. Z+ X8 E
                      (if (and (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))
2 U- _1 @% E0 O9 |, m                               (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))
. z& c, z+ X1 g7 r                          )(command "erase" b1 "")- _% Z' B1 c' F$ j& W- [. {
                      )* N2 e% L! e/ n4 P1 U0 \) I( E- f
                      (if (= d "CIRCLE")( T; H  F3 x  \. s
                        (if (and (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))
) D3 v$ ]+ ~, W( x5 U. q                                 (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))9 a, f6 w2 {& C5 T
                                 (= (rtos (cdr (assoc 40 c)) 2 4)(rtos (cdr (assoc 40 c1)) 2 4))8 W9 f1 w1 `7 U& k8 T3 ]) P0 b+ v
                            )(command "erase" b1 "")
9 P* W! ]8 Z1 s. i      ) ) ) ) ) ) ) ) ) )
" ]) S9 f8 u7 X& b  Z2 N" i      (setq m3 (polar m3 1.5708 50.0) y2 (+ y2 50.0))
4 i0 T8 {1 }% Y    )
1 B/ O  u$ ]2 D! ]" z  E    (setq m2 (polar m2 0.0 50.0) x2 (+ x2 50.0))! `; B' @7 b, F4 q( X2 B7 y
  )$ t, Z6 Z7 E2 r2 s4 r
  (princ)9 E+ m4 S4 ]! l
)" t- ~# a, d% w% ~+ m# }7 B0 a
(princ "\n\"ere\"启动")
( P' m2 S1 x5 \, m* ^- R& Y6 t8 x, p9 j* W2 }
[ 本帖最后由 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 X3 q3 V+ q1 _3 B8 F. U有没有中间使用变量得说明?做什么用得?

% k% E. f4 W# W没有 这个程序用来删除多余的图元。程序特点,可以删除完全重合的直线、多段线、光滑曲线(程序中设置了4位小数,当坐标数值四舍五入精确到4位小数时认为重合),删除位置重合的文字,删除位置和半径相同的圆,删除位置和块名相同的块。
发表于 2008-12-6 15:17:15 | 显示全部楼层 来自: 中国四川成都
给你一个思路:
6 N- G. g; d( {( j    处理"LINE"时,增加一个判定函数,用于首先判定直线L1的两个端点是否在直线L2上面;若在,再判定直线L1的两个端点是否在直线L2的两个端点以内,则返回直线L1,否则返回直线L2。
5 G! s$ |$ l3 r' C* g. r, W- s    判定直线L1的两个端点是否在直线L2上面:
$ d! T; T- u2 @( L6 W5 e- m       可以逐点计算直线L1的两个端点到直线L2的距离是否小余你的精度要求,若小余,则判定为该点在直线L2上,否则,该点不在直线L2上。

评分

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

查看全部评分

发表于 2008-12-6 22:42:04 | 显示全部楼层 来自: 中国台湾
  1.    
    % K+ c/ I) h" N& U) k
  2.     (defun dxg (code ele)- @% Q  l5 e1 Q) C0 z2 e. g& {
  3.       (cdr (assoc code (entget ele)))
    / U. N) g! @" N9 A; t; x
  4.     )
    ) \* q! x3 [- l+ }* ^
  5.       
    " U( J/ ?# Z4 c

  6.   @) o% S) b$ i- c4 E9 u
  7.     (defun vpt (a b c)
    * A/ G6 `2 D" i8 O) B3 q0 v
  8.        (equal
    + Y1 W2 M- `/ y5 J) w
  9.          (if (caddr a) a (reverse (cons 0.0 (reverse a))))+ O# V& b! ?- Y
  10.          (if (caddr b) b (reverse (cons 0.0 (reverse b))))' k( V: U1 s1 O* x
  11.          (expt 0.1 c)5 k$ B+ D; c2 ^
  12.        )
    ( M* B2 O! e- k5 `/ ~+ d  v
  13.     )
    ( e: c( c: }' [* A1 T. L$ E: {
  14.    
    ' N" X( J4 ^/ f
  15. ;;; =========== for Test only =========================================
    : `. v" L: T0 J& Z  j" R
  16. ;;; 删除线段内的短线5 @7 j. s7 W- R% c# s0 F: T) S  W& k
  17. ;; ssen = Line Selection: S  S1 f9 z+ V
  18. (setq nn (sslength ssen))& `8 q+ o" }$ \
  19. (cond/ U$ N+ N3 J5 j$ |% \" W" A. i
  20.   ((< nn 2) nil)                        ; Nothing to do
    " W' n5 Z7 @8 r1 P5 B
  21.   (T
    8 N1 j8 }1 c! y6 y) k7 \7 u
  22.    (princ "\nProceeding with Line ....."
    , G' L5 X5 t- z- O" r8 Q  U7 s! T+ Y
  23.    (while (setq ee (ssname ssen (setq nn (1- nn)))) 2 q2 h/ B3 s( i, A" ^  q, `' a
  24.      (cond
    5 |! x4 f% i# l, s+ r6 F5 d/ `
  25.        ((null (entget ee)))                ; bypass5 ^" h% w  g, q- J" q, m
  26.        (T  P  j8 |( E0 e# u8 u" \) I6 K' {
  27.         (setq p1  (dxg 10 ee)
    - V- Q4 q* |9 p9 V+ \
  28.               p2  (dxg 11 ee): ~) ~! Z& f, \* `! v1 @9 m1 l* I
  29.               v1  (angle p1 p2)$ {: W5 W8 r# \% ~
  30.               e1d (cdddr (cddr (entget ee)))- f. K2 z6 p5 t- J: Y8 |
  31.               sc  (ssget "f" (list p1 p2) '((0 . "LINE")+ j/ D& ?1 q& b0 R3 K. W
  32.               sum (if sc (sslength sc))% y$ x5 \& @) P+ Z  B% Z* M
  33.         )* ~8 [7 g; d$ e/ S. F
  34.         (while (and (entget ee) (> sum 0))! l: e: A2 L+ b6 p! ^% [+ Y
  35.           (setq e1 (ssname sc (setq sum (1- sum)))); c7 o8 u/ J' F
  36.           (cond( b2 m9 m' T+ _" G
  37.             ((eq e1 ee) nil)                ; Itself
    3 P: t: {8 e3 ^0 J3 Y( v3 D
  38.             ((equal (cdddr (cdddr (entget e1))) e1d)
    * e. P" {* o" k  r' J
  39.              (entdel e1)
    ! i1 F8 a3 Z& ~# m4 _9 r" Q. i
  40.             )
    4 {+ `# F' Q0 R# H0 L% R; l
  41.             (T0 g& f! `% K" @
  42.              (setq p3 (dxg 10 e1)7 F1 l' S, v5 j9 |' `
  43.                    p4 (dxg 11 e1); c$ q9 h% s: K' n; }& l
  44.                    v2 (if (vpt p1 p3 5)' N1 ]* q. I- x5 V; z2 Z7 M
  45.                         (angle p2 p3)
    * F4 [! t( p" i9 v. d2 ?+ |4 B; H
  46.                         (angle p1 p3)5 m5 _, l* o% ^7 A+ A% ~( h& d! A! G
  47.                       )
    3 T8 \2 O4 n& b' ]
  48.              )
    ! I6 c# F! M" d* y) [3 a
  49.              (if (< (rem (abs (- v1 v2)) pi) 0.0001)
    ! [3 s" L6 Z* q! ^, ^7 b: N
  50.                (if (< (distance p3 p4) (distance p1 p2))
    9 O7 }# x+ [5 D# j  k
  51.                  (entdel e1): ], c7 t& [: }/ P
  52.                  (entdel ee)
    - w8 {/ t6 i9 G( k! ?" v5 t* z
  53.                )
    , Z% t  l% |1 E4 @1 l  x8 K
  54.              )& H3 p+ y: K7 z& h# F# h  p
  55.             )' r- s2 b& C* V4 T2 b) l5 v) p
  56.           )0 c4 y4 w: ~8 K# X% z# O
  57.         )
    $ X9 T4 r( e- y( D$ G7 H# u# \4 R
  58.        )8 s% @9 y7 S& p0 n* Z1 Q6 ^
  59.      )1 _* W+ ~2 T; W; M2 j
  60.    )
    1 M% b( v* u  b+ W
  61.   )
    8 k% `0 E: N& g- Z4 b; \7 x
  62. )
    # A! F) p: U; I+ _# T

  63. ) d4 J+ p3 ~/ ^: Y3 c) p
复制代码
/ |$ j0 g, a9 R% c6 y% _. O! V
[ 本帖最后由 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 )

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