找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1687|回复: 11

[求助] 带记忆的连续复制,求助各位大侠帮忙完善下

[复制链接]
发表于 2013-11-16 11:38:07 | 显示全部楼层 |阅读模式

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

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

×
先发个原来的帖子求助,原帖子内容如下: 此代码是连续复制 :  可以输入距离,也可以点两点确定距离,方向上是鼠标拖动个方向就确定(无须点两点确定)。按下空格就继续复制下去。 现有个问题是要在距离的问题上增加个默认上次连续复制的距离。也就是在输入距离这个时候我空格下就是默认的上次距离了(原,输入距离,和点两点确定距离还保留,当和上次距离不一样时就能用到了)  希望大家看看能解决不, 在实际画图中,这个使用的频率还是很高的。代码如下     (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)
)
下面的代码是可以实现记忆功能了,但是在确定距离的时候只能输入距离值,不能点击屏幕上的两点来确定距离值,有点遗憾,现在我想实现的是带记忆的可以输入距离值也可以点击屏幕上的两点来确定的连续复制功能(此点击两点既是方向,又是距离。避免点击两点确定方向,再点击两点确定距离的麻烦) (defun c:cc( / an dis p p1 p2 s sa ss m)
  (setq ss (ssget)
        p1 (getpoint "\n起点:")
        p2 (getpoint "\n第二点:" p1)
        an (angle p1 p2)
   )
  (if (= nil dis_backup)
      (setq
          dis (distance p1 p2)
          dis_backup dis
   )
   (progn  
   (setq m (getstring "\n空格[上次距离]数字【新值】:"))
   (if (= "" m)
     (setq dis dis_backup);当按空格时选择上次距离
     
     ;-------------------------
     ;选择这次距离,并且备份
     (progn     
     (setq dis (atof m)
           dis_backup dis     
     )
  )
     ;-------------------------
     
   )
   )
  )
  
  (setq s (entlast)
   sa (ssadd)
   p2 (polar p1 an dis)
  )
  (command "copy" ss "" p1 p2)
  (setq s (entnext s))
  (while s (ssadd s sa)
        (setq s (entnext s))
   )
  (setq p (getstring "\n空格键继续:"))
  (while (= p "" )
    (setq
          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)))
    (setq p (getstring "\n空格键继续:"))
  )
  (princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2013-11-16 11:40:16 | 显示全部楼层
大家有时间的可以研究下 下面发个这个功能相关的图片
4.gif

点评

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-11-16 11:45:55 | 显示全部楼层
--@----- 发表于 2013-11-16 11:40
大家有时间的可以研究下 下面发个这个功能相关的图片

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

使用道具 举报

 楼主| 发表于 2013-11-16 12:02:28 | 显示全部楼层
我不会写,呵呵,这个是集天正,LSP,迷你做了一个图片的{:soso_e113:}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-11-16 13:56:41 来自手机 | 显示全部楼层
第二个getpoint改成getdist,接下来需要一个获取光标位置函数来确定方向
或者第二个getpoint配合initget,允许输入数值,同样需要一个获取当前光标位置函数
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-11-16 21:31:50 | 显示全部楼层
一个小测试
  1. (defun c:tt (/ p1 p2 p20)
  2.   (if (and (setq p1 (getpoint "\nBase Point: "))
  3.            (setq p2 (getdist p1 "\nSencond Point: "))
  4.       )
  5.     (progn
  6.       (setq p20 (cadr (grread t 15 0)))
  7.       (princ "\nDistance = ")
  8.       (princ p2)
  9.       (princ "\nSencond Point = ")
  10.       (princ p20)
  11.       (princ "\nDis = ")
  12.       (princ (distance p1 p20))
  13.     )
  14.   )
  15.   (princ)
  16. )

点评

不行啊 这个是要加载晓东的工具吗? 我的命令行出现的是英文,执行没反应。  详情 回复 发表于 2013-11-16 21:40
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-16 21:40:27 | 显示全部楼层

不行啊 这个是要加载晓东的工具吗?  我的命令行出现的是英文,执行没反应。

点评

改造 Getpoint p2  详情 回复 发表于 2013-11-16 21:57
只是给你一个方法,既能输入距离也能获取方向,另外一个用 Getpoint 方法  详情 回复 发表于 2013-11-16 21:50
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-11-16 21:50:56 | 显示全部楼层
--@----- 发表于 2013-11-16 21:40
不行啊 这个是要加载晓东的工具吗?  我的命令行出现的是英文,执行没反应。

只是给你一个方法,既能输入距离也能获取方向,另外一个用 Getpoint 方法

  1. (defun c:tt (/ p1 p2 dis)
  2.   (if (and (setq p1 (getpoint "\nBase Point: "))
  3.            (progn
  4.              (initget 128)
  5.              (setq p2 (getpoint p1 "\nSecond Point or Distance: "))
  6.            )
  7.       )
  8.     (progn
  9.       (if (= (type p2) 'STR)
  10.         (progn (setq dis p2
  11.                      p2         (cadr (grread t 15 0))
  12.                )
  13.                (princ "\nYou Input = ")
  14.                (princ dis)
  15.                (princ "\nCursor Coord = ")
  16.                (princ p2)
  17.                (princ "\nAngle = ")
  18.                (princ (angle p1 p2))
  19.         )
  20.         (progn
  21.           (setq dis (distance p1 p2))
  22.           (princ "\nYour Pick Coord = ")
  23.           (princ p2)
  24.           (princ "\nDistance = ")
  25.           (princ dis)
  26.           (princ "\nAngle = ")
  27.           (princ (angle p1 p2))
  28.         )
  29.       )
  30.     )
  31.   )
  32.   (princ)
  33. )

点评

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

使用道具 举报

 楼主| 发表于 2013-11-16 21:57:47 | 显示全部楼层
st788796 发表于 2013-11-16 21:50
只是给你一个方法,既能输入距离也能获取方向,另外一个用 Getpoint 方法

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-11-16 21:57:59 | 显示全部楼层
--@----- 发表于 2013-11-16 21:40
不行啊 这个是要加载晓东的工具吗?  我的命令行出现的是英文,执行没反应。

改造 Getpoint p2

  1. (defun c:cc (/ an dis p p1 p2 s sa ss m d)
  2.   (if (and
  3.         (setq ss (ssget)
  4.               p1 (getpoint "\n起点:")
  5.         )
  6.         (progn
  7.           (initget 128)
  8.           (setq p2 (getpoint "\n第二点<距离>:" p1))
  9.           (if (= (type p2) 'STR)
  10.             (setq d  p2
  11.                   p2 (grread t 15 0)
  12.                   p2 (polar p1 (angle p1 p2) (distof d))
  13.             )
  14.             p2
  15.           )
  16.         )
  17.       )
  18.     (progn
  19.       (setq an (angle p1 p2))
  20.       (if (= nil dis_backup)
  21.         (setq
  22.           dis             (distance p1 p2)
  23.           dis_backup dis
  24.         )
  25.         (progn
  26.           (setq m (getstring "\n空格[上次距离]数字【新值】:"))
  27.           (if (= "" m)
  28.             (setq dis dis_backup)        ;当按空格时选择上次距离
  29.             (progn
  30.               (setq dis        (atof m)
  31.                     dis_backup
  32.                      dis
  33.               )
  34.             )
  35.           )
  36.         )
  37.       )
  38.       (setq s  (entlast)
  39.             sa (ssadd)
  40.             p2 (polar p1 an dis)
  41.       )
  42.       (command "copy" ss "" p1 p2)
  43.       (setq s (entnext s))
  44.       (while s
  45.         (ssadd s sa)
  46.         (setq s (entnext s))
  47.       )
  48.       (setq p (getstring "\n空格键继续:"))
  49.       (while (= p "")
  50.         (setq
  51.           p1 p2
  52.           p2 (polar p1 an dis)
  53.           ss sa
  54.         )
  55.         (setq s         (entlast)
  56.               sa (ssadd)
  57.         )
  58.         (if p
  59.           (command "copy" ss "" p1 p2)
  60.         )
  61.         (setq s (entnext s))
  62.         (while s (ssadd s sa) (setq s (entnext s)))
  63.         (setq p (getstring "\n空格键继续:"))
  64.       )
  65.     )
  66.   )
  67.   (princ)
  68. )

点评

感觉增加记忆功能的跟点击两点确定距离有冲突:也就是说我点击两点按下空格是默认上次距离值(也就是记忆上次的)还是以这两点的距离作为间距呢。所以我像现在想点击两点的按下空格是默认上次的,输入距离值是按输入  详情 回复 发表于 2013-11-16 22:25
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-16 22:25:04 | 显示全部楼层
本帖最后由 --@----- 于 2013-11-16 22:51 编辑


感觉增加记忆功能的跟点击两点确定距离是有冲突的:也就是说我点击两点按下空格是默认上次距离值呢,还是以这两点的距离作为间距呢。所以用空格键判定不了。我现在想:点击两点  按下空格是默认上次的;输入距离值是按输入距离值执行的;按左键是默认这两点的距离作为复制间距执行的;这只是个想法,避免了上述的冲突,还保留了功能的齐全!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 36个

财富等级: 招财进宝

发表于 2014-4-11 15:11:35 | 显示全部楼层
研究一下,学习中...
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 00:40 , Processed in 0.224794 second(s), 62 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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