明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4872|回复: 11

[基础] 如何去除组码中特定点的组码

[复制链接]
发表于 2013-5-15 21:16:40 | 显示全部楼层 |阅读模式
如下图,图形为带圆弧的轻量线,怎么在用ENTGET获得的组码中,把圆弧AB两点的(10)(11)组码找出,并去除掉。

本帖子中包含更多资源

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

x
发表于 2013-5-15 21:20:52 | 显示全部楼层
lwpolyline木有11组码的,您要干啥
发表于 2013-5-15 21:22:13 | 显示全部楼层
多段线没有11组码!
你的意思我理解不了!请直接给出结果示意图!
 楼主| 发表于 2013-5-15 21:30:52 | 显示全部楼层
不好意思,看差了,轻量线是没有(11)
我就想达到以下效果,如果在用标注轻量线程序时,可以使标注不用圆弧的节点。如果是修改轻量线的程序里时,可以用来删除圆弧。

本帖子中包含更多资源

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

x
发表于 2013-5-15 21:42:00 | 显示全部楼层
alwtyp 发表于 2013-5-15 21:30
不好意思,看差了,轻量线是没有(11)
我就想达到以下效果,如果在用标注轻量线程序时,可以使标注不用圆弧 ...

以10组码将entget分段,如果后面跟着的42组码不为0,即为圆弧,再将其去掉,修改70组码为0,以你搜索到的10组码重新建立坐标表,重新组表entmake即可
 楼主| 发表于 2013-5-15 21:46:04 | 显示全部楼层
谢谢,我试试。
 楼主| 发表于 2013-5-16 23:35:43 | 显示全部楼层
x_s_s_1 发表于 2013-5-15 21:42
以10组码将entget分段,如果后面跟着的42组码不为0,即为圆弧,再将其去掉,修改70组码为0,以你搜索到的 ...

不好意思,还是不知道每一个顶点的组码中了(10)以外,还有哪些是必须的,固定的?难道(40)(41)(42)(91)这四个都是不可少的?还会不会有其它的? 还有他们在组码表中的排序位置固定从小 排到大(10->91)的吗?
发表于 2013-5-17 02:26:59 | 显示全部楼层
alwtyp 发表于 2013-5-16 23:35
不好意思,还是不知道每一个顶点的组码中了(10)以外,还有哪些是必须的,固定的?难道(40)(41)(42)(91)这四 ...

给您写了一个去圆弧的,不标尺寸您自己可以搞定的
  1. (defun c:test1 (/ e en lst lstt ent x lsttt n)
  2.   (setq en (entget (setq e(car (entsel "\n选择PL:")))))
  3.   (setq        lst  nil
  4.         lstt nil
  5.   )
  6.   (setq        ent (vl-member-if
  7.               '(lambda (x) (= 10 (car x)))
  8.               (reverse (cdr (reverse en)))
  9.             )
  10.   )
  11.   (repeat (/ (length ent) 4)
  12.     (repeat 4
  13.       (setq lst (cons (car ent) lst))
  14.       (setq ent (cdr ent))
  15.     )
  16.     (setq lstt (cons (reverse lst) lstt)
  17.           lst  nil
  18.     )
  19.   )
  20.   (setq        lst   (reverse lstt)
  21.         lstt  nil
  22.         lsttt nil
  23.   )
  24.   (while lst
  25.     (if        (null
  26.           (vl-remove-if-not
  27.             (function (lambda (x) (and (/= 0 (cdr x)) (= 42 (car x)))))
  28.             (car lst)
  29.           )
  30.         )
  31.       (progn (setq lstt (cons (car lst) lstt))
  32.              (setq lst (cdr lst))
  33.       )
  34.       (progn (setq
  35.                lsttt
  36.                 (cons
  37.                   (cons        (subst '(42 . 0) (assoc 42 (car lst)) (car lst))
  38.                         lstt
  39.                   )
  40.                   lsttt
  41.                 )
  42.              )
  43.              (setq lstt        nil
  44.                    lst        (cdr lst)
  45.              )
  46.       )
  47.     )
  48.   )
  49.   (setq
  50.     lsttt (mapcar '(lambda (x) (apply 'append x)) (cons lstt lsttt))
  51.   )
  52.   (foreach n lsttt
  53.     (entmake (append (list (assoc 0 en)
  54.                            '(100 . "AcDbEntity")
  55.                            (assoc 8 en)
  56.                            '(100 . "AcDbPolyline")
  57.                            (cons 90 (1+ (/ (length n) 4)))
  58.                            '(70 . 0)
  59.                      )
  60.                      n
  61.              )
  62.     )
  63.   )
  64.   (entdel e)
  65.   (princ)
  66. )
 楼主| 发表于 2013-5-17 18:20:47 | 显示全部楼层
x_s_s_1 发表于 2013-5-17 02:26
给您写了一个去圆弧的,不标尺寸您自己可以搞定的

这个程序执行有问题。简单的画一个矩形,再随便倒一个角或是两个角。执行程序后,点占PL后,完全可以得到不同的东西

点评

autocad2006没问题,06以上您完全可以按这个思路走改下(/ (length ent) 4)就行  发表于 2013-5-18 10:08
发表于 2013-5-18 10:15:06 | 显示全部楼层
alwtyp 发表于 2013-5-17 18:20
这个程序执行有问题。简单的画一个矩形,再随便倒一个角或是两个角。执行程序后,点占PL后,完全可以得到 ...

您不要机械的使用代码,主要看思路,2010的组码我看了,有91,如果您仅用于2010的话可以将(repeat (/ (length ent) 4)(repeat 4改为(repeat (/ (length ent) 5)(repeat 5,要通用也很简单,得出每个10组码之间的组码个数列表,中间任意长度均可,再循环就是了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-1 08:55 , Processed in 0.217683 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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