明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3830|回复: 19

怎么实现不完全相连的线段连接

  [复制链接]
发表于 2011-12-21 13:01:37 | 显示全部楼层 |阅读模式
有一组不完全相连的线段(有些线段间有小间隙),需要连接成一根多义线,有程序可以实现吗?
发表于 2011-12-22 19:40:36 | 显示全部楼层
本帖最后由 wudechao 于 2011-12-22 19:41 编辑

可以代替天正3,或者天正4的jion命令.比天正的功能还强.
回复 支持 1 反对 0

使用道具 举报

发表于 2011-12-21 13:46:31 | 显示全部楼层
且先试 OverKill ...
得适切回应 fuzz 的数值
发表于 2011-12-21 14:10:03 | 显示全部楼层


本帖子中包含更多资源

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

x
发表于 2011-12-21 15:46:19 | 显示全部楼层
3楼的程序最近很火,卖得也不错,
我也来支持一下,买一份.
发表于 2011-12-21 16:46:46 | 显示全部楼层
kwok 发表于 2011-12-21 15:46
3楼的程序最近很火,卖得也不错,
我也来支持一下,买一份.

谢谢你的支持!关键是要物有所值!
如果一个小小的程序能够给你带来很大的工作效率,何乐而不为?
发表于 2011-12-22 16:20:27 | 显示全部楼层
【KAIXIN】 发表于 2011-12-21 14:10

不知如何使用!
命令: kk
以最小距离,线连接合并
-->请选择进行连接的线(不需要变化的线):
-->请选择去连接的线:
无效的选项关键字。
; 错误: 函数被取消

输入选项
[闭合(C)/合并(J)/宽度(W)/编辑顶点(E)/拟合(F)/样条曲线(S)/非曲线化(D)/线型生成(L)
/放弃(U)]:
发表于 2011-12-22 17:01:57 | 显示全部楼层
这程序有点贵
发表于 2011-12-22 19:31:58 | 显示全部楼层
; ###############################我自己开发的连接线段命令j#################################################
(defun c:j (/ s1 s2 s3 e1 e2 tmq1 tmq2 oldrad pt00 pt01 pt02 pt03 pt10 pt11 pt12 pt13 ang0 ang2 ang3 tag) ;主程序,连接线段
  (setvar "cmdecho" 0)
  (setq oldrad (getvar "filletrad"))
  (setvar "filletrad" 0)
  (setq s1 (ffg-entsel "\n请选择第一根线(*line,arc,ellipse,ray)<退出>: " '((0 . "RAY,ARC,*LINE,ELLIPSE"))))
  (if (/= s1 nil)
    (progn
      (setq e1 (car s1)
     tmq1 (ffg-getdxf e1 0)
      );_结束setq
      (redraw e1 3)
      (setq s2 (ffg-entsel "\n请选择第二根线(*line,arc,ellipse,ray)<退出>: " '((0 . "RAY,ARC,*LINE,ELLIPSE"))))
      (if (/= s2 nil)
(progn
   (setq e2 (car s2)
  tmq2 (ffg-getdxf e2 0)
   );_结束setq
   (setq tag t);设置标记
   (if (and
  (= "LINE" tmq1)
  (= "LINE" tmq2)
       );_结束and
     (progn
       (setq pt00 (ffg-getdxf e1 10)
      pt01 (ffg-getdxf e1 11)
      pt10 (ffg-getdxf e2 10)
      pt11 (ffg-getdxf e2 11)
      ang0 (angle pt00 pt01)
      ang1 (angle pt10 pt11)
      ang2 (angle pt00 pt10)
       );_结束setq
       (if (and ;;判断两直线是否平行
      (or
        (equal ang0 ang1 1e-6)
        (equal ang0 (+ ang1 pi) 1e-6)
        (equal ang0 (- ang1 pi) 1e-6)
      ) ;;进而判断是否共线
      (or
        (equal ang0 ang2 1e-6)
        (equal ang0 (+ ang2 pi) 1e-6)
        (equal ang0 (- ang2 pi) 1e-6)
      );_结束or
    );_结束and
  (progn
    (command ".join" s1 s2 "")
    (setq tag nil)
  );_结束progn
       );_结束if
     );_结束progn
   );_结束if
   (if (and
  (= "ARC" tmq1)
  (= "ARC" tmq2)
       );_结束and
     (progn
       (setq pt01 (ffg-getdxf e1 10)
      pt02 (ffg-getdxf e1 40)
      pt11 (ffg-getdxf e2 10)
      pt12 (ffg-getdxf e2 40)
       );_结束setq
       (if (and ;;判断两弧形半径与中心点是否相等
      (equal pt01 pt11 1e-6)
      (equal pt02 pt12 1e-6)
    );_结束and
  (progn
    (command ".join" s1 s2 "")
    (setq tag nil)
  );_结束progn
       );_结束if
     );_结束progn
   );_结束if
   (if (and
  (= "ELLIPSE" tmq1)
  (= "ELLIPSE" tmq2)
       );_结束and
     (progn
       (setq pt01 (ffg-getdxf e1 10)
      pt02 (ffg-getdxf e1 11)
      pt03 (ffg-getdxf e1 40)
      pt11 (ffg-getdxf e2 10)
      pt12 (ffg-getdxf e2 11)
      pt13 (ffg-getdxf e2 40)
       );_结束setq
       (if (and ;;判断两弧形半径与中心点是否相等
      (equal pt01 pt11 1e-6)
      (equal pt02 pt12 1e-6)
      (equal pt03 pt13 1e-6)
    );_结束and
  (progn
    (command ".join" s1 s2 "")
    (setq tag nil)
  );_结束progn
       );_结束if
     );_结束progn
   );_结束if

   (if tag
     (progn
       (if (and
      (or
        (= "LINE" tmq1)
        (= "ARC" tmq1)
        (= "RAY" tmq1)
        (= "XLINE" tmq1)
        (= "ELLIPSE" tmq1)
      );_结束or
      (or
        (= "LINE" tmq2)
        (= "ARC" tmq2)
        (= "RAY" tmq2)
        (= "XLINE" tmq2)
        (= "ELLIPSE" tmq2)
      );_结束or
    );_结束and
  (progn
    (command ".fillet" s1 s2)
  );_结束progn
  (progn
    (command ".extend" s1 "" s2 "")
    (command ".extend" s2 "" s1 "")
    (setq s3 (entsel "\n请选择要删除的部分<退出>:"))
    (command ".trim" s1 s2 "" s3)
  );_结束progn
       );_结束if
     );_结束progn
   );_结束if
);_结束progn
(princ "未选择到物体")
      );_结束if
      (redraw e1 4)
    );_结束progn
    (princ "未选择到物体")
  );_结束if
  (setvar "filletrad" oldrad)
  (setvar "cmdecho" 1)
  (princ)
);_ 结束defun

评分

参与人数 2明经币 +1 金钱 +20 收起 理由
xjf + 20 赞一个!望继续优化
vlisp2012 + 1 很给力! 如果能实现连接成一条线就更好了!.

查看全部评分

发表于 2011-12-22 19:34:46 | 显示全部楼层
我从本论坛学到了很多知识,为了答谢大家,上面的代码是免费的哦
发表于 2011-12-22 19:38:19 | 显示全部楼层
;;上面代码要用到的函数:取物件dxf码==================================================
(defun ffg-getdxf (en dxf)
  (cdr (assoc dxf (entget en)))
);_结束ffg-getdxf
;=============类似于(entsel)函数,带提示,且带一个过滤表,只选择表中类型======================
(defun ffg-entsel (msg filter / ss sss)
  (setq ss (entsel msg))
  (if (/= ss nil)
    (progn
      (command "_.select" (car ss) "")
      (if (not (setq sss (ssget "P" filter)))
        (setq ss nil)
        (list (ssname sss 0) (cadr ss))
      );_结束if
    );_结束progn
  );_结束if
);_结束xentsel
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-22 14:08 , Processed in 0.213968 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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