找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4369|回复: 34

[求助] 带记忆的连续复制

[复制链接]
发表于 2013-7-14 10:42:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
此代码是连续复制 :  可以输入距离,也可以点两点确定距离,方向上是鼠标拖动个方向就确定(无须点两点确定)。按下空格就继续复制下去。 现有个问题是要在距离的问题上增加个默认上次连续复制的距离。也就是在输入距离这个时候我空格下就是默认的上次距离了(原,输入距离,和点两点确定距离还保留,当和上次距离不一样时就能用到了)  希望大家看看能解决不, 在实际画图中,这个使用的频率还是很高的。代码如下     (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)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2013-7-14 10:47:51 | 显示全部楼层
发个这样的图片   
fz.gif
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-7-14 10:49:57 | 显示全部楼层
距离一样的就用 array 不是更好

点评

阵列个数不多的情况下..还是楼主的方法更人性化  详情 回复 发表于 2013-7-14 11:56
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-14 11:00:35 | 显示全部楼层
考虑画图的方便,快捷。array还要出现对话框设置参数什么的。默认是一样,也可以输入距离(不一样的情况下),
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-7-14 11:12:28 | 显示全部楼层
  1. (defun c:fz (/ an dis p p1 p2 s sa ss tf getlastss)
  2.   (defun getlastss (s / sa)
  3.     (setq sa (ssadd))
  4.     (while (setq s (entnext s)) (ssadd s sa))
  5.     sa
  6.   )
  7.   (setq ss  (ssget)
  8. p   ""
  9. p1  (getpoint "\n起点:")
  10. p2  (getpoint "\n第二点:" p1)
  11. an  (angle p1 p2)
  12. dis (distance p1 p2)
  13.   )
  14.   (setq s (entlast))
  15.   (command "copy" ss "" p1 p2)
  16.   (setq sa (getlastss s)
  17. tf t
  18.   )
  19.   (while tf
  20.     (setq p (getstring (strcat "\n[E - exti]空格键继续[或输入距离]<"
  21.           (rtos dis 2 2)
  22.           ">:"
  23.          )
  24.      )
  25.     )
  26.     (cond
  27.       ((= p "") (setq p dis))
  28.       ((numberp (distof p)) (setq dis (distof p)))
  29.       (t
  30.        (setq dis nil
  31.       tf  nil
  32.        )
  33.       )
  34.     )
  35.     (if dis
  36.       (progn
  37. (setq p1 p2
  38.        p2 (polar p1 an dis)
  39.        ss sa
  40. )
  41. (setq s (entlast))
  42. (if p
  43.    (command "copy" ss "" p1 p2)
  44. )
  45. (setq sa (getlastss s))
  46.       )
  47.     )
  48.   )
  49.   (princ)
  50. )

点评

大侠你的代码:方向和上一次一样的时候才可以默认上次的距离, 比如上次是竖直方向的连续复制,下次要是水平方向的连续复制就不行了。加油大侠,呵呵  详情 回复 发表于 2013-7-14 12:10
大侠这个还是不行啊, 那个默认的 我敲空格没反应的  详情 回复 发表于 2013-7-14 11:26
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-14 11:26:53 | 显示全部楼层

大侠这个还是不行啊,  那个默认的  我敲空格没反应的  

点评

如何不行?  详情 回复 发表于 2013-7-14 11:36
空格键继续[或输入距离] 你的这个是在一次连续复制的过程中可以改变复制的间距的 。我的意思是下次在使用这个命令会记住上次的距离的~~~~  详情 回复 发表于 2013-7-14 11:33
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-14 11:33:25 | 显示全部楼层
--@----- 发表于 2013-7-14 11:26
大侠这个还是不行啊,  那个默认的  我敲空格没反应的

空格键继续[或输入距离]    你的这个是在一次连续复制的过程中可以改变复制的间距的 。我的意思是下次在使用这个命令会记住上次的距离的~~~~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-7-14 11:36:24 | 显示全部楼层
--@----- 发表于 2013-7-14 11:26
大侠这个还是不行啊,  那个默认的  我敲空格没反应的

如何不行?
fz.gif
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-14 11:42:34 | 显示全部楼层
你的这是在一次使用的过程中,我想表达的是下次我在调用这个命令的时候 如果距离和上次的是一样,我就不用输入距离了  空格就完事了:)

点评

你只想让COPY复制距离有个记忆功能是吗?>?  详情 回复 发表于 2013-7-14 12:08
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

发表于 2013-7-14 11:56:11 | 显示全部楼层
st788796 发表于 2013-7-14 10:49
距离一样的就用 array 不是更好

阵列个数不多的情况下..还是楼主的方法更人性化

点评

如果用这个命令 出现这个对话框然后在去选择物体,就很麻烦了 。所以网上很多人需要阵列的或者连续复制的方法了,出发点是考虑更快点,呵呵  详情 回复 发表于 2013-7-14 12:02
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-7-14 11:57:55 | 显示全部楼层
要多按一次空格,有空再调
  1. (defun c:fz (/ an dis p p1 p2 s sa ss tf getlastss)
  2.   (defun getlastss (s / sa)
  3.     (setq sa (ssadd))
  4.     (while (setq s (entnext s)) (ssadd s sa))
  5.     sa
  6.   )
  7.   (if (and (setq ss (ssget))
  8.     (setq p1 (getpoint "\n起点:"))
  9.       )
  10.     (progn
  11.       (setq
  12. p2 (getpoint p1
  13.        (if $discopy
  14.          (strcat "\n第二点<" (rtos $discopy 2 2) ">:")
  15.          "\n第二点: "
  16.        )
  17.     )
  18.       )
  19.       (if (= p2 nil)
  20. (setq p2 (cadr (setq code_12 (grread (setq code_12 (grread)))))
  21.        p2 (polar p1 (angle p1 p2) $discopy)
  22. )
  23.       )
  24.       (setq an (angle p1 p2)
  25.      dis (distance p1 p2)
  26.      $discopy dis
  27.       )
  28.       (setq s (entlast))
  29.       (command "copy" ss "" p1 p2)
  30.       (setq sa (getlastss s)
  31.      tf t
  32.       )
  33.       (while tf
  34. (setq
  35.    p (getstring (strcat "\n[E - exti]空格键继续[或输入距离]<"
  36.           (rtos dis 2 2)
  37.           ">:"
  38.          )
  39.      )
  40. )
  41. (cond
  42.    ((= p "") (setq p dis))
  43.    ((numberp (distof p)) (setq dis (distof p) $discopy dis))
  44.    (t
  45.     (setq dis nil
  46.    tf  nil
  47.     )
  48.    )
  49. )
  50. (if dis
  51.    (progn
  52.      (setq p1 p2
  53.     p2 (polar p1 an dis)
  54.     ss sa
  55.      )
  56.      (setq s (entlast))
  57.      (if p
  58.        (command "copy" ss "" p1 p2)
  59.      )
  60.      (setq sa (getlastss s))
  61.    )
  62. )
  63.       )
  64.     )
  65.   )
  66.   (princ)
  67. )

点评

而且退出也不够人性化!!!要按E键  详情 回复 发表于 2013-7-14 12:11
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-14 12:02:39 | 显示全部楼层
ysq101 发表于 2013-7-14 11:56
阵列个数不多的情况下..还是楼主的方法更人性化

如果用这个命令 出现这个对话框然后在去选择物体,就很麻烦了 。所以网上很多人需要阵列的或者连续复制的方法了,出发点是考虑更快点,呵呵   
QQ图片20130714115905.jpg

点评

在 lisp 是不会出现对话框的 [code=lisp] (if (setq ss (ssget)) (vl-cmdf ".-array" ss "" "r" pause 1 pause pause) )[/code[  详情 回复 发表于 2013-7-14 23:33
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

发表于 2013-7-14 12:08:15 | 显示全部楼层
--@----- 发表于 2013-7-14 11:42
你的这是在一次使用的过程中,我想表达的是下次我在调用这个命令的时候 如果距离和上次的是一样,我就不用 ...

你只想让COPY复制距离有个记忆功能是吗?>?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-14 12:10:05 | 显示全部楼层

大侠你的代码:方向和上一次一样的时候才可以默认上次的距离,  比如上次是竖直方向的连续复制,下次要是水平方向的连续复制就不行了。加油大侠,呵呵
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

发表于 2013-7-14 12:11:02 | 显示全部楼层
st788796 发表于 2013-7-14 11:57
要多按一次空格,有空再调

而且退出也不够人性化!!!要按E键

点评

空格已经是继续复制了 那也只能是按esc了 不过我觉得按esc也是很方便的  详情 回复 发表于 2013-7-14 12:22
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-25 10:28 , Processed in 0.530824 second(s), 69 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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