明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 443|回复: 16

[提问] 有没有框选范围内的圆在水平和竖直方向圆心连线的程序?

[复制链接]
发表于 2024-11-10 11:35:35 | 显示全部楼层 |阅读模式
5明经币
机械制图中经常有很多在水平或者竖直的孔,出图时需要用中心线连接在一起,
有没有这样的程序可以框选一下 自动连线,在X或者Y轴 平齐的才连线,其余的不连线
网上找了一个点击圆心连线的,只能一个一个点 感觉不是很方便,想请教大家 有没有这样自动的。。

单点圆心连线的程序~




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

最佳答案

查看完整内容

换个算法,再玩一遍
发表于 2024-11-10 11:35:36 | 显示全部楼层
本帖最后由 xj6019 于 2024-11-10 20:22 编辑
GEGEYANG88 发表于 2024-11-10 17:52
请测试并列圆连线

换个算法,再玩一遍

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2024-11-10 14:18:09 | 显示全部楼层
本帖最后由 xj6019 于 2024-11-10 14:45 编辑

瞎玩一把!!!!!!!!!!!!!!


(defun c:NM (/ canzhaoent cenlst entlst i s1 ss xentlst xlst yentlst ylst)
        (setq cenlst nil)
  (if(and
                         (setq ss (ssget (list '(0 . "CIRCLE"))));
                         (setq i -1)
                 )
                (progn
                        (while(setq s1 (ssname ss (setq i (1+ i))))               
                                (setq cenlst (cons(cdr(assoc 10 (entget s1)))cenlst))
                        )
                        (setq xentlst(vl-remove-if-not '(lambda(x)(= 'ENAME (type x))) (mapcar 'cadr (ssnamex SS)))
                                yentlst xentlst
                        )
                        ;;;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       
                        (while(setq canzhaoent(car xentlst))
                                (setq xlst
                                        (vl-remove-if-not
                                                (function
                                                        (lambda(x)
                                                                (equal(car(cdr(assoc 10 (entget canzhaoent))))(car(cdr(assoc 10 (entget x)))) 0.2)                       
                                                        )
                                                )
                                                (cdr xentlst)               
                                        )
                                )
                                (if xlst
                                        (progn
                                                (setq xlst
                                                        (vl-sort xlst
                                                                (function
                                                                        (lambda (x y)
                                                                                (>(distance  (cdr(assoc 10 (entget canzhaoent))) (cdr(assoc 10 (entget x))))
                                                                                        (distance  (cdr(assoc 10 (entget canzhaoent))) (cdr(assoc 10 (entget y)))))
                                                                        )
                                                                )
                                                        )       
                                                )
                                                (entmakex
                                                        (list '(0 . "LINE")
                                                                '(6 . "CENTER") '(62 . 1)
                                                                (cons 10 (cdr(assoc 10 (entget canzhaoent))))
                                                                (cons 11 (cdr(assoc 10 (entget (car xlst)))))))
                                               
                                                (foreach x xlst
                                                        (setq xentlst(vl-remove x xentlst))
                                                )
                                        )
                                )
                                (setq xentlst(cdr xentlst))
                        )
                        ;;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
                        (while(setq canzhaoent(car yentlst))
                                (setq ylst
                                        (vl-remove-if-not
                                                (function
                                                        (lambda(x)
                                                                (equal(cadr(cdr(assoc 10 (entget canzhaoent))))(cadr(cdr(assoc 10 (entget x)))) 0.2)                       
                                                        )
                                                )
                                                (cdr yentlst)               
                                        )
                                )
                                (if ylst
                                        (progn
                                                (setq ylst
                                                        (vl-sort ylst
                                                                (function
                                                                        (lambda (x y)
                                                                                (>(distance  (cdr(assoc 10 (entget canzhaoent))) (cdr(assoc 10 (entget x))))
                                                                                        (distance  (cdr(assoc 10 (entget canzhaoent))) (cdr(assoc 10 (entget y)))))
                                                                        )
                                                                )
                                                        )       
                                                )
                                                (entmakex
                                                        (list '(0 . "LINE")
                                                                '(6 . "CENTER") '(62 . 1)
                                                                (cons 10 (cdr(assoc 10 (entget canzhaoent))))
                                                                (cons 11 (cdr(assoc 10 (entget (car ylst)))))))
                                                (foreach x ylst
                                                        (setq yentlst(vl-remove x yentlst))
                                                )
                                               
                                        )
                                )                       
                                (setq yentlst(cdr yentlst))
                        )
                       
                )               
  )
        (princ)
)

回复

使用道具 举报

发表于 2024-11-10 15:36:05 | 显示全部楼层
xj6019 发表于 2024-11-10 14:18
瞎玩一把!!!!!!!!!!!!!!

有BUG,并列多个圆,总要少连接1个,期待修复。
回复

使用道具 举报

发表于 2024-11-10 16:35:54 | 显示全部楼层
GEGEYANG88 发表于 2024-11-10 15:36
有BUG,并列多个圆,总要少连接1个,期待修复。

测试正常,没发现
回复

使用道具 举报

发表于 2024-11-10 17:26:57 | 显示全部楼层

;非源码慎用


本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2024-11-10 17:52:36 | 显示全部楼层
请测试并列圆连线

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2024-11-10 19:27:44 | 显示全部楼层
GEGEYANG88 发表于 2024-11-10 17:52
请测试并列圆连线


本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2024-11-10 20:01:08 | 显示全部楼层
牛牛牛牛牛!
回复

使用道具 举报

 楼主| 发表于 2024-11-10 20:06:05 | 显示全部楼层
xj6019 发表于 2024-11-10 16:35
测试正常,没发现

谢谢大佬,程序我刚刚测试了一下,的确是有时候会漏连线,图片给您看看,画绿圈的地方是漏连接的,我把测试的图档也传上来,希望能帮忙优化一下


本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 收起 理由
xj6019 + 1 新传的程序再试一下,换了个算法

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 15:21 , Processed in 0.185137 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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