明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 412|回复: 4

[经验] SLdesign(三领)Breaks

[复制链接]
发表于 2024-12-18 20:18:53 | 显示全部楼层 |阅读模式
本帖最后由 尘缘一生 于 2024-12-18 20:23 编辑

看到本坛文字打断,分两组问题,思量这个用得不多,但是还是有时候用的,

http://bbs.mjtd.com/thread-191760-1-1.html
以目前三领的集成函数,作了一下子,与线类打断作在一起,我喜欢一个同样功能在一起画图,这样子,不用那么多的命令。
  1. ;;SLdesign V3.0 三领打断(简版) BY 尘缘一生
  2. ;;如果文字,动态指示打断位置
  3. ;;如果线类,选择打断第二点时右键或空格则打断于点
  4. (defun c:sldaduan (/ ent p0 p1 p2 p3 p4 e tp ang e_lst plis)
  5.   (setq e_lst (sysvar '("OSMODE" "CMDECHO")))
  6.   (setvar "CMDECHO" 0)
  7.   (setq e (car (setq ent (entsel "\n 选择要打断的对象:"))))
  8.   (setq tp (dxf1 e 0))
  9.   ;(if (member tp '("ELLIPSE" "CIRCLE" "POLYLINE" "REGION" "MLINE" "3DFACE"))
  10.   ;  (progn (gx (ssadd e) nil) (setq e (entlast) ent (list (entlast) (cadr ent)))) ;重新构建 entsel
  11.   ;)
  12.   (if (member tp '("TEXT" "TCH_TEXT" "MTEXT" "TCH_MTEXT"))
  13.     (progn
  14.       (setvar "OSMODE" 0)
  15.       (setq p0 (car (ddslx (+ (e-ang e nil) pi2)))) ;;ddslx 动态定位矢量线函数 e-ang 实体角度函数
  16.       (setq plis (maxtxbox (e-box4 e)) p1 (car plis) p2 (cadr plis) p3 (caddr plis) p4 (cadddr plis)) ;e-box4 包容盒4点位 maxtxbox 扩大10%包容盒4点位
  17.       (sl_text:breakall e) ;文字原位打断函数
  18.       (if (setq ss (ssget "W" p1 (pertolinecz p0 p4 p3) '((0 . "TEXT,TCH_TEXT,MTEXT,TCH_MTEXT")))) ;pertolinecz p0到p3 p4两点垂足
  19.         (sswzhb ss) ;合并文字选择集左侧
  20.       )
  21.       (if (setq ss (ssget "W" (pertolinecz p0 p1 p2) p3 '((0 . "TEXT,TCH_TEXT,MTEXT,TCH_MTEXT"))))
  22.         (sswzhb ss) ;合并文字选择集右侧
  23.       )
  24.     )
  25.     (progn ;线类
  26.       (setvar "OSMODE" 16383)
  27.       (setq ang (+ (e-ang e nil) pi4))
  28.       (if (setq p1 (getpoint "\n 指定打断的第一点:"))
  29.         (progn (setq p1 (vlax-curve-getClosestPointTo e p1 nil)) (slslx p1 ang))
  30.       )
  31.       (if (setq p2 (getpoint "\n 指定打断的第二点 , 或打断于点<右键>:"))
  32.         (progn (setq p2 (vlax-curve-getClosestPointTo e p2 nil)) (slslx p2 ang))
  33.       )
  34.       (setvar "OSMODE" 0)
  35.       (if p2
  36.         (vl-cmdf ".BREAK" ent "F" "_non" (trans p1 0 1) "_non" (trans p2 0 1))
  37.         (if (if-color)
  38.           (progn
  39.             (vl-cmdf ".BREAK" ent "F" "_non" (trans p1 0 1) "@")
  40.             (vla-put-color (en2obj (entlast)) (atoi (slsjqs)))
  41.           )
  42.           (progn (vl-cmdf ".BREAK" ent "F" "_non" (trans p1 0 1) "@") (redraw (entlast) 3))
  43.         )
  44.       )
  45.     )
  46.   )
  47.   (mapcar 'eval e_lst)
  48.   (redraw)
  49.   (princ)
  50. )



说明:文字有稍微移位,实际不是原位炸开函数不完美,是再合并函数还没有加原位不变这一部分,不属于本问题。

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

发表于 2024-12-19 12:06:31 | 显示全部楼层
运行出错
命令: SLDADUAN
; 错误: no function definition: SYSVAR
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-12-19 17:58:52 | 显示全部楼层
lzspain 发表于 2024-12-19 12:06
运行出错
命令: SLDADUAN
; 错误: no function definition: SYSVAR

变量保存的一种办法

  1. ;;存储系统变量----(一级)----
  2. ;;lis 系统变量表 '("OSMODE" "CMDECHO" "ORTHOMODE")
  3. (defun sysvar (lis / n)
  4.   (setq e_lst (remove-nil (mapcar (function (lambda (n) (if (getvar n) (list 'setvar n (getvar n))))) lis)))
  5.   e_lst
  6. )

回复 支持 反对

使用道具 举报

发表于 2024-12-19 20:04:54 | 显示全部楼层
尘缘一生 发表于 2024-12-19 17:58
变量保存的一种办法

还是不行,又会报其他的REMOVE-NIL、DXF1错误,没安装三领不能用吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-12-19 20:44:41 | 显示全部楼层
本帖最后由 尘缘一生 于 2024-12-19 20:48 编辑
lzspain 发表于 2024-12-19 20:04
还是不行,又会报其他的REMOVE-NIL、DXF1错误,没安装三领不能用吗?

不好意思兄弟:我刚才看了下子,不行,下面啊,函数更多,没法一一弄出来,如果弄,我都得改写一遍所有函数,本坛其他地方有,但三领的不一样,集成太多,DXF1那句这样 (setq tp (cdr (assoc 0 (entget e))))
  1. ;;SLdesign V3.0 三领打断(简版) BY 尘缘一生
  2. ;;如果文字,动态指示打断位置
  3. ;;如果线类,选择打断第二点时右键或空格则打断于点
  4. (defun c:sldaduan (/ ent p0 p1 p2 p3 p4 e tp ang e_lst plis)
  5.         (setq e_lst (sysvar '("OSMODE" "CMDECHO")))
  6.         (setvar "CMDECHO" 0)
  7.         (setq e (car (setq ent (entsel "\n 选择要打断的对象:"))))
  8.         (setq tp (cdr (assoc 0 (entget e))))
  9.         ;(if (member tp '("ELLIPSE" "CIRCLE" "POLYLINE" "REGION" "MLINE" "3DFACE"))
  10.         ;        (progn (gx (ssadd e) nil) (setq e (entlast) ent (list (entlast) (cadr ent)))) ;重新构建 entsel
  11.         ;)
  12.         (if (member tp '("TEXT" "TCH_TEXT" "MTEXT" "TCH_MTEXT"))
  13.                 (progn
  14.                         (setvar "OSMODE" 0)
  15.                         (setq p0 (car (ddslx (+ (e-ang e nil) pi2)))) ;;ddslx 动态定位矢量线函数 e-ang 实体角度函数
  16.                         (setq plis (maxtxbox (e-box4 e)) p1 (car plis) p2 (cadr plis) p3 (caddr plis) p4 (cadddr plis)) ;e-box4 包容盒3点位 maxtxbox 扩大10%包容盒
  17.                         (sl_text:breakall e) ;文字原位打断函数
  18.                         (if (setq ss (ssget "W" p1 (pertolinecz p0 p4 p3) '((0 . "TEXT,TCH_TEXT,MTEXT,TCH_MTEXT")))) ;pertolinecz p0到p3 p4两点垂足
  19.                                 (sswzhb ss) ;合并文字选择集左侧
  20.                         )
  21.                         (if (setq ss (ssget "W" (pertolinecz p0 p1 p2) p3 '((0 . "TEXT,TCH_TEXT,MTEXT,TCH_MTEXT"))))
  22.                                 (sswzhb ss) ;合并文字选择集右侧
  23.                         )
  24.                 )
  25.                 (progn ;线类
  26.                         (setvar "OSMODE" 16383)
  27.                         (setq ang (+ (e-ang e nil) pi4))
  28.                         (if (setq p1 (getpoint "\n 指定打断的第一点:"))
  29.                                 (progn (setq p1 (vlax-curve-getClosestPointTo e p1 nil)) (slslx p1 ang))
  30.                         )
  31.                         (if (setq p2 (getpoint "\n 指定打断的第二点 , 或打断于点<右键>:"))
  32.                                 (progn (setq p2 (vlax-curve-getClosestPointTo e p2 nil)) (slslx p2 ang))
  33.                         )
  34.                         (setvar "OSMODE" 0)
  35.                         (if p2
  36.                                 (vl-cmdf ".BREAK" ent "F" "_non" (trans p1 0 1) "_non" (trans p2 0 1))
  37.                                 (progn (vl-cmdf ".BREAK" ent "F" "_non" (trans p1 0 1) "@") (redraw (entlast) 3))
  38.                         )
  39.                 )
  40.         )
  41.         (mapcar 'eval e_lst)
  42.         (redraw)
  43.         (princ)
  44. )
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-22 21:41 , Processed in 0.246702 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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