明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: kkdolphin

[提问] 帮朋友问,直线自动连

[复制链接]
发表于 2019-12-29 09:37 来自手机 | 显示全部楼层
可以框选最好了,毕竟工程图线条超多,大神能完善一下吗,感觉很有用的啊
回复

使用道具 举报

发表于 2019-12-29 09:38 来自手机 | 显示全部楼层
【test3】直线容差内首尾相接  (defun c:test3 (/ cpt getdxf fuzz en entmp pt10 pt11 en1 pt10a pt11a lst n)   (defun cpt (pt dis n / i lst)     (setq i 0)     (repeat n       (setq lst  (cons (polar pt (/ (* 2 i pi) n) dis) lst)       i  (1+ i)       )     )     lst   )   (defun getdxf (dxf en) (cdr (assoc dxf (entget en))))   (setq fuzz (getreal "\n容差:"))   (setq  en    (car (entsel))   entmp en   )   (while en     (redraw en 2)     (setq pt10 (getdxf 10 en)     pt11 (getdxf 11 en)     )     (if  (setq en1 (ssget "cp" (cpt pt10 fuzz 72)))       (progn   (setq en    (ssname en1 0)         pt10a (getdxf 10 en)         pt11a (getdxf 11 en)   )   (if (< (distance pt10 pt10a) (distance pt10 pt11a))     (setq lst (cons (list en pt10 pt10a) lst))     (setq lst (cons (list en pt10 pt11a) lst))   )       )       (if (setq en1 (ssget "cp" (cpt pt11 fuzz 72)))   (progn (setq en     (ssname en1 0)          pt10a (getdxf 10 en)          pt11a (getdxf 11 en)          )          (if (< (distance pt11 pt10a) (distance pt11 pt11a))
回复

使用道具 举报

发表于 2019-12-29 09:39 来自手机 | 显示全部楼层
这应该是下载的原有代码吧
回复

使用道具 举报

发表于 2019-12-29 09:39 | 显示全部楼层
为什么我的电脑加载不上,显示代码有错误呀
(defun c:test3 (/ cpt getdxf fuzz en entmp pt10 pt11 en1 pt10a pt11a lst n)
  (defun cpt (pt dis n / i lst)
    (setq i 0)
    (repeat n
      (setq lst  (cons (polar pt (/ (* 2 i pi) n) dis) lst)
      i  (1+ i)
      )
    )
    lst
  )
  (defun getdxf (dxf en) (cdr (assoc dxf (entget en))))
  (setq fuzz (getreal "\n容差:"))
  (setq  en    (car (entsel))
  entmp en
  )
  (while en
    (redraw en 2)
    (setq pt10 (getdxf 10 en)
    pt11 (getdxf 11 en)
    )
    (if  (setq en1 (ssget "cp" (cpt pt10 fuzz 72)))
      (progn
  (setq en    (ssname en1 0)
        pt10a (getdxf 10 en)
        pt11a (getdxf 11 en)
  )
  (if (< (distance pt10 pt10a) (distance pt10 pt11a))
    (setq lst (cons (list en pt10 pt10a) lst))
    (setq lst (cons (list en pt10 pt11a) lst))
  )
      )
      (if (setq en1 (ssget "cp" (cpt pt11 fuzz 72)))
  (progn (setq en     (ssname en1 0)
         pt10a (getdxf 10 en)
         pt11a (getdxf 11 en)
         )
         (if (< (distance pt11 pt10a) (distance pt11 pt11a))
     (setq lst (cons (list en pt11 pt10a) lst))
     (setq lst (cons (list en pt11 pt11a) lst))
         )
  )
  (setq en nil)
      )
    )
  )
  (redraw entmp 1)
  (foreach n lst (redraw (car n) 1))
  (setq lst (reverse lst))
  (while lst
    (setq n (car lst))
    (foreach en  lst
      (vla-move  (vlax-ename->vla-object (car en))
    (vlax-3d-point (caddr n))
    (vlax-3d-point (cadr n))
      )
    )
    (setq lst (cdr lst))
  )
(princ)

回复

使用道具 举报

发表于 2019-12-29 09:40 | 显示全部楼层
大神,搞个能框选的完整版重新发一次把,福利大众
回复

使用道具 举报

发表于 2019-12-29 10:58 | 显示全部楼层
大神,搞个能框选的完整版重新发一次把,福利大众
回复

使用道具 举报

 楼主| 发表于 2019-12-29 11:51 | 显示全部楼层
之前的大哥,应该加上一段: (vl-load-com)。否则有些同学不能运行的
回复

使用道具 举报

 楼主| 发表于 2019-12-29 17:20 | 显示全部楼层
本帖最后由 kkdolphin 于 2019-12-29 19:39 编辑
x_s_s_1 发表于 2019-12-29 09:07
容差本来就是要输入范围值里Max,框选代码太多,懒得写了。
另:编辑的时候不小心,网页把后面的代码删掉 ...

.刚才试验过,有两条直线,一条直线长度为2110,一条直线为1150,相距为0.0528,但是我输入1或者0.5的时候,程序不能执行,输入0.1和0.4的时候程序可以执行。输入的最大距离长度貌似不能大于两直线实际相距的长度的8倍左右。但我们不一定能猜出相离或者相交的直线的实际距离D,要求在一个值以下就可以了。在输入1时候,能把0.001相距的距离的两直线执行程序。请问能否改进一下?拜托。

回复

使用道具 举报

发表于 2019-12-29 20:41 来自手机 | 显示全部楼层
需连接的线应都在可视区域,你所述的情况不会出现,原理就是线端半径FUZZ外接圆的72边形选择
回复

使用道具 举报

 楼主| 发表于 2019-12-30 18:32 | 显示全部楼层
很好,之前的bug消失了,谢谢你!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 14:07 , Processed in 0.140836 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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