CadFrank 发表于 2022-7-6 06:39:57

矩形旋转

您好,我想知道是否有可能将矩形的旋转值提取到变量中。然后将其设置为0,并在之后将其重新命名为原始值。
 
谢谢

Tharwat 发表于 2022-7-6 06:53:44

你好,弗兰克。
 
尝试提取坐标,然后可能需要检查每个段的角度是否等于0.0、90.0、180。或270.0,因此矩形
否则就不会是直的。

CadFrank 发表于 2022-7-6 07:02:26

嘿Tharwat,
 
谢谢你的回答,不过我不确定是否会听你的。
 
假设我使用命令矩形并使用旋转给它一个角度。现在它一直保存着这个角度。所以,当我使用一个使用矩形命令的例程时,它会坚持这个角度。所以我知道我可以在我的例程中使用旋转将其恢复为0,但我宁愿保存该角度,然后将其设置为0。如果不可能的话,我总能找到另一种方法来完成我的任务。
 
无论如何,希望它能帮助更多人
 
干杯和啤酒!

BIGAL 发表于 2022-7-6 07:05:19

如果需要添加宽度和高度之类的内容,可以简单地将一点lisp放在一起,拾取现有对象的两个点,这与拾取一个现有对象相同。
 

(defun rec ()
(setq pt1 (getpoint "\npick cnr point"))
(setq pt2 (getpoint "\npick next cnr point"))
)

(rec)
(setq ang (angle pt1 pt2))

(rec)
(command "rectang" pt1 pt2)
(command "ro" "L" "" pt1 ang)
(princ)

Lee Mac 发表于 2022-7-6 07:12:51

据我所知,我相信CadFrank希望确定rectang命令的当前旋转角度,以便在使用该命令后可以重置旋转;不幸的是,我不相信这个值是可访问的,因为它不是作为系统变量或环境变量出现的。

Tharwat 发表于 2022-7-6 07:21:41

也许这个。。。
 
(defun c:Test (/ *error* rtd _P p1 p2 e pts a lst ang)
;;--- Tharwat 23. April. 2013 ---;;
(defun *error* (x) (princ "\n *Cancel*"))
(defun rtd (a) (/ (* a 180.0) pi))
(defun _P (ent)
   (mapcar 'cdr
         (vl-remove-if-not
             '(lambda (i) (eq (car i) 10))
             (entget ent)
         )
   )
)

(if (and (setq p1 (getpoint "\n Specify first corner :"))
          (setq p2 (getcorner "\n Specify next corner :" p1))
   )
   (progn
   (command "_.rectang" "_none" p1 "_none" p2)
   (setq e (entlast))
   (setq pts (_P e))
   (setq a (angle (car pts) (cadr pts)))
   (command "_.rotate"
            e
            ""
            (mapcar '(lambda (j k) (/ (+ j k) 2.))
                      (car pts)
                      (caddr pts)
            )
            pause
   )
   (setq lst (_P (entlast)))
   (setq ang (- (angle (car lst) (cadr lst)) a))
   )
)
(if ang
   (princ
   (strcat "\n The rotation angle is : " (rtos (rtd ang) 2 1))
   )
)
(princ)
)

(vl-load-com)

Stefan BMR 发表于 2022-7-6 07:32:12

如果您不需要本机命令中可用的其他选项,可以重新创建“矩形”命令。
(defun c:myrectangle ( / p1 p2 p3 p4 d)
(if
   (and
   (setq p1 (getpoint "\nFirst corner: "))
   (setq p2 (getpoint p1 "\nOther corner: "))
   )
   (progn
   (setq d(mapcar '- p2 p1)
         p3 (mapcar '+ p1 (list (car d) 0.0))
         p4 (mapcar '+ p1 (list 0.0 (cadr d)))
         )
   (command "_PLINE" "_non" p1 "_non" p3 "_non" p2 "_non" p4 "_c")
   )
   )
(princ)
)

BIGAL 发表于 2022-7-6 07:35:48

我发现一个简单的方法是,如果你设置snapang,你的矩形画成一个角度,这是一个变量,你可以检索并保存它,也许是userr1,然后是一个简单的宏,然后只做rectang。dwg中最多可以有5个角度。
 
(defun c:ang1 ()
(setvar 'angbase (getvar 'userr1))
)
; also need
(defun c:setang1 ()
(setvar 'userr1 (Getreal "\n enter angle")) ; i would use pick object but for example here KISS
)

CadFrank 发表于 2022-7-6 07:41:23

好吧看来你们都有自己的想法
 
因此,首先,我发布我正在使用的代码,当旋转角度改变时,我得到一个我的块工作不好。
 
现在我知道我可以用
所以现在它永久地把它设置回0。这是我的问题。我不想将其永久设置为0,我想提取该值以在使用后将其重置为相同的值。
 
现在我还可以修改代码,使其不使用矩形。
 
这就是。。谢谢你的帮助
 
干杯和啤酒!
页: [1]
查看完整版本: 矩形旋转