查看单个帖子
旧 2009-04-25, 07:01 PM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 cad中十字交叉线打断方法修改请教

cad中十字交叉线打断方法修改请教
www.dimcax.com
cad中十字交叉线打断方法修改请教
绘制工艺流程图时,交叉线经常要打断。但是代码只能竖断,不能横断,请高手指点。如何通过选择横或竖对象,来进行打断。而且代码只限定横竖交叉是垂直的,不能是斜线吗?望高手看看。在此感谢!
以下是代码:
(defun c:lc (/ tmp pt pt1 pt2 ss pt3 pt4 i si enti)
;;改动1:将space设置为全局变量,可以保存上次的输入
(if (= space nil)
(setq space 4)
)
;;设置
(if (setq tmp
(getdist
(strcat "\n请输入断开间距 <" (rtos space 2 2) ">:")
)
)
(setq space tmp)
)
;;循环
(while (setq pt (getpoint "\n选择需断开的交点:"))
;;改动2:使用polar函数可以简化坐标计算
(setq pt1 (polar pt (* 0.25 pi) space)
pt2 (polar pt (* 1.25 pi) space)
)
;;改动3:判断是否选择到了对象、对象个数、
(if (and (setq ss (ssget "c"
pt1
pt2
)
)
(= (sslength ss) 2)
)
(progn
;;改动4:在除法运算中将2改为2.0,以避免两整数相除消除尾数现象。
(setq pt3 (polar pt (* 0.5 pi) (/ space 2.0))
pt4 (polar pt (* 1.5 pi) (/ space 2.0))
)
(setq i 0)
(repeat 2
(setq si (ssname ss i)
enti (entget si)
)
;;改动5:判断对象是否为直线段,且竖直。
(if (and (= (cdr (assoc 0 enti)) "line")
(equal (cadr (assoc 10 enti))
(cadr (assoc 11 enti))
0.00001
)
)
;;改动6:在没有关闭对象捕捉情况下,command函数中指定点位前,最好使用"non"选项,以消除捕捉影响。
(command "_.break"
(list si pt)
"f"
"non"
pt3
"non"
pt4
)
)
(setq i (1+ i))
) ;_结束 repeat
)
) ;_结束 if
) ;_结束 while
;;静默退出
(princ)
) ;_结束 defun
d
不知道哦!
d
中华模具论坛非常感谢!
d
你看看我参考网上编写的这个,我一般打断的距离默认就是2,所以不用每次都输入打断距离了。当然你也可以自己改下。整了半天,没法上传,贴出源码来与你分享。
(defun c:8br(/ me1 me2 c1 p1 p2 p3 )
  (setq me1 (getvar "osmode"))  
(setvar "osmode" 32)
(setq me2 (getvar "orthomode"))
(setvar "orthomode" 0)
 (setq p1 (getpoint "\n 选择线的打断点:"))
(initget "s v")
(setq c1 (getreal "\n 切断水平直线输入s or 切断竖直直线输入v : <s> "))
(if (= c1 nil) (setq c1 "s"))
(if (= c1 "s")
(progn
    (setq p2 (polar p1 pi 2))
    (setq p3 (polar p1 0 2))
))
(if (= c1 "v")
(progn
  (setq p2 (polar p1 (* pi 1.5) 2))
    (setq p3 (polar p1 (/ pi 2) 2))
   ))
(command "break" pause "f" p2 p3)
 (setvar "osmode" me1)
(setvar "orthomode" me2)
(princ)
)
d
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)