QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
   在网上找的一个删除重复图元的LISP程序 加载使用后发现对重复线段的删除有时候无效 而且线段内部的线段无法删除 就是说如果一条线段长100一条长50 使用这个删除不掉!!请高手帮忙修改下!!
& O& s3 V7 A) ^, W5 b 以下是程序原文:(附件内容是程序源文件)
) O( I, E! l" T* \( F; z5 P( H(defun c:ere()
( ^* x. r1 E7 Y6 [2 T  (setq m0 (getpoint "\n左下角:"))1 _& |2 _, b& {+ i1 I) T1 Y
  (setq m1 (getpoint "\n右上角:"))
, {/ n3 B& V, M  (setq x0 (car m0) x1 (car m1) y0 (cadr m0) y1 (cadr m1) m2 m0 x2 x0 y2 y0)
4 P" t( R* d8 l3 [9 p9 `  (while (< x2 x1)+ p, x1 b! M1 [% f. n6 E: ^0 i
    (setq y2 y0 m3 m2)
7 ]' c1 Y& r) y* |% L  R/ v    (while (< y2 y1)$ t8 b  |7 U0 g* n5 B
      (setq m4 (polar m3 0.785398 70.72))+ b" @* j, v- [, W* `% \0 w$ e
      (setq a (ssget "_C" m3 m4))
, Z+ p( U. j  {" u, b2 V* i      (if (not a)(setq i 0)(setq i (sslength a)))6 ~% b$ L5 ]1 ^) J8 {1 b
      (while (> i 1)
" Z% `+ P6 h; f! N        (setq j (- i 1)): r( s& r3 [% W' M$ S3 |
        (setq b (ssname a (setq i (1- i)))) ;(setq b (ssname a 1))  j1 X# \0 l" I; [+ b0 p3 A) ]$ n
        (setq c (entget b))) D4 d$ v8 u+ @. a  |0 T. n  G# g; `
        (setq d (cdr (assoc 0 c)))
4 z# `9 T- N2 F% x( |        (while (> j 0)
/ s7 k. B' H( @1 i% M9 \5 I          (setq b1 (ssname a (setq j (1- j))))
. T% Q7 u/ V- }, _. i# }* O          (setq c1 (entget b1))
0 R6 u: ^. {5 D7 a: O          (setq d1 (cdr (assoc 0 c1)))
$ I" X* M- H( G9 b          (if (= d d1)$ j0 r6 M6 n! d5 _, C# Y- W; y
            (if (= d "LINE")
; F7 Z1 Q6 c, @4 |, d. p              (if (and (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))2 `" n2 U- r: ?" G! y, c) N
                       (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))/ \1 R9 Z) T# m- ?* d  z
                       (= (rtos (cadr (assoc 11 c)) 2 4)(rtos (cadr (assoc 11 c1)) 2 4))
7 Y% J% p- S  J' g  b                       (= (rtos (caddr (assoc 11 c)) 2 4)(rtos (caddr (assoc 11 c1)) 2 4))
7 D6 [$ x  q- H* t1 C0 p& S                  )(command "erase" b1 "")
$ [. u) k- h, R4 _) v              )
; o  S0 K' r! n2 }8 |0 W  M) B              (if (= d "INSERT"); W9 p9 A' H& ]2 V6 V8 {
                (if (and (equal (assoc 2 c) (assoc 2 c1))
% T# w9 K# ~0 |' E                         (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))3 q+ x( _7 G, X1 J
                         (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))
+ _) M2 O( n5 R( o/ ~                    )(command "erase" b1 "")
, Q) a" Z" O! f* F9 Q                ); I! Z+ j3 j7 D
                (if (= d "LWPOLYLINE")
& Y( {7 o/ ^/ i( k2 D4 [) X                  (progn2 [1 w6 _5 W5 X
                    (setq e (cddddr c) e1 (cddddr c1) e (cddddr e) e1 (cddddr e1))
" G5 u$ x( u9 v$ f  m                    (while (and e e1)0 i8 t* D* U* O$ K: D3 {/ z: X. G
                      (progn 4 }, G. O' e' A2 \, H: C7 D
                      (setq f (car e) f1 (car e1) e (cdr e) e1 (cdr e1))
/ z2 P  Y1 r( i0 j                      (while (and e (/= (car f) 10))(setq f (car e) e (cdr e)))' X0 W2 s- Y  c7 o* E
                      (while (and e1 (/= (car f1) 10))(setq f1 (car e1) e1 (cdr e1)))" C2 q3 ]+ c5 E
                      (if (or (/= (rtos (cadr f) 2 4)(rtos (cadr f1) 2 4)). ]) s7 J* }6 T  a2 r# k
                              (/= (rtos (caddr f) 2 4)(rtos (caddr f1) 2 4)))(setq e1 nil)
9 C5 ^- R$ X: {8 l4 W: Z6 O                        (if (not e1) (command "erase" b1 "")(if (not e)
; x% n  J" D0 ?; R4 h; n1 T                           (progn (command "erase" b "")(setq b b1 b1 nil))))) ^/ n; p: y, ?7 t
                  ) ) ) )          - M# m: W4 x% `& b0 [
                  (if (= d "SPLINE")
9 H3 _* V+ ^' }# c: B                    (progn5 k1 i# B$ h; s8 E0 N  k  b( D
                      (setq e (cddddr c) e1 (cddddr c1) e (cddddr e) e1 (cddddr e1))
& a2 |# @2 [( }# W; V1 U3 v                      (while (and e e1)
5 U$ T& A1 ~2 x6 x                        (progn
0 o6 h: B- K$ d& j/ Y                          (setq f (car e) f1 (car e1) e (cdr e) e1 (cdr e1))
4 T% S4 A! W! Q2 K- Z% `                          (while (and e (/= (car f) 10))(setq f (car e) e (cdr e)))& o% x  d9 ?# u: f4 p0 Q* r' G
                          (while (and e1 (/= (car f1) 10))(setq f1 (car e1) e1 (cdr e1)))5 u- g3 S- k2 z; c. Y! \; _6 d
                          (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)
: a+ ?) y8 `+ K                            (if (not e1 ) (command "erase" b1 "")(if (not e)(progn (command "erase" b "")(setq b b1 b1 nil)))): R% m. L9 h. ^0 s2 k
                    ) ) ) )          $ z$ d! Q/ r* T* V' v1 Z& A
                    (if (= d "TEXT"). K! b- {7 T: u* q
                      (if (and (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))
6 Q7 B) f6 s7 ^2 s                               (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))
) w5 B' T4 m: G3 b: @# Z) y+ h: V                          )(command "erase" b1 "")( V5 ?% c1 j/ o4 `/ c0 e
                      )
3 }8 I; s4 f/ ?, y& E- f: j; _7 w                      (if (= d "CIRCLE")
/ l9 H. G4 B4 |& ~" B/ i; P9 l                        (if (and (= (rtos (cadr (assoc 10 c)) 2 4)(rtos (cadr (assoc 10 c1)) 2 4))+ {$ ]" T# t# g5 x3 r8 m+ J  W
                                 (= (rtos (caddr (assoc 10 c)) 2 4)(rtos (caddr (assoc 10 c1)) 2 4))8 A' Z; }! D; n8 _' E6 Z- S8 P" U
                                 (= (rtos (cdr (assoc 40 c)) 2 4)(rtos (cdr (assoc 40 c1)) 2 4))7 `) r, y& C% @
                            )(command "erase" b1 "")
8 _% c: e6 ?5 ]8 [  ^3 W! I$ V      ) ) ) ) ) ) ) ) ) ). T/ r, r! r. e! Q9 W* I- P+ }
      (setq m3 (polar m3 1.5708 50.0) y2 (+ y2 50.0))
7 E0 n2 _7 e* `! f6 }: `$ Z    )+ q) l+ ^" w# @. j! t4 K
    (setq m2 (polar m2 0.0 50.0) x2 (+ x2 50.0))7 G3 @' n6 d( l* _
  )
! d8 N" f( O, V9 V- I+ K  (princ)
6 ~1 `/ v1 s# o+ Z2 C2 N)
# Q3 I$ `# c  ^$ F1 [3 k(princ "\n\"ere\"启动")  @! r. M5 ?, l. q$ r6 l, V8 x% q& ~" c

) m2 p4 b5 r* |! u6 ~! J+ q[ 本帖最后由 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' F# M7 }' y% v. k0 K
有没有中间使用变量得说明?做什么用得?
. X4 i- b$ u- a6 F6 j; a
没有 这个程序用来删除多余的图元。程序特点,可以删除完全重合的直线、多段线、光滑曲线(程序中设置了4位小数,当坐标数值四舍五入精确到4位小数时认为重合),删除位置重合的文字,删除位置和半径相同的圆,删除位置和块名相同的块。
发表于 2008-12-6 15:17:15 | 显示全部楼层 来自: 中国四川成都
给你一个思路:
9 y4 z9 e) L- n7 i    处理"LINE"时,增加一个判定函数,用于首先判定直线L1的两个端点是否在直线L2上面;若在,再判定直线L1的两个端点是否在直线L2的两个端点以内,则返回直线L1,否则返回直线L2。, u9 C. @4 Q& D9 N5 L
    判定直线L1的两个端点是否在直线L2上面:: |, ^$ o& E! o( G
       可以逐点计算直线L1的两个端点到直线L2的距离是否小余你的精度要求,若小余,则判定为该点在直线L2上,否则,该点不在直线L2上。

评分

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

查看全部评分

发表于 2008-12-6 22:42:04 | 显示全部楼层 来自: 中国台湾
  1.    
    ( Z( s  O2 L0 l
  2.     (defun dxg (code ele)
    * i* x' d, g5 G7 v# P
  3.       (cdr (assoc code (entget ele))); Q. g2 Z, I3 T7 U9 H0 b5 q
  4.     )
    7 M2 A/ a: x6 ^0 m
  5.       
    + f- v1 Z% i% Z

  6. % e0 m8 N+ r# B! ~' Q4 \8 v
  7.     (defun vpt (a b c)
    + D/ n, C! F$ H. U# p
  8.        (equal) w# N. [7 ~  ^0 z
  9.          (if (caddr a) a (reverse (cons 0.0 (reverse a))))1 y$ e# O. U$ e4 B" E+ Y6 j
  10.          (if (caddr b) b (reverse (cons 0.0 (reverse b))))
    & G6 I* W8 H( E# k
  11.          (expt 0.1 c)  l$ U% u+ u5 ?5 a7 L
  12.        )4 r& N& ?* L! \0 l! m
  13.     )
    0 @" K4 ]" q1 @" d1 W% v
  14.    
    3 Z% G$ V% o- V1 G) M3 }) h8 l3 H
  15. ;;; =========== for Test only =========================================
    * ^" b2 u: N# r3 Q$ c( a
  16. ;;; 删除线段内的短线; W) \( u3 t8 {. E
  17. ;; ssen = Line Selection1 T! Y, H  ^( _- A; _
  18. (setq nn (sslength ssen))
    ( R" S- J0 a) c9 o' M+ [
  19. (cond& ^7 r$ D1 V6 T
  20.   ((< nn 2) nil)                        ; Nothing to do7 f( a4 B. q$ U* _
  21.   (T% I0 |$ e- T' D$ Z- @- y* F) z$ D
  22.    (princ "\nProceeding with Line ....."
    7 E. _4 P+ n0 P' w- d
  23.    (while (setq ee (ssname ssen (setq nn (1- nn))))
    # L3 T6 E4 x7 J8 _0 c: Y8 C" Q
  24.      (cond
    ) O3 n) z- ^! l# h7 {2 Q6 p. V6 v8 J
  25.        ((null (entget ee)))                ; bypass
    3 A6 z2 k! c! r2 O# |" {( A& o
  26.        (T4 K6 r$ J- V, C
  27.         (setq p1  (dxg 10 ee)+ f& r4 f4 I9 ?" h/ |6 F
  28.               p2  (dxg 11 ee)# K4 g. f* L/ M, o1 G. `
  29.               v1  (angle p1 p2)
    . n/ K7 p( }: A% U5 R
  30.               e1d (cdddr (cddr (entget ee)))% T8 j, ]3 C" J3 F8 u
  31.               sc  (ssget "f" (list p1 p2) '((0 . "LINE")
    ( D" R8 F4 ?% C( `* S2 }/ ]" Y6 w
  32.               sum (if sc (sslength sc)), ]2 ]6 d6 V( }8 s: \, ~3 w7 d% X
  33.         )
    $ {9 b0 J4 k3 y8 O9 @
  34.         (while (and (entget ee) (> sum 0))
    : k3 Y- w( w8 d$ `& p3 z+ a
  35.           (setq e1 (ssname sc (setq sum (1- sum))))) B. N; H& _7 o# \/ i3 D1 G
  36.           (cond2 R) d* F( x& i% d- A8 _
  37.             ((eq e1 ee) nil)                ; Itself( U7 e; x8 J) y  q1 t# w1 {
  38.             ((equal (cdddr (cdddr (entget e1))) e1d)
    1 H; ^9 J0 V1 o/ t
  39.              (entdel e1)
    " t& I2 I8 D3 u4 q
  40.             )
    0 J: {* \% t* B9 h( L& U
  41.             (T* P1 F7 m- X& O9 Z& G5 X3 T
  42.              (setq p3 (dxg 10 e1)
    ( d9 }9 Y5 j4 V4 w5 p
  43.                    p4 (dxg 11 e1): [& C9 x% j& }1 _! V$ _
  44.                    v2 (if (vpt p1 p3 5)
    2 H5 D- h  L/ D' _; v
  45.                         (angle p2 p3)
    $ D. a- J% B8 Q/ O* r2 L3 I
  46.                         (angle p1 p3)( z" _+ _. |% T" {! f
  47.                       )
    3 [) h: b' L, ?9 ^3 t. p  `
  48.              )% W6 M4 E# W% ^. C
  49.              (if (< (rem (abs (- v1 v2)) pi) 0.0001)
    ; _' e" W/ P$ ~$ m' \8 a4 h, G
  50.                (if (< (distance p3 p4) (distance p1 p2)); X$ K3 p7 x0 @" m0 R
  51.                  (entdel e1)
    . m6 _: K( S' l+ v
  52.                  (entdel ee)
    ( Z! g) N+ K# M0 J/ X
  53.                ). n- s, q2 c+ X: r3 _
  54.              )5 Z. E; g6 e4 y0 |! v' J. T- l
  55.             )
    # B5 q( d7 C- A
  56.           )% K- |' h: Y( S2 a
  57.         )5 ?3 V+ J: M: w) _+ h8 T( }
  58.        )
    $ W* ]& R. x/ e
  59.      )% H0 @# N$ ~3 T5 Z- Q7 p
  60.    )
    0 l* @: F! U) _1 w/ m- P
  61.   )& W7 z6 U4 R: q" {
  62. )1 Q/ O! m& H! K: {; K* J4 u
  63. 6 ~5 C' a* W8 W- y- h' p
复制代码

, x6 t. Z+ t3 C! w$ c[ 本帖最后由 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 )

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