明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1811|回复: 14

[源码] 很久没发贴了,发个动态复制,当作报到一下吧。

[复制链接]
发表于 2022-2-7 02:36 | 显示全部楼层 |阅读模式
;=======================动态复制========================================
(defun c:ccd ( / s1 p1 p2 di n1 n2 st gr tt ang s2 li txt doc err )
  (setq s1 (ssget))
  (setq s1 (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex s1)))))
  (setq p1 (getpoint "\n请选择基点:"))
  (setq di (getdist p1 "\n请输入间距:"))
  (setq doc (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))
  (setq err *error*)
  (defun *error* (msg)
    (foreach n2 li (vla-delete n2))
    (setq *error* err)
    (princ)
    )
  (command "undo" "be")
  (setq tt t)
  (while tt
    (setq gr (grread t 4 2))
    (cond
      ((= (car gr) 5)
       (progn
         (if li (foreach n2 li (vla-delete n2)))
         (setq p2 (osnap (cadr gr) "_nea"))
         (if (null p2) (setq p2 (cadr gr)))
         (setq n1 1)
         (setq ang (angle p1 p2))
         (setq txt (vla-addtext doc (strcat "间距:" (itoa (fix (/ (distance p1 p2) di)))) (vlax-3d-point p2) 400))
         (vla-put-color txt 6)
         (setq li (list txt))
         (repeat (fix (/ (distance p1 p2) di))
           (foreach n2 s1
             (progn
               (setq s2 (vla-copy n2))
               (vla-move s2 (vlax-3d-point (trans p1 1 0)) (vlax-3d-point (trans (polar p1 ang (* di n1)) 1 0)))
               (setq li (append li (list s2)))
               )
             )
           (setq n1 (1+ n1))
           )
         ))
      ((= (car gr) 3) (vla-delete txt) (setq tt nil))
      )
    )
  (command "undo" "e")
  (princ)
  )
1.因为是实时复制,对象大多的话会卡,如果确实需要多对象复制的话,建议做成块再复制。
2.这个脚本可以看成在世界坐标中,二维任意方向的单向陈列,里面没有加ucs转换。
3.因为是任意方向,所以没有进行坐标轴的锁定,可以自己做辅助线, 这个脚本可以捕捉邻近点。
4.我不会做动态演示,就这样吧。

评分

参与人数 3明经币 +3 收起 理由
liwen888888 + 1 很给力!
panliang9 + 1 很给力!
bssurvey + 1 新年新希望,赞一个!

查看全部评分

 楼主| 发表于 2022-2-8 23:27 | 显示全部楼层
cghdy 发表于 2022-2-8 15:42
过程中不能切换正交,唯一的小缺憾

正交的方向应该很容易找到可以当成辅助线的的吧,我用的时候基本不会有这方面的困扰。反而是非正交经常需要做辅助线。
 楼主| 发表于 2022-3-18 00:19 | 显示全部楼层
mubin1979 发表于 2022-3-16 11:32
楼主,在cad2008中,选择对象后出现:
; 错误: no function definition: nil

在最前面加句(vl-load-com)试试,应该能行。
发表于 2022-3-16 11:32 | 显示全部楼层
楼主,在cad2008中,选择对象后出现:
; 错误: no function definition: nil
发表于 2022-2-7 10:41 | 显示全部楼层
好贴,谢谢分享!
发表于 2022-2-7 22:16 | 显示全部楼层
谢谢分享,好贴!
发表于 2022-2-8 15:42 | 显示全部楼层
过程中不能切换正交,唯一的小缺憾
发表于 2022-2-11 09:35 | 显示全部楼层
很强,谢谢分享
发表于 2022-2-13 14:34 | 显示全部楼层
很强,谢谢分享
发表于 2022-2-13 16:51 | 显示全部楼层
好贴,谢谢分享!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-25 14:13 , Processed in 0.164281 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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