明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 223|回复: 12

[源码] 选择圆,改成闭合多段线

[复制链接]
发表于 5 天前 | 显示全部楼层 |阅读模式
3明经币
;选择圆,从左到右从上到下排序编号
(defun c:tt (/ FN FFILE SS I ENTS EN PT EN1 PTS PTLST STRLST)
        (initget 1 "Y N")
        (setq write (getkword "\n 是否加入前缀 (Y)是 (N)否:"))
        (if (wcmatch write "Y")
                (setq str (getstring "\n 请输入前缀"))
        )
        (if (setq ss (ssget (list (cons 0 "CIRCLE"))))
                (progn
                        (setq i -1 ents nil)
                        (while (setq en (ssname ss (setq i (1+ i))))
                                (setq pt (cdr (assoc 10 (entget en))))                               
                                (setq en1(list (car pt) (cadr pt) (cadr pt) en))
                                (setq ents (cons en1 ents))                               
                        )                       
                        (setq ents (mapcar '(lambda (x) (nth 3 x)) (vl-sort (vl-sort ents '(lambda (a b) (< (car a) (car b)))) '(lambda (c d) (> (cadr c) (cadr d))))))
                        (setq i 0)                       
                        (mapcar '(lambda (x)
                                                                 (setq pt (cdr (assoc 10 (entget x))))
                                                                 (entmakex
                                                                         (list '(0 . "text")
                                                                                 (cons 1 (if (wcmatch write "Y") (strcat str (itoa (setq i (1+ i))))(itoa (setq i (1+ i)))))
                                                                                 (cons 10 pt)
                                                                                 (cons 62 3)
                                                                                 (cons 40 2.5)
                                                                                 (cons 11 pt)
                                                                                 (cons 72 1)
                                                                                 (cons 73 2)                                                                                 
                                                                         )                                                                         
                                                                 )
                                                                 (setq pts (cons pt pts))
                                                         )
                                ents                               
                        )


这个功能是实现选择圆,从左到右从上到下排序编号,求助帮忙改成选成闭合多段线,从左到右从上到下排序编号。

最佳答案

查看完整内容

感谢大佬指导~
回复

使用道具 举报

发表于 5 天前 | 显示全部楼层
llsheng_73 发表于 2024-12-15 13:00
(setq ss (ssget  '((0 . "LWPOLYLINE") (-4 . ">") (90 . 2)  (70 . 1))))
这样过滤是有问题的:因为2 ...

感谢大佬指导~
回复

使用道具 举报

发表于 4 天前 | 显示全部楼层
本帖最后由 煮茗 于 2024-12-15 14:27 编辑
  1. ;选择闭合多段线,从左到右从上到下排序编号
  2. (defun c:tt (/ FN FFILE SS I ENTS EN PT EN1 PTS PTLST STRLST)
  3. (VL-LOAD-COM )
  4.         (initget 1 "Y N")
  5.         (setq write (getkword "\n 是否加入前缀 (Y)是 (N)否:"))
  6.         (if (wcmatch write "Y")
  7.                 (setq str (getstring "\n 请输入前缀"))
  8.         )
  9.         (if <span style="background-color: rgb(255, 255, 255);">(setq ss (ssget  '((0 . "LWPOLYLINE") (-4 . "&") (70 . 1))))</span>
  10.                 (progn
  11.                         (setq i -1 ents nil)
  12.                         (while (setq en (ssname ss (setq i (1+ i))))
  13.                                 (setq pt (find-centerpoint en))         
  14.                                 (setq en1(list (car pt) (cadr pt) (cadr pt) en))
  15.                                 (setq ents (cons en1 ents))                              
  16.                         )                       
  17.                         (setq ents (mapcar '(lambda (x) (nth 3 x)) (vl-sort (vl-sort ents '(lambda (a b) (< (car a) (car b)))) '(lambda (c d) (> (cadr c) (cadr d))))))
  18.                         (setq i 0)                       
  19.                         (mapcar '(lambda (x)
  20.                         (setq pt (find-centerpoint x))
  21.                         (entmakex
  22.                                 (list '(0 . "text")
  23.                                         (cons 1 (if (wcmatch write "Y") (strcat str (itoa (setq i (1+ i))))(itoa (setq i (1+ i)))))
  24.                                         (cons 10 pt)
  25.                                         (cons 62 3)
  26.                                         (cons 40 200)
  27.                                         (cons 11 pt)
  28.                                         (cons 72 1)
  29.                                         (cons 73 2)                                       
  30.                                 )                                
  31.                         )
  32.                         (setq pts (cons pt pts))
  33.                                  )
  34.                                 ents                              
  35.                         )
  36.                                 )
  37.                 )
  38. )

  39. (defun find-centerpoint(en / po-li n y pc)
  40.   (setq entda(entget en)
  41.         ename(cdr(assoc 0 entda)))
  42.   (if(= ename "CIRCLE")
  43.     (setq pc(cdr(assoc 10 entda)))
  44.     (progn
  45.       (setq po-li (vl-remove-if 'not (mapcar '(lambda (x) (if (= (car x) 10) (cdr x))) entda)))
  46.       (setq n(length po-li))  
  47.       (setq y(apply 'mapcar (cons '+ po-li)))
  48.       (setq pc(mapcar '/ y (list n n n)))
  49.       );progn
  50.     );end if
  51.   );end defun


回复

使用道具 举报

 楼主| 发表于 4 天前 | 显示全部楼层
本帖最后由 tangweinbs 于 2024-12-15 09:23 编辑

测试了一下,编号加不上去啊?


我用的是CAD2008  
回复

使用道具 举报

发表于 4 天前 | 显示全部楼层
tangweinbs 发表于 2024-12-15 09:14
测试了一下,编号加不上去啊?

方便图纸文件上传看看不?
你这图片看不到。
回复

使用道具 举报

 楼主| 发表于 4 天前 | 显示全部楼层

测试了一下,编号加不上去啊?


我用的是CAD2008  
回复

使用道具 举报

发表于 4 天前 | 显示全部楼层
tangweinbs 发表于 2024-12-15 09:23
测试了一下,编号加不上去啊?




CAD2008可能版本太老了?
我在2014以上测试成功的。

本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 4 天前 | 显示全部楼层
煮茗 发表于 2024-12-15 10:09
CAD2008可能版本太老了?
我在2014以上测试成功的。

我主要是用2004-2008的CAD,功能就是你测试的这个,我装了一个2010 也没成功
回复

使用道具 举报

发表于 4 天前 | 显示全部楼层
本帖最后由 llsheng_73 于 2024-12-15 13:17 编辑

(setq ss (ssget  '((0 . "LWPOLYLINE") (-4 . ">") (90 . 2)  (70 . 1))))
这样过滤是有问题的:因为2个点也可以闭合,不过有凸度,闭合也不一定70组等于1,70组是按位编码的,只要含有1就是闭合,具体的数值可能有多种,比如1,129(+ 128 1)都是很常见的,也可能有其它数值
(setq ss (ssget  '((0 . "LWPOLYLINE") (-4 . "&") (70 . 1))))

评分

参与人数 1明经币 +1 收起 理由
tangweinbs + 1 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 4 天前 | 显示全部楼层
llsheng_73 发表于 2024-12-15 13:00
(setq ss (ssget  '((0 . "LWPOLYLINE") (-4 . ">") (90 . 2)  (70 . 1))))
这样过滤是有问题的:因为2 ...

感谢大佬指导
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-19 10:20 , Processed in 0.190190 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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