明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3549|回复: 12

多圆相切并制成聚合线

  [复制链接]
发表于 2009-11-25 00:44:00 | 显示全部楼层 |阅读模式

想要做个2个圆相切后trim多余线的并做成聚合线的程序,自制了一个程序老是会删不接连接的中间线,而且没法做成聚合线,更不能将生成的图元做成聚合线,请朋友帮们看看哪里有问题!

上传的文件是程序和测试图,谢谢帮忙完善程序!

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2009-11-25 09:33:00 | 显示全部楼层
转换成REGION,然后并集、交集、差集操作
 楼主| 发表于 2009-11-25 10:58:00 | 显示全部楼层
沒有用過這個REGION指令,REGION是生成一塊面域嗎,只是最後做聚合線時可用的吧?多圓做圓圓相切不好做,還要刪除裡面的多余線要怎樣操作,原程序經常刪不掉!?
 楼主| 发表于 2009-11-26 12:07:00 | 显示全部楼层
龍版,CAOYIN版,幫忙完善下,謝謝!
发表于 2009-11-26 13:48:00 | 显示全部楼层
本帖最后由 作者 于 2009-11-26 14:35:56 编辑

1.用equal替代=

(/=
   0
   (- r1 r2))

-》

(not (equal 0 (- r1 r2) 0.00001))

(= r1 r2)

-》

(equal r1 r2 0.0001)

2.用该用几何的方法求出切点,而不是用捕捉

发表于 2009-11-27 08:02:00 | 显示全部楼层

;;我提過了要用雙元表

(command "_.trim" N1 N2 "" (list (ssname NO 0) P6)(list (ssname NO 1) P7) "")

发表于 2009-11-28 08:07:00 | 显示全部楼层
用2樓的方法確定是可以的
提供2圓相切的基本程序,改改就能完成多圓
  1. ;;LUCAS
  2. (defun SS_LAI (EN / SS)
  3.   (setq SS (ssadd))
  4.   (while (setq EN (entnext EN))
  5.     (if (not (member (cdr (assoc 0 (entget EN)))
  6.        '("ATTRIB" "VERTEX" "SEQEND")
  7.       )
  8. )
  9.       (ssadd EN SS)
  10.     )
  11.   )
  12.   SS
  13. )
  14. (defun C:CC (/     ANG    C1   C1_CEN C1_ENT C1_R   C2     C2_CEN
  15.       C2_ENT C2_R   C3   C4  ENT ENT1   N      SS
  16.      )
  17.   (setvar "osmode" 0)
  18.   (setq SS (ssget '((0 . "circle"))));只選2個圓
  19.   (setq N 0)
  20.   (setq C1_ENT (entget (setq C1 (ssname SS N))))
  21.   (setq C2_ENT (entget (setq C2 (ssname SS (1+ N)))))
  22.   (setq C1_CEN (cdr (assoc 10 C1_ENT)))
  23.   (setq C2_CEN (cdr (assoc 10 C2_ENT)))
  24.   (setq C1_R (cdr (assoc 40 C1_ENT)))
  25.   (setq C2_R (cdr (assoc 40 C2_ENT)))
  26.   (setq ANG (angle C1_CEN C2_CEN))
  27.   (setq C3 (polar C2_CEN (+ ANG (* pi 0.5)) C2_R))
  28.   (setq C4 (polar C1_CEN (+ ANG (* pi 0.5)) C1_R))
  29.   (command "_.line" "tan" C3 "tan" C4 "")
  30.   (setq ENT (entget (entlast)))
  31.   (setq C3 (cdr (assoc 10 ENT))
  32. C4 (cdr (assoc 11 ENT))
  33.   )
  34.   (entdel (entlast))
  35.   (command "_.pline" C1_CEN C2_CEN C3 C4 "c")
  36.   (setq ENT (entlast))
  37.   (command "_.mirror" (entlast) "" C1_CEN C2_CEN "n")
  38.   (setq ENT1 (entlast))
  39.   (command "_.region" (entlast) ENT C1 C2 "")
  40.   (command "_.union" (SS_LAI ENT1) "")
  41.   (command "_.explode" (entlast))
  42.   (command "_.pedit" "m" "p" "" "y" "j" "" "")
  43.   (princ)
  44. )
 楼主| 发表于 2009-11-30 23:03:00 | 显示全部楼层

龙版用了region  /   union   / explode 这些命令后,程序运行速度非常慢,还有些不必要的提示想不让之显示也没法关,还有多圆相切没有写出,如果多圆是建立在这几个命令之上,那运行速度更加慢了...看来我还是从原来的程序改善下(Ps:如果有能力改原程序也没必要发贴上来了,哎!)

命令: ca
选择对象: 指定对角点: 找到 2 个

选择对象:
已提取 4 个环。
已创建 4 个面域。

发表于 2009-12-1 07:57:00 | 显示全部楼层

程序运行速度非常慢,是的!

但有效果,你可以把它改快一點,不知這樣的程序(多圓相切)用在那?

 楼主| 发表于 2009-12-1 22:32:00 | 显示全部楼层

用在五金冲压模具类的,常有些圆与圆搭在一块,想用一个指令即可将所选的圆 以 圆相切圆 的方式绘直线后做成聚合线,省去了绘相切tan直线,省去了trim截断,省去了pedit做聚合线(见上面的dwg档方式).

如果做一个程序即可做成的事可省去上面一堆命令来完成,原来的程序不需要用到region  /   union   / explode ,虽然程序写得麻烦,但是执行非常快,就是没有完善出来哪里有些小问题需要修改一下,比如trim有截错的现象和做聚合线的功能,且只支持2圆绘制不能执行多圆绘制

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

本版积分规则

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

GMT+8, 2025-2-23 10:41 , Processed in 0.221071 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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