明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4171|回复: 3

cad中十字交叉线打断方法修改请教

[复制链接]
发表于 2009-3-8 01:02 | 显示全部楼层 |阅读模式

绘制工艺流程图时,交叉线经常要打断。但是代码只能竖断,不能横断,请高手指点。如何通过选择横或竖对象,来进行打断。而且代码只限定横竖交叉是垂直的,不能是斜线吗?望高手看看。在此感谢!

以下是代码:

(defun CC (/ 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

发表于 2009-3-8 16:38 | 显示全部楼层
不知道哦!
发表于 2009-3-10 21:16 | 显示全部楼层
模具CAD中华模具论坛非常感谢!
发表于 2009-3-11 10:09 | 显示全部楼层
本帖最后由 作者 于 2009-3-11 10:11:23 编辑

你看看我参考网上编写的这个,我一般打断的距离默认就是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)
  )

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

本版积分规则

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

GMT+8, 2024-6-30 11:31 , Processed in 0.145350 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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