明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: citykunan

如何让不交的线的端点自动相交

  [复制链接]
 楼主| 发表于 2004-2-6 14:09:00 | 显示全部楼层
谢谢龙班主提供的新方法,但是正像你所说的,當對物縮至很少時,(ssget "c" PT10 PT10)還是會選到不在點上的物件,这样就不能trim和extend了。我们的图纸都很大,不知如何是好了,总觉得程序很好,但使用有局限性,就很遗憾了。不知有没有办法改良?


不过还是真心地谢谢你。
发表于 2004-2-6 18:03:00 | 显示全部楼层
(command "zoom" "c" px 100)


.....


(command "zoom" "p")


.
发表于 2004-2-7 00:27:00 | 显示全部楼层
不能有更好的办法了么?


我写一个试试
发表于 2004-2-7 05:33:00 | 显示全部楼层
本帖最后由 作者 于 2004-2-7 7:01:07 编辑
  1. (defun c:xl-tr (/ cmd ss r e lst)   (princ "\nc:xl-tr = 自动焊接曲线端头---------无痕.2004.2")
  2.    (vl-load-com)
  3.    (vl-cmdf ".undo" "be")
  4.    (setq cmd (getvar "cmdecho")
  5.   pkb (getvar "pickbox")
  6.   os   (getvar "osmode"))
  7.    (setvar "cmdecho" 0)
  8.    (setvar "osmode" 0)
  9.    (setq pt1 (getpoint "\n两点框选焊接实体:")
  10.   pt2 (getcorner pt1 "\n第二点:")
  11.                ss (ssget "w" pt1 pt2 '((0 . "*polyline,line,ellipse,arc")))
  12.   r   (getdist "\n焊接容许误差:"))
  13.    (vl-cmdf ".zoom" "w" pt1 pt2)
  14.    (setvar "pickbox" 0)
  15.    (repeat (setq n (sslength ss))
  16.        (setq e   (ssname ss (setq n (1- n)))
  17.      lst(append lst (list (xl-ept e T))(list (xl-ept e nil)))
  18.        )
  19.    )
  20.    (foreach m lst (x@tr m))
  21.    (setvar "osmode" os)
  22.    (setvar "pickbox" pkb)
  23.    (setvar "cmdecho" cmd)
  24.    (vl-cmdf "zoom" "p" ".undo" "e")
  25. )
  26. (defun xl-ept (e key / obj pt)
  27.    (setq obj (vlax-ename->vla-object e)
  28.   pt   (cond
  29.              ((member (cdr (assoc 0 (entget e))) '("LINE" "ARC" "ELLIPSE"))
  30.                (if key(vlax-get obj 'startpoint)(vlax-get obj 'endpoint)))
  31.              (T (vlax-curve-getpointatparam obj
  32.          (if key (vlax-curve-getstartparam obj)(vlax-curve-getendparam obj))))
  33.          )
  34.    )(list e pt)
  35. )
  36. (defun x@tr (ept / maxpt minpt ss2)
  37.    (setq maxpt (polar (cadr ept) (* 0.25 PI) (* 1.414 r))
  38.   minpt (polar (cadr ept) (* 1.25 PI) (* 1.414 r))
  39.   ss2     (ssget "c" minpt maxpt '((0 . "*polyline,line,ellipse,arc"))))
  40.    (vl-cmdf ".extend" ss2 "" ept "")
  41.    (vl-cmdf ".trim" ss2 "" ept "")
  42. )
发表于 2004-2-7 05:59:00 | 显示全部楼层
本帖最后由 作者 于 2004-2-7 7:22:55 编辑

测试图原图(运行程序时候即此视窗)



       


容差值(最大断距)=200, 运行后效果:


       





此版本不支持两边缺角,因此单元右下角有一个缺角,下一个版本用求交点法支持。


经测试,对line,arc,ellipse支持较好,对*polyline成功率不高。


本帖子中包含更多资源

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

x
发表于 2004-2-7 08:14:00 | 显示全部楼层
本帖最后由 作者 于 2004-2-7 9:01:20 编辑

呵呵,v1.1a 测试较为满意版又出来了。



全面支持line,arc,ellipse,lwpolyline (可惜对spline裁减方便,但是要支持延伸程序要另外加一大块,因此决定暂时不支持)





此版本修正了一些bug,如曲线与另外曲线有两个交点时候裁减延伸不规律bug(大家看测试图可见,上部右边的样例为未修正前的效果,下面的阵列为修正程序后执行效果,但在同一个容差范围内端点既能伸又能剪的情况,未加以处理,有待改进),较好的支持pline,支持L型缺角。虽然如此,程序还是存在一些bug,主要是处理曲线交点的地方!


请看测试图:这个图打开后的显示即是测试时候执行程序所用的窗口。这次残酷的测试使用了多个单元阵列,每个单元包含多种可能出现的断口情况,实体包括line,arc,ellipse,lwpolyline。





测试程序下载:(rar格式,解压后为 vlx 格式文件,加载后用 xtr 命令执行)











本帖子中包含更多资源

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

x
发表于 2004-2-7 09:20:00 | 显示全部楼层
把原码让我看看好吗,测试多麻烦啊,几下就不能用了
发表于 2004-2-7 10:29:00 | 显示全部楼层
kaixin119发表于2004-2-7 9:20:00把原码让我看看好吗,测试多麻烦啊,几下就不能用了

似乎给你看了源码用处不大啊,有要改动的,你还不是要叫别人来改
发表于 2004-2-7 11:17:00 | 显示全部楼层
哈哈!我也克服了這個問題,不用"zoom",將pickbox=0可以得到正確結果,多謝無痕的提醒
发表于 2004-2-8 14:39:00 | 显示全部楼层
我写了一个程序但是怎么也调试不好,不知道那里有问题,希望斑竹能给我修改一下... (defun c:qq(/)
(setq cd (getreal "请输入距离"))
(setq ss (ssget '((0 . "line"))))
(setq n (sslength ss))
(setq i (1- n))
(repeat n
(setq name0 (ssname ss i))
(setq name0entget (entget name0))
(setq qd0 (cdr (assoc 10 name0entget ))
zd0 (cdr (assoc 11 name0entget ))
ang (angle qd0 zd0)
qd1 (polar qd0 (+ ang (/ pi 2)) cd)
zd1 (polar zd0 (+ ang (/ pi 2)) cd)
qd2 (polar qd0 (- ang (/ pi 2)) cd)
zd2 (polar zd0 (- ang (/ pi 2)) cd)
)
(setq ss1 (ssget "c" qd1 zd1 ))
(setq ss2 (ssget "c" qd2 zd2 ))
(setq n2 (sslength ss2))
(repeat n2
(ssadd (ssname ss2 (1- n2)) ss1)
(setq n2(1- n2))
)


(setq n1 (sslength ss1))
(setq j (1- n1))
(repeat n1
(setq namex (ssname ss1 j))
(setq namexentget (entget namex))
(setq qdx (cdr (assoc 10 namexentget ))
zdx (cdr (assoc 11 namexentget ))
)
(cond
( (and (/= (inters qdx zdx qd1 zd1) nil)
(/= (inters qdx zdx qd0 zd0) nil)
(= (inters qdx zdx qd2 zd2) nil)
)
(command "break" namex "f" qd0 qd2 "" )
)
( (and (= (inters qdx zdx qd1 zd1) nil)
(/= (inters qdx zdx qd0 zd0) nil)
(/= (inters qdx zdx qd2 zd2) nil)
)
(command "break" namex "f" qd0 qd1 "" )
)
)
(setq j (1- j))
)
(command "EXTEND" name0 "" "f" qd1 zd1 "" "f" qd2 zd2 "" "")
(command)
(setq i(1- i))
)
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-27 15:44 , Processed in 0.155629 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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