Grrr 发表于 2022-7-5 17:58:07

marko_ribar,没有,因为在大多数情况下,这些线是现有对象的一部分,但理论上它们可能是其他对象的一部分(我们不想对齐,但使用它们的线作为参考),请参见图片(绿线是目标线,并且是现有对象的一部分)。当然,我同意,在hmsilva的代码中,对齐目前并不完美,但如果首先匹配目标线和源线的中点,然后匹配角度,则效果会更好(或者先匹配角度,然后执行移动以匹配中点或端点)。
我在hmsilva的代码中添加了while函数,效果很好
(defun c:demo (/ old_osm p1 p2)
(setq old_osm (getvar 'OSMODE))
(while (princ "\nSelect objects to align: ")
(setvar 'OSMODE 512)
       (if (and (setq ss (ssget "_:L"))
          (setq p1 (getpoint "\nSelect source line: "))
          (setq p2 (getpoint "\nSelect destination line: "))
             )
       (progn
           (setvar 'OSMODE 0)
           (command "ROTATE" ss "" "APP" p1 p2 "R" "APP" p1 p2 p1 p2)
           (setvar 'OSMODE old_osm)
       )
)
(setvar 'OSMODE old_osm)
)
(princ)
)
 
唯一的问题是,它很少将图片中最上面的“大而复杂的对象1”与“大而复杂的对象2”对齐。无论如何,对于普通的ALIGN命令,总共需要24次单击才能得到我们尝试执行的结果,只需8次单击!
编辑:很抱歉第一张图片中的示例(使用ALIGN命令执行对齐更容易,需要更少的点击),请参阅第二张图片上的示例任务(其中没有任何内容在同一角度上)

ReMark 发表于 2022-7-5 18:01:31

当你有五个物体看起来像图像中最右边的物体,然后你需要返回并对齐其中的四个时,你会做什么工作?

marko_ribar 发表于 2022-7-5 18:02:53

我同意这比使用align命令快,但这不是align-它实际上是“旋转以对齐”命令。。。
 
编辑消息:
你必须考虑到你的工作图纸中没有这些矩形-你必须创建它们,我也有一个问题:这是什么样的图纸(没有这些矩形)?您的实体是否分散在中心矩形周围并具有可变旋转?也许我错了,但如果要对齐的矩形表示外部参照,那么将它们的旋转设置为0.0以与X轴对齐,然后沿X轴对它们进行阵列以使图形对齐不是更合适。。。

Grrr 发表于 2022-7-5 18:06:15

 
城市规划和设计,或以不同的旋转方式处理包含不同对象的旧扫描图纸,或绘制必须与现有对象对齐成斜线的正交形状和形式。
http://wiki.openstreetmap.org/w/images/f/fa/Cadastre-Style-Hausen-adZ.svg
 
无论它如何调用或如何工作,关键是用户的任务和最终结果,以使生活更轻松。
编辑:重点不是这是什么样的绘图,重点是当你有重复的任务绘制一些东西,并在其他东西上执行每次对齐时会发生什么。老实说,由于用户的任务,我更多地跳过了ALIGN命令,而使用了随参考角度旋转,这对我来说没有那么烦人。但这个Lisp程序消除了点击点的所有痛苦。

marko_ribar 发表于 2022-7-5 18:11:02

根据你的链接,你是在告诉我你必须使用“旋转以对齐”命令而不是“对齐”命令或只是“旋转”来旋转图纸中的这些房屋吗?你的图纸完全显示了现实生活中的情况-你不必进行精确的旋转对齐-根据街道网络,你做得大致正确。。。你不需要这个例行程序,只需要清晰的视野和“旋转”命令。。。若你们的图纸是详细的,那个么你们的房子图纸应该根据房子的主要街道边缘和X轴对齐来定位。。。

Grrr 发表于 2022-7-5 18:14:08

你说得对,但我通常会寻求某种精度。我的第一个目标是通过lisp将Revit中的一些二维命令实现到AutoCAD中。我删除了创建此帖子后的第一条消息,以便人们阅读它时简短明了,并为我获得有关我正在询问的lisp的一些答案。遗憾的是,与CAD软件相比,BIM软件在二维绘图方面具有优势。但也许有一天Autodesk会说“嘿,让我们也在AutoCAD中内置这些选项吧”。

Stefan BMR 发表于 2022-7-5 18:16:30

高Grrr
这个简单的例程仅用于测试目的,没有错误陷阱。
到目前为止,它适用于多段线,可以适用于直线,但如果您的“复杂对象”是块,则编写代码会更困难。
观看此视频可以根据拾取的点查看不同的结果。
(源对象上最近的顶点是第一个对齐点;同一线段上的另一个顶点是第二个对齐点等)
 
[编辑:gif已删除。]
 
(defun c:al2p ( / ss e1 e2 l1 l2 p1)
(if
   (and
   (setq ss (ssget ":L"))
   (setq e1 (entsel "\nSelect source object: "))
   (setq e2 (entsel "\nSelect destination object: "))
   )
   (progn
   (setq l1 (get_ends e1)
         l2 (get_ends e2)
         )
   (command "_align" ss ""
            "_non" (carl1)
            "_non" (carl2)
            "_non" (cadr l1)
            "_non" (cadr l2)
            "" "_n"
            )
;;;      (if
;;;      (setq p1 (getpoint "\nSpecify base point to move objects or press Enter to exit: "))
;;;      (progn
;;;          (command "_move" ss "" "_non" p1)
;;;          (while (> (getvar 'cmdactive) 0) (command pause))
;;;          )
;;;      )
   )
   )
(princ)
)

(defun get_ends (e / o p p1 p2)
(setq o (car e)
       p (vlax-curve-getparamatpoint o
         (vlax-curve-getclosestpointto o (cadr e))
         )
       p1 (fix p)
       p2 (1+ p1)
       )
(if (> (- p2 p) (- p p1))
   (list
   (vlax-curve-getpointatparam o p1)
   (vlax-curve-getpointatparam o p2)
   )
   (list
   (vlax-curve-getpointatparam o p2)
   (vlax-curve-getpointatparam o p1)
   )
   )
)
   

ReMark 发表于 2022-7-5 18:21:20

如果您正在绘制这些对象(例如街道平面上的房屋),那么首先旋转十字光标或UCS是否更有意义,这样就不需要使用“对齐”命令了。似乎您使用了错误的技术,并要求使用lisp例程来修复您创建的问题,而不是使用正确的技术。在我的CAD生涯中,我在各种不同的学科中绘制了很多很多图形,但我很少需要使用align命令。

eldon 发表于 2022-7-5 18:24:04

我可能会使用带引用的Rotate。
 
我不知道为什么强调保存点击。我使用了一个默认设置为“在左边拾取,在右边返回”的两键鼠标,可以非常快速地进行操作。也许有一个医学原因可以节省点击次数。

lamensterms 发表于 2022-7-5 18:27:20

我认为对“快速对齐”的需求可能足够公平。根据用于创建这些平面的方法,首先旋转UCS可能不是最简单的选项。例如,如果道路移动,您可能需要一种简单的方法来移动/重新对齐房屋以适应新道路。或者,如果你在平面图周围复制相同的房子/建筑块,最好是快速将每个新的块与其周围环境的方向相匹配。
页: 1 [2]
查看完整版本: 通过两次单击对齐对象?