明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 8065|回复: 25

带记忆的连续复制

  [复制链接]
发表于 2013-7-14 11:14 | 显示全部楼层 |阅读模式
此代码是连续复制 :  可以输入距离,也可以点两点确定距离,方向上是鼠标拖动个方向就确定(无须点两点确定)。按下空格就继续复制下去。 现有个问题是要在距离的问题上增加个默认上次连续复制的距离。也就是在输入距离这个时候我空格下就是默认的上次距离了(原,输入距离,和点两点确定距离还保留,当和上次距离不一样时就能用到了)  希望大家看看能解决不, 在实际画图中,这个使用的频率还是很高的。代码如下     (defun c:fz( / an dis p p1 p2 s sa ss)
  (setq ss (ssget) p ""
        p1 (getpoint "\n起点:")
        p2 (getpoint "\n第二点:" p1)
        an (angle p1 p2) dis (distance p1 p2)
  )
  (setq s (entlast) sa (ssadd))
  (command "copy" ss "" p1 p2)
  (setq s (entnext s))
  (while s (ssadd s sa)(setq s (entnext s)))
  (while (= p "" )
    (setq p (getstring "\n空格键继续:")
          p1 p2 p2 (polar p1 an dis)
          ss sa
    )
    (setq s (entlast) sa (ssadd))
    (if p
      (command "copy" ss "" p1 p2)
    )
     
    (setq s (entnext s))
    (while s (ssadd s sa)(setq s (entnext s)))
  )
  (princ)
)

点评

复制时缺少动态阴线预览,如果能完善就好了  发表于 2019-7-11 03:10

评分

参与人数 1金钱 +5 收起 理由
dazuyishi1314 + 5

查看全部评分

发表于 2013-12-12 15:52 | 显示全部楼层
别人的你可以参考一下。
; 连续复制
(defun c:cc(/ oce ss p1 p2)
(setq oce(getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq ss (ssget))
(if (null ss) (exit))
(setq p0(getpoint"\n指定基点:"))
(setq p2 p0)
(if (null p0 )(exit))
(princ "\n指定第二点或位移:")
(while t
(setq p1(getpoint p0))
(if (null p1) (mosi11) (mosi12))
)
(princ)
)
(defun mosi12()
(command ".copy" ss "" "m" p2 p1 "")
(setq juli (distance p0 p1))
(setq  x0 (car p0))
(setq  y0 (cadr p0))
(setq p0 p1)
(setq  x1 (car p1))
(setq  y1 (cadr p1))
(setq  x (- x1 x0))
(setq  y (- y1 y0))
(setq   hudu(atan y x) )
(setq  x1 (+ x0 x))
(setq  y1 (+ y0 y))
(setq  p1 (list x1 y1 0.0))
(princ (strcat "\n指定下一点或继续位移<" (rtos juli ) ">:"))
)

(defun mosi11()
      (setq p1 (list (+ (nth 0 p0) (* juli (cos hudu)))
                     (+ (nth 1 p0) (* juli (sin hudu)))
                     (nth 2 p0)
               )
      )
(command ".copy" ss "" "m" p2 p1 "")
(setq juli (distance p0 p1))
(setq p0 p1)
(princ (strcat "\n指定下一点或继续位移<" (rtos juli ) ">:"))
)

点评

牛  发表于 2015-4-4 23:35
回复 支持 1 反对 0

使用道具 举报

发表于 2020-2-29 21:48 | 显示全部楼层
本帖最后由 纵横八方 于 2020-3-1 20:33 编辑

我帮你解决了
一定呀加个判断 是否继续上次距离DIS,不可能一直都用这个距离DIS,万一想改动呢
(defun c:fz (/ an n p p1 p2 ss)
  (setq        ss (ssget)
        p1 (getpoint "\n起点:")
        p2 (getpoint "\n第二点:" p1)
        an (angle p1 p2)
        n  1
  )
  (if (null dis)
    (progn
      (setq dis (distance p1 p2))
      (command "copy" ss "" "non" p1 "non" p2)
      (rr)
    )
    (progn
      (initget "y n")
      (setq p (getkword "继续上次距离:[是(y)/否(n)]<y>:"))
      (cond
        ((= p "y")
         (command "copy" ss "" "non" p1 "non" (polar p1 an dis))
        )
        ((= p "n")
         (command "copy" ss "" "non" p1 "non" p2)
         (setq dis (distance p1 p2))
        )
        (t (command "copy" ss "" "non" p1 "non" (polar p1 an dis)))
      )
    )
  )
  (rr)
  (princ)
)

(defun rr (/ p p2)
    (while (setq p (getstring "\n空格键继续:"))
    (setq n (+ n 1))
    (setq p2 (polar p1 an (* n dis)))
    (command "copy" ss "" p1 p2)
    (rr)
  )
)
发表于 2022-5-11 14:25 | 显示全部楼层
纵横八方 发表于 2020-2-29 21:48
我帮你解决了
一定呀加个判断 是否继续上次距离DIS,不可能一直都用这个距离DIS,万一想改动呢
(defun c:f ...

大佬  为什么图元复制之后回偏移位置呢
 楼主| 发表于 2013-7-14 11:18 | 显示全部楼层
本帖最后由 左怀政 于 2013-7-14 11:21 编辑

发个图片,要求图片上的带连续复制带记忆距离的

本帖子中包含更多资源

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

x
发表于 2013-12-1 12:04 | 显示全部楼层
好东西,谢谢了
发表于 2014-4-24 14:50 | 显示全部楼层
dhtfm 发表于 2013-12-12 15:52
别人的你可以参考一下。
; 连续复制
(defun c:cc(/ oce ss p1 p2)

程序不错,支持
发表于 2014-5-2 10:54 | 显示全部楼层
收藏了,谢谢分享!
发表于 2014-11-1 18:30 | 显示全部楼层
赞,已经收藏..
发表于 2014-11-6 02:43 来自手机 | 显示全部楼层
捕捉打开时靠近物体时会错位
发表于 2015-5-17 19:38 | 显示全部楼层
新人学习中
发表于 2019-7-9 12:49 | 显示全部楼层
程序很好,收藏了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 06:23 , Processed in 0.214030 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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