明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: edrise

[源码] 连续旋转复制

[复制链接]
 楼主| 发表于 2018-4-9 16:40:13 | 显示全部楼层
ssyfeng 发表于 2018-4-9 15:13
看看是不是你要的效果:

非常棒,非常感谢!我写的那段我也想到了一些解决办法,还没付诸实施,兄台这个我就先笑纳了,嘿嘿~
发表于 2018-4-10 08:34:15 | 显示全部楼层
真的很不错
 楼主| 发表于 2018-4-10 13:55:52 | 显示全部楼层
本帖最后由 edrise 于 2018-4-10 17:14 编辑

经过测试,证实我结束循环的办法可行,算是解决了我目前的需求吧。更新一下代码
  1. (defun c:rtc (/ *error* pt1 pt2 ss a x y z)
  2.   (defun *error* (msg)
  3.     (setvar "cmdecho" a)
  4.     (command ".undo" "e")
  5.     (princ "error: ")
  6.     (princ msg)
  7.     (princ)
  8.     )
  9.   (setq a (getvar "cmdecho"))
  10.   (setvar "cmdecho" 0)
  11.   (setq ss (ssget) x nil y nil z t)
  12.   (setq pt1 (getpoint "选择基点"))
  13.   (setq pt2 (getpoint pt1 "\n选择第一角点"))
  14.   (while z
  15.     (setq x (entget (entlast)))
  16.     (command ".undo" "be")
  17.     (command "rotate" ss "" pt1 "c" "r" pt1 pt2 pause)
  18.     (command ".undo" "e")
  19.     (setq y (entget (entlast)))
  20.     (setq z (judge_coincide x y))
  21.   )
  22.   (command ".undo" "")
  23.   (setvar "cmdecho" a)
  24. )

  25. (defun judge_coincide(ls1 ls2 / a b)
  26.   (setq a (assoc 10 ls1))
  27.   (setq b (assoc 10 ls2))
  28.   (if (and
  29.   (= 0 (- (nth 1 a) (nth 1 b)))
  30.   (= 0 (- (nth 2 a) (nth 2 b)))
  31.   )
  32.     nil
  33.     t
  34.     )
  35.   )






 楼主| 发表于 2018-4-10 14:10:52 | 显示全部楼层
本帖最后由 edrise 于 2018-4-10 16:18 编辑

发现bug,程序执行过程中如果按ESC键退出,如果想撤回复制操作,需要先执行(command ".undo" "e")命令才能撤回,尴尬......加入错误处理函数以解决,详上楼代码。
发表于 2018-4-10 17:32:17 | 显示全部楼层


以基点A旋转多段线或直线,组码10的坐标相等,就会有问题。

本帖子中包含更多资源

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

x
 楼主| 发表于 2018-4-11 08:12:04 | 显示全部楼层
ssyfeng 发表于 2018-4-10 17:32
以基点A旋转多段线或直线,组码10的坐标相等,就会有问题。

0_0对的,这个bug是我这个方法目前无法解决的问题,只能另辟蹊径了。道友的代码要是能在复制过程中可以捕捉点就好了。因为学得还很浅,只能用一些简单的方法实现自己的目标,道友的代码现在我还看不懂,所以也没法自己改
发表于 2018-4-11 10:24:47 | 显示全部楼层
本帖最后由 ssyfeng 于 2018-4-11 10:26 编辑

我那个改就要用到带捕捉的grread函数,你先试试这个:
  1. (defun c:rtc (/ *error* a pt1 pt2 ptlst1 ptlst2 ss x y z)
  2. (defun *error* (msg)
  3.   (setvar "cmdecho" a)
  4.   (command ".undo" "e")
  5.   (princ "error: ")
  6.   (princ msg)
  7.   (princ)
  8. )
  9. (defun ent-getbox (ent / lst obj p1 p2 p3 p4)
  10.   (setq obj (vlax-ename->vla-object ent))
  11.   (vla-GetBoundingBox obj 'p1 'p3)
  12.   (setq p1 (vlax-safearray->list p1)
  13.    p3 (vlax-safearray->list p3)
  14.   )
  15.   (if (= "SPLINE" (cdr (assoc 0 (entget ent))))
  16.    (progn
  17.     (setq lst
  18.      (mapcar
  19.       '(lambda (a b)
  20.         (vlax-curve-getClosestPointToProjection ent a b t)
  21.        )
  22.       (list p1
  23.        (list (car p1) (cadr p3) (caddr p1))
  24.        p3
  25.        (list (car p3) (cadr p1) (caddr p1))
  26.       )
  27.       '((1.0 0 0) (0 -1.0 0) (-1.0 0 0) (0 1.0 0))
  28.      )
  29.     )
  30.     (setq
  31.      p1 (apply 'mapcar (cons 'min lst))
  32.      p3 (apply 'mapcar (cons 'max lst))
  33.     )
  34.    )
  35.   )
  36.   (list p1 p3)
  37. )
  38. (setq a (getvar "cmdecho"))
  39. (setvar "cmdecho" 0)
  40. (setq ss (ssget) x nil y nil z t)
  41. (setq pt1 (getpoint "选择基点"))
  42. (setq pt2 (getpoint pt1 "\n选择第一角点"))
  43. (while z
  44.   (setq ptlst1 (ent-getbox (entlast))
  45.    x (mapcar '(lambda (x) (/ x 2)) (mapcar '+ (car ptlst1) (cadr ptlst1)))
  46.   )
  47.   (command ".undo" "be")
  48.   (command "rotate" ss "" pt1 "c" "r" pt1 pt2 pause)
  49.   (command ".undo" "e")
  50.   (setq ptlst2 (ent-getbox (entlast))
  51.    y (mapcar '(lambda (x) (/ x 2)) (mapcar '+ (car ptlst2) (cadr ptlst2)))
  52.   )
  53.   (setq z (null (equal x y 0.001)))
  54. )
  55. (command ".undo" "")
  56. (setvar "cmdecho" a)
  57. (princ)
  58. )


评分

参与人数 1明经币 +1 金钱 +5 收起 理由
edrise + 1 + 5 棒棒棒!

查看全部评分

回复 支持 1 反对 1

使用道具 举报

发表于 2018-7-25 11:23:49 | 显示全部楼层
ssyfeng 发表于 2018-4-11 10:24
我那个改就要用到带捕捉的grread函数,你先试试这个:

好像不能用,输入命令时没法输入
回复 支持 0 反对 1

使用道具 举报

发表于 2018-7-25 12:57:41 | 显示全部楼层
ssyfeng 写的好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-19 10:40 , Processed in 0.167657 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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