明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1595|回复: 25

[源码] 发个简单的小程序,预设两点执行copy操作

[复制链接]
发表于 2021-6-14 19:07 | 显示全部楼层 |阅读模式
本帖最后由 masterlong 于 2021-6-19 19:00 编辑

;;CC2P```预设两点,作为2CC命令的起点与终点
;;2CC````以预设2点进行快速复制
(defun c:cc2p()
(princ "\nCC2P```预设两点,作为2CC命令的起点与终点 \n2CC````以预设2点进行快速复制")
(if (and
    (setq p1 (getpoint "\n指定预设第1点 : "))
    (princ " ok ")
    (setq p2 (getpoint p1 "\n指定预设第2点 : "))
    (princ " ok ")
  )
  (progn
   (setq cc2p###2plist (list (u2w p1) (u2w p2)))
   (princ "\n预设复制坐标已完成,可使用【2CC】命令进行快速复制")
  )
)
(princ)
)
(defun c:2cc()
(princ "\nCC2P```预设两点,作为2CC命令的起点与终点 \n2CC````以预设2点进行快速复制")
(if cc2p###2plist
  (if (setq ss (ssget))
   (progn
      ;;以下为个人使用习惯,可屏蔽-----复制后对象形成“上一选择集”
      (setq ent (entlast))
    (command "copy" ss "" "non" (w2u (car cc2p###2plist))  "non" (w2u (cadr cc2p###2plist)))
    (princ "\n预设点快速复制已完成")
      ;;以下为个人使用习惯,可屏蔽-----复制后对象形成“上一选择集”
      (setq ss (entbackss ent))
      (if (null ss)
       (setq ss (ssadd))
      )
      (oldss2act ss)
   )
  )
  (progn
   (c:cc2p)
   (c:2cc)
  )
)
(princ)
)

;999`````````````````````````````````````````````公共函数
;999公共函数
;;坐标WCS=>UCS
(defun w2u( pt )
(trans pt 0 1)
)
;999公共函数
;;坐标UCS=>WCS
(defun u2w( pt )
(trans pt 1 0)
)
;999公共函数
;;获取在图元 ent 之后产生的图元的选择集 ,ent不存在时返回nil
(defun entbackss ( ent / backss)
(if (and ent (entget ent))
  (progn
   (setq backss (ssadd))
   (while (setq ent (entnext ent))
    (if (not (member (cdr (assoc 0 (entget ent))) '("ATTRIB" "VERTEX" "SEQEND")))
     (setq backss (ssadd ent backss))
    )
   )
   (if (zerop (sslength backss))
    (setq backss NIL)
   )
   backss
  )
)
)

;999公共函数
;;一个已存在的选择集,设置成当前选择集
(defun oldss2act( oldss )
(sssetfirst Nil oldss)  ;;将选择集设为夹点显示模式
(ssget "i")
(sssetfirst nil nil)  
)

点评

masterlong长老,能不能再产生一个变化,改成预设两点stretch, 即象你现在的copy一样的,预设两点后,后面执行各种选定操作对象后,都执行前面预设两点的stretch.  发表于 2021-6-17 08:47

评分

参与人数 1明经币 +1 收起 理由
start4444 + 1 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2021-6-19 18:59 | 显示全部楼层
cj52000 发表于 2021-6-18 09:58
大师,按照你说的已经改了,如下图示,但是运行后提示如下

命令: cc2p

按你的需求应该是下面这样
(defun c:cc2p()
        (princ "\nCC2P```预设两点,作为2CC命令的起点与终点 \n2CC````以预设2点进行快速复制")
        (if (and
                                (setq p2 (getpoint "\n指定预设终点 : "))
                                (princ " ok ")
                                (setq p1 (getpoint p2 "\n指定预设基点 : "))
                                (princ " ok ")
                )
                (progn
                        (setq cc2p###2plist (list (u2w p1) (u2w p2)))
                        (princ "\n预设复制坐标已完成,可使用【2CC】命令进行快速复制")
                )
        )
(princ)
)

另外说一句
因为这个程序是单独命令设置基点和终点
所以改变指定基点终点的顺序
其实没有意义
反而容易操作失误
如果是实时指定点坐标
那可能有一点点用
但是彻底颠覆操作顺序
我认为欠妥
发表于 2021-6-29 21:18 | 显示全部楼层
(defun c:tt5 ( / ent ss )
  (if (setq ss (ssget))
   (progn
(setq ent (entlast))
    (command "copy" ss "" pause pause)

(command)


(setq ss (entbackss ent))
      (if (null ss)
       (setq ss (ssadd))
      )
      (oldss2act ss)
)
)
)
 楼主| 发表于 2021-6-15 16:39 | 显示全部楼层
这是特殊情况下的应用解决方案
并不适合常规场景的应用

首先
“复制”这个动作会非常频繁
但并不是一次“复制”接一次“复制”
而是“复制”与“复制”之间会有很多其它操作
其次复制对象并不固定
最后
“复制完成时”的视窗
我需要停留在复制对象所在的区域
 楼主| 发表于 2021-6-14 19:13 | 显示全部楼层
现在经常会有多次的超远距离的复制操作
需要不停的缩放窗口
这个程序的目的
就是预设起点与终点
直接选择对象完成复制

点评

当年就是因为PKPM中有这个功能,而AutoCAD中没有,因而开始了 AutoLISP 的编程学习。 这个功能也是我最早写的那几个 AutoLISP程序之一了,一直用到现在...  发表于 2021-6-16 12:02
当年就是因为PKPM中有这个功能,而AutoCAD中没有,因而开始了 AutoLISP 的编程学习。 这个功能也是我最早写的那几个 AutoLISP程序之一了,一直用到现在...  发表于 2021-6-16 12:02
发表于 2021-6-15 09:37 | 显示全部楼层
这种情况用Ctrl+shift+C更方便吧
发表于 2021-6-15 10:17 | 显示全部楼层
遇到这种情况,我用对齐命令 align ,只对齐1点,还有1个好处,可以用 ‘P 上次选择的内容重复移动
 楼主| 发表于 2021-6-15 16:51 | 显示全部楼层
简单说
copy命令是先选择对象再选择基点终点
由于基点终点相隔非常远
复制的同时伴随了非常多的视窗缩放操作

而这个是先指定并记忆了基点终点再选择对象
因为基点终点相对固定
从而省略了大量的视窗缩放操作
发表于 2021-6-16 08:59 | 显示全部楼层
非常有价值的程序,谢谢楼主分享。
发表于 2021-6-16 09:39 | 显示全部楼层
非常好的创意,,谢谢楼主的分享
发表于 2021-6-16 19:30 | 显示全部楼层
哈哈 刚想说空了 自己写一个 结果发现有现成的 很不错 感谢分享
发表于 2021-6-16 19:58 | 显示全部楼层
谢谢! 楼主分享程序!!!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-19 10:14 , Processed in 0.438774 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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