明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 958620832

[源码] 连续打断(带高亮度显示)(绝对原创)

[复制链接]
发表于 2013-9-25 09:49:19 | 显示全部楼层
958620832 发表于 2013-9-24 14:44
执行过程中显示高亮度,退出后就不显示了。
所谓的高亮度,如附图所示,否则就是cad的设置问题了。

谢谢 问题已解决!
发表于 2013-9-25 10:54:25 | 显示全部楼层
958620832 发表于 2013-9-25 08:02
具体代码修改后是什么样的,请赐教

  1. (defun c:br (/ *error* NAME SS P LEN I)
  2.   (defun *error* (msg)
  3.   (setq len (sslength ss) i 0)
  4.   (repeat len
  5.     (redraw (ssname ss i) 4) ;_ 取消高亮度显示
  6.     (setq i (+ i 1)))
  7.   (command ".UNDO" "E")
  8.   (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*") (princ (strcat "\n** Error: " msg " **")))
  9.   (princ))

  10.   (setq name (car (entsel "\n请选择被打断线段:")) ss (ssadd))
  11.   (ssadd name ss)
  12.   (redraw name 3) ;_ 高亮度显示被选线段
  13.   (while (setq p (getpoint "\n请选择断点:"))
  14.     (setq len (sslength ss) i 0)
  15.     (repeat len
  16.       (command "_.break" (ssname ss i) p p)
  17.       (redraw (ssname ss i) 3) (redraw (entlast) 3) ;_ 高亮度显示打断后的所有线段
  18.       (ssadd (entlast) ss) ;_ 打断后的线段中,除了(entlast),其余都自动纳入之前选集ss
  19.       (setq i (+ i 1))))
  20.   (setq len (sslength ss) i 0)
  21.   (repeat len
  22.     (redraw (ssname ss i) 4) ;_ 取消高亮度显示
  23.     (setq i (+ i 1)))
  24.   (princ)
  25.   )

评分

参与人数 1金钱 +5 收起 理由
xiongqunan + 5 很给力!

查看全部评分

回复 支持 2 反对 0

使用道具 举报

发表于 2013-9-25 12:09:10 | 显示全部楼层
按照你的程序思路,应该是线都不用选择,直接选哪个点就是断点,因为你的程序对于一条线可以实施多个断点。
 楼主| 发表于 2013-9-25 15:11:11 | 显示全部楼层
mccad 发表于 2013-9-25 12:09
按照你的程序思路,应该是线都不用选择,直接选哪个点就是断点,因为你的程序对于一条线可以实施多个断点。

要是两条线相交,只选交点,不选线,怎么知道断开的是那条线?虽然情况特殊了点,但经常会碰到的
发表于 2013-9-25 16:02:23 | 显示全部楼层
非常好用,谢谢
发表于 2013-9-28 12:43:59 | 显示全部楼层
在什么地方应用呢,cad自带的打断就很好啊?
发表于 2013-9-29 16:38:41 | 显示全部楼层
多谢,一直找这么一个程序。
每次打断都按F,然后@实在麻烦得很。
这下亏了楼主,容易了。
再次表示感谢。
发表于 2013-9-30 10:21:29 | 显示全部楼层
本帖最后由 自贡黄明儒 于 2013-9-30 10:32 编辑
mccad 发表于 2013-9-25 12:09
按照你的程序思路,应该是线都不用选择,直接选哪个点就是断点,因为你的程序对于一条线可以实施多个断点。


老大就是老大,一眼就看出来了,太厉害
我试了一下,果真如此

(defun c:br1 (/ P)  
  (while (setq p (getpoint "\n请选择断点:"))
    (setq p (nentselp p))
    (command "_.break" p (cadr p) (cadr p))   
  )  
  (princ)
)

  1. (defun c:br1 (/ P)  
  2.   (while (setq p (getpoint "\n请选择断点:"))
  3.     (setq p (nentselp p))
  4.     (command "_.break" p (cadr p) (cadr p))
  5.     (redraw (car p) 3)
  6.     (redraw (entlast) 3)
  7.   )  
  8.   (princ)
  9. )
发表于 2013-9-30 11:52:13 | 显示全部楼层
不知是操作还是?连续打断时出现线段中间(未指定打断的位置)有打断的现象
 楼主| 发表于 2013-10-11 23:36:20 | 显示全部楼层
本帖最后由 958620832 于 2013-10-12 08:38 编辑
mccad 发表于 2013-9-25 12:09
按照你的程序思路,应该是线都不用选择,直接选哪个点就是断点,因为你的程序对于一条线可以实施多个断点。

1.总算明白你的问题了,你的意思是不是,即使点不在线上,也可以将线打断?
2.现将修改后的源码提供如下,基本上就可以解决你所提出的这一问题了。
3.不过,我还是觉得,点必须选,但有的情况还必须选线,比如,
   如果需要将两条相交线段中的指定一条从交点处断开,不选线,只选交点,能做到吗?
4.该程序中的主要优势在于:
   ①高亮度显示;
   ②具有很强的连续性,即使点不在线上也不会退出,仍可继续进行打断操作,除非按了右键、空格键或enter键。
(defun c:br (/ *error*)
  (setvar "cmdecho" 0)
  (defun *error* (msg) ;将描述错误的字符串存入变量msg
    (setvar "cmdecho" 1)
    (setq len (sslength ss) i 0)
    (repeat len
      (redraw (ssname ss i) 4) ;取消高亮度显示
      (setq i (+ i 1)))
    (princ "错误: ")(princ msg)) ;打印错误信息
  (setq name (car (entsel "\n请选择被打断线段:")) ss (ssadd))
  (ssadd name ss)
  (redraw name 3) ;高亮度显示被选线段
  (princ "\n请选择断点<1>:")
  (while (setq p (getpoint))
    (setq len (sslength ss) i 0)
    (repeat len
      (if (and (ssget "c" p p) (ssmemb (ssname ss i) (ssget "c" p p))) (progn
      ;判断点p在不在像素(ssname ss i) 上,如果在,执行如下打断与高亮度显示操作。
        (command "_.break" (ssname ss i) p p)
        (redraw (ssname ss i) 3) (redraw (entlast) 3) ;高亮度显示打断后的所有线段
        (ssadd (entlast) ss))) ;打断后的线段中,除了(entlast),其余都自动纳入之前选集ss
      (setq i (+ i 1)))
    (if (= (sslength ss) len) (princ (strcat "\n点不在线上,请重选断点<" (rtos len) ">:"))
      (princ (strcat "\n请选择断点<" (rtos (+ len 1)) ">:"))))
  (setq len (sslength ss) i 0)
  (repeat len
    (redraw (ssname ss i) 4) ;取消高亮度显示
    (setq i (+ i 1)))
  (setvar "cmdecho" 1)
  (princ))
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-23 08:07 , Processed in 0.186259 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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