明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1289|回复: 3

[源码] 仿sketchup动态复制程序(如何支持属性块?)

[复制链接]
发表于 2022-7-30 17:25:11 | 显示全部楼层 |阅读模式
  1. ;_仿sketchup动态复制程序
  2. (defun   c:ddc (/ #err4 $orr p1 p2 s e cn a1 d1 ns cnn)
  3. ;__________________
  4.   (defun ttt (ss n / m)
  5.   (defun #err4 (s)
  6.     (command ".UNDO" "E")
  7.     (setvar "osmode" snap)
  8.     (setq *error* $orr)
  9.   )
  10.   (setq snap (getvar "osmode"))
  11.   (setvar "cmdecho" 0)
  12.   (setq $orr *error*
  13.         *error* #err4
  14.   )
  15.     (setq ee e
  16.       ns (ssadd)
  17.     )
  18.     (while (setq ee (entnext ee))
  19.       (setq ns (ssadd ee ns))
  20.     )
  21.     (command "erase" ns "")
  22.     (command "copy" ss "" "m" "non" p1)
  23.     (if (member (substr n (strlen n)) '("/" "*"))      
  24.       (progn
  25.   (setq m 0)
  26.   (repeat  (atoi n)
  27.     (setq m (1+ m))
  28.     (cond
  29.       ((= "/" (substr n (strlen n)))
  30.        (command "non"(mapcar '(lambda (x y) (+ x (* m (/ (- y x) (atof n))))) p1 p2))
  31.       )
  32.       ((= "*" (substr n (strlen n)))
  33.        (command "non"(mapcar '(lambda (x y) (+ x (* m (- y x)))) p1 p2))
  34.       )
  35.     )
  36.   )
  37.       )
  38.       (command "non" (setq p2 (polar p1 a1 (atof n))))
  39.     )
  40.     (command)
  41.   )
  42. ;__________________
  43.   (princ "\n动态复制程序")
  44.   (princ "\n选择要复制的物体:")
  45.   (setq s (ssget))
  46.   (setq p1 (getpoint "\n复制的起点:"))
  47.   (command "undo" "be" "line" p1 p1 "" )
  48.   (setq e (entlast) )
  49.   (command "copy" s "" "non" p1 pause)
  50.   (setq  p2 (getvar "lastpoint")
  51.   a1 (angle p1 p2)
  52.   d1 (distance p1 p2)
  53.   )
  54.   (setq cn "1*")
  55.   (while cn
  56.     (ttt s cn)
  57.     (initget 128)
  58.     (princ "\n输入坐标=复制终点                         输入数值=修改间距 ")
  59.     (princ "\n输入数值n并以 / 结束=间距内等分n次复制    输入数值n并以 * 结束=按间距复制n次 ")
  60.     (setq cnn (getpoint "\n请按提示输入<退出>:"))
  61.     (if  (= 'LIST (type cnn))
  62.       (setq p2 cnn
  63.       a1 (angle p1 p2)
  64.       d1 (distance p1 p2)
  65.       )
  66.       (setq cn cnn)
  67.     )
  68.   )
  69.   (entdel e)
  70.   (command "undo" "e")
  71.   (princ)
  72. )
一直不得要领,麻烦那位大神改一下?这个还是比较好用的,用习惯了的话,可以实时修改!
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2022-7-31 16:35:52 | 显示全部楼层
试了下,常规图形,图块,天正图块都能正常实现,动态属性块不能。是有些问题要改进。
我平常用的,只是无法动态修改
(defun C:CO ()
        (vl-cmdf "COPY" (LM:ssget "\ncopy阵列 选择对象:" nil) "" (getpoint "选择起点:") "A" (getint "\ncopy阵列 数量:") "F" )
)
;带提示的ssget
(defun LM:ssget ( msg arg / sel )
    (princ msg)
    (setvar 'nomutt 1)
    (if arg
                        (setq sel (vl-catch-all-apply 'ssget arg))
                        (setq sel (vl-catch-all-apply 'ssget ))
                )
    (setvar 'nomutt 0)
    (if (not (vl-catch-all-error-p sel)) sel)
)
 楼主| 发表于 2022-7-31 17:43:18 | 显示全部楼层
你平常用的不能动态调整,不如上面的好用!
发表于 2023-7-15 09:21:51 | 显示全部楼层
顶下楼主的贴,希望有大神出手完善,非常实用的功能。不能因为小有点问题就明珠蒙尘。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 22:21 , Processed in 0.169540 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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