明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 617|回复: 9

[函数] 批量动态单偏(过程中支持:改间距-换色-正交-扑捉)

  [复制链接]
发表于 2023-12-1 03:05 | 显示全部楼层 |阅读模式
本帖最后由 尘缘一生 于 2023-12-6 01:06 编辑

修改自:高飞代码,


  1. ;;实体单向动态偏移---(一级)-----
  2. ;enam 实体名 dd 偏移距离
  3. ;修改自高飞源码
  4. ;三领集成 MODFY 尘缘一生 QQ 15290049
  5. (defun ddenofdis (enam dd / loop bb obj objlst objs parper p0 n space space1 tp curpnt perpnt f3 f8)
  6.   (princ
  7.     (slmsg
  8.       "\n->移动偏移实体[改间距(TAB)/换色(C)/正交(F8)/扑捉(F3)](其余键-->定位确定)"
  9.       "\n->簿笆熬簿龟砰[э丁禯(TAB)/传︹(C)/タユ(F8)/汲(F3)](ㄤ龄-->﹚絋﹚)"
  10.       "\n->Move offset entity [Change Spacing(TAB)/Color Change(C)/Orth(F8)/Osnap (F3)] (other keys-->locate to determine)"
  11.     )
  12.   )
  13.   (setq obj (en2obj enam) tp (dxf1 enam 0) loop t objs nil f8 (getvar "ORTHOMODE") f3 (getvar "OSMODE"))
  14.   (while loop
  15.     (setq bb (grread t 15 2))
  16.     (setq p0 (cadr bb))
  17.     (cond
  18.       ((equal bb '(2 6));F3切换捕捉开关
  19.         (cond
  20.           ((and (< f3 16384) (/= f3 0))
  21.             (setq f3 (+ f3 16384))
  22.             (prompt (slmsg "\n <对象捕捉 关>" "\n <癸禜 闽>" "\n <OSnap Off>"))
  23.           )
  24.           ((or (= f3 0) (>= f3 16384))
  25.             (setq f3 16383)
  26.             (prompt (slmsg "\n <对象捕捉 开>" "\n <癸禜 秨>" "\n <OSnap On>"))
  27.           )
  28.         )
  29.         (setvar "OSMODE" f3) (redraw)
  30.       )   
  31.       ((equal bb '(2 15))    ;F8切换正交开关
  32.         (if (= f8 0)
  33.           (progn (setq f8 1) (prompt (slmsg "\n <正交 开>" "\n <タユ 秨>" "\n <Orth open>")))
  34.           (progn (setq f8 0) (prompt (slmsg "\n <正交 关>" "\n <タユ 闽>" "\n <Orth off>")))
  35.         )
  36.         (setvar "ORTHOMODE" f8) (redraw)
  37.       )
  38.       ((= (car bb) 5)
  39.         (and objs (mapcar 'vla-erase objs))
  40.         (setq objs nil curpnt (trans p0 1 0))
  41.         (setq perpnt (vlax-curve-getclosestpointto enam curpnt T))
  42.         (if (setq parper (vlax-curve-getParamAtPoint enam perpnt))
  43.           (progn
  44.             (if (> (det perpnt (mapcar '+ (vlax-curve-getFirstDeriv enam parper) perpnt) curpnt) 0)
  45.               (setq space1 (- dd))
  46.               (setq space1 dd)
  47.             )
  48.             (if (or (= tp "LINE") (= tp "XLINE"))
  49.               (setq space1 (- space1))
  50.             )
  51.             (setq space space1)
  52.             (repeat (fix (/ (distance perpnt curpnt) (abs space)))
  53.               (setq objlst (vl-catch-all-apply 'vla-offset (list obj space)))
  54.               (setq space (+ space space1))
  55.               (if (not (vl-catch-all-error-p objlst))
  56.                 (progn
  57.                   (setq objlst (vlax-safearray->list (vlax-variant-value objlst)))
  58.                   (setq objs (append objlst objs))
  59.                 )
  60.               )
  61.             )
  62.           )
  63.         )
  64.       )
  65.       ((member bb '((2 9))) ;;table 键
  66.         (sldis (slmsg "偏移新间距:?" "熬簿穝丁禯:?" "Offset New Spacing") (slmsg "间距=" "丁禯=" "Spacing=") "0" "12")
  67.         (setq dd sldis1 enam (entlast) obj (en2obj enam) objs nil)
  68.       )
  69.       ((member bb '((2 67) (2 99)))   ;;C c 换色
  70.         (repeat (setq n (length objs))
  71.           (vla-put-color (nth (setq n (1- n)) objs) (atoi (slsjqs)))
  72.         )
  73.         (setq enam (entlast) obj (en2obj enam) objs nil)
  74.       )
  75.       ((or t (member (car bb) '(11 25)) (member bb '((2 13))) (= (car bb) 3));;右键 右键 回车
  76.         (setq loop nil)
  77.       )
  78.     )
  79.   )
  80.   (princ)
  81. )
更新23,12,5




三领的世界:
链接:https://pan.baidu.com/s/1jnD-HBTYYXlMXMSLdJnGBg
提取码:2tin



本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2023-12-1 07:54 | 显示全部楼层
看起来真不错,感谢分享
发表于 2023-12-1 09:32 | 显示全部楼层
出现 参数太少????
发表于 2023-12-1 21:02 | 显示全部楼层
加载后如何使用呢?能自定义一个简单点的快捷命令吗?
发表于 2023-12-2 04:27 | 显示全部楼层
三领加这个还是很有必要的,很好用
 楼主| 发表于 2023-12-5 23:38 | 显示全部楼层
本帖最后由 尘缘一生 于 2023-12-5 23:55 编辑

改写:丢弃正交,没作用
完美再现:单根快速

    • ;;实体单向动态偏移---(一级)-----
    • ;enam 实体名 dd 偏移距离
    • ;三领集成 MODFY 尘缘一生 QQ 15290049
    • (defun ddenofdis (enam dd / loop bb obj objlst objs parper p0 p1 p2 n space space1 tp curpnt perpnt f3)
    •   (princ
    •     (slmsg
    •       "\n->偏移实体[连增(`~)/增一(TAB)/改间距(Space bar)/换色(C)/扑捉(F3)](左右键...->定位确定)"
    •       "\n->熬簿龟砰[硈糤(`~)/糤(TAB)/э丁禯(Space bar)/传︹(C)/汲(F3)](オ龄...->﹚絋﹚)"
    •       "\n->Offset entity [Continuous Add(`~)/Add One(TAB)/Change Spacing(Space Bar)/Color Change(C)/Osnap (F3)](Left-Right-Other keys-->locate to determine)"
    •     )
    •   )
    •   (setq obj (en2obj enam) tp (dxf1 enam 0) p1 (cadr (grread 5)) loop t objs nil f3 (getvar "OSMODE"))
    •   (while loop
    •     (setq bb (grread t 8 1) p0 (cadr bb))
    •     (cond
    •       ((equal bb '(2 6));F3切换捕捉开关
    •         (cond
    •           ((and (< f3 16384) (/= f3 0))
    •             (setq f3 (+ f3 16384))
    •             (prompt (slmsg "\n <对象捕捉 关>" "\n <癸禜 闽>" "\n <OSnap Off>"))
    •           )
    •           ((or (= f3 0) (>= f3 16384))
    •             (setq f3 16383)
    •             (prompt (slmsg "\n <对象捕捉 开>" "\n <癸禜 秨>" "\n <OSnap On>"))
    •           )
    •         )
    •         (setvar "OSMODE" f3) (redraw)
    •       )   
    •       ((= (car bb) 5)
    •         (redraw)
    •         (if (and (<= f3 16384) (> f3 0) (/= f8 1))
    •           (setq p0 (slosnappt nil p0))
    •         )
    •         (if objs (mapcar 'vla-erase objs))
    •         (setq objs nil curpnt (trans p0 1 0))
    •         (setq perpnt (vlax-curve-getclosestpointto enam curpnt T))
    •         (if (setq parper (vlax-curve-getParamAtPoint enam perpnt))
    •           (progn
    •             (if (> (det perpnt (mapcar '+ (vlax-curve-getFirstDeriv enam parper) perpnt) curpnt) 0)
    •               (setq space1 (- dd))
    •               (setq space1 dd)
    •             )
    •             (if (or (= tp "LINE") (= tp "XLINE"))
    •               (setq space1 (- space1))
    •             )
    •             (setq space space1)
    •             (repeat (fix (/ (distance perpnt curpnt) (abs space)))
    •               (setq objlst (vl-catch-all-apply 'vla-offset (list obj space)))
    •               (setq space (+ space space1))
    •               (if (null (vl-catch-all-error-p objlst)) ;无错
    •                 (progn
    •                   (setq objlst (vlax-safearray->list (vlax-variant-value objlst)))
    •                   (setq objs (append objlst objs))
    •                 )
    •               )
    •             )
    •           )
    •         )
    •         (grdraw p1 p0 3 2)
    •       )
    •       ((member bb '((2 9))) ;;table 键 +1  
    •         (redraw)
    •         (if objs (mapcar 'vla-erase objs))
    •         (vl-catch-all-apply 'vla-offset (list obj space1))
    •         (setq enam (entlast) obj (en2obj enam) loop nil)
    •       )
    •       ((member bb '((2 96) (2 126))) ;`~键
    •         (redraw)
    •         (setq p1 (cadr (grread 5)))
    •         (vl-catch-all-apply 'vla-offset (list obj space1))
    •         (setq enam (entlast) obj (en2obj enam))
    •       )
    •       ((or
    •          (equal bb '(2 32));空格,换距离
    •          (member bb '((2 115) (2 83)))  ;;S s
    •        )
    •         (sldis (slmsg "偏移新间距:?" "熬簿穝丁禯:?" "Offset New Spacing") (slmsg "间距=" "丁禯=" "Spacing=") "0" "12")
    •         (setq dd sldis1 enam (entlast) obj (en2obj enam) objs nil)
    •       )
    •       ((member bb '((2 67) (2 99)))   ;;C c 换色
    •         (repeat (setq n (length objs))
    •           (vla-put-color (nth (setq n (1- n)) objs) (atoi (slsjqs)))
    •         )
    •         (setq enam (entlast) obj (en2obj enam) objs nil)
    •       )
    •       ((or t (member (car bb) '(11 25)) (member bb '((2 13))) (= (car bb) 3)) ;右键 回车 左键
    •         (setq loop nil)
    •       )
    •     )
    •   )
    •   (redraw)
    •   (princ)
    • )
发表于 2023-12-7 19:25 来自手机 | 显示全部楼层
看起来效果很炫酷,不知道应用场景。
发表于 2024-3-13 11:57 | 显示全部楼层
用在下料方面也不错~预留余量~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-27 23:07 , Processed in 0.265118 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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