乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
楼主: Grrr

[编程交流] 通过两次单击对齐对象?

[复制链接]

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 17:58:07 | 显示全部楼层
marko_ribar,没有,因为在大多数情况下,这些线是现有对象的一部分,但理论上它们可能是其他对象的一部分(我们不想对齐,但使用它们的线作为参考),请参见图片(绿线是目标线,并且是现有对象的一部分)。当然,我同意,在hmsilva的代码中,对齐目前并不完美,但如果首先匹配目标线和源线的中点,然后匹配角度,则效果会更好(或者先匹配角度,然后执行移动以匹配中点或端点)。
我在hmsilva的代码中添加了while函数,效果很好
  1. (defun c:demo (/ old_osm p1 p2)
  2. (setq old_osm (getvar 'OSMODE))
  3. (while (princ "\nSelect objects to align: ")
  4. (setvar 'OSMODE 512)
  5.          (if (and (setq ss (ssget "_:L"))
  6.           (setq p1 (getpoint "\nSelect source line: "))
  7.           (setq p2 (getpoint "\nSelect destination line: "))
  8.              )
  9.            (progn
  10.              (setvar 'OSMODE 0)
  11.              (command "ROTATE" ss "" "APP" p1 p2 "R" "APP" p1 p2 p1 p2)
  12.              (setvar 'OSMODE old_osm)
  13.            )
  14.   )
  15. (setvar 'OSMODE old_osm)
  16. )
  17. (princ)
  18. )

 
唯一的问题是,它很少将图片中最上面的“大而复杂的对象1”与“大而复杂的对象2”对齐。无论如何,对于普通的ALIGN命令,总共需要24次单击才能得到我们尝试执行的结果,只需8次单击!
编辑:很抱歉第一张图片中的示例(使用ALIGN命令执行对齐更容易,需要更少的点击),请参阅第二张图片上的示例任务(其中没有任何内容在同一角度上)
182455ryn1gy86pi2iydgw.jpg
182456guwkukc3zzsk36ki.jpg
回复

使用道具 举报

10

主题

8258

帖子

8335

银币

初来乍到

Rank: 1

铜币
31
发表于 2022-7-5 18:01:31 | 显示全部楼层
当你有五个物体看起来像图像中最右边的物体,然后你需要返回并对齐其中的四个时,你会做什么工作?
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

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

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

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

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

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

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

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

使用道具 举报

0

主题

375

帖子

385

银币

限制会员

铜币
-7
发表于 2022-7-5 18:16:30 | 显示全部楼层
高Grrr
这个简单的例程仅用于测试目的,没有错误陷阱。
到目前为止,它适用于多段线,可以适用于直线,但如果您的“复杂对象”是块,则编写代码会更困难。
观看此视频可以根据拾取的点查看不同的结果。
(源对象上最近的顶点是第一个对齐点;同一线段上的另一个顶点是第二个对齐点等)
 
[编辑:gif已删除。]
 
  1. (defun c:al2p ( / ss e1 e2 l1 l2 p1)
  2. (if
  3.    (and
  4.      (setq ss (ssget ":L"))
  5.      (setq e1 (entsel "\nSelect source object: "))
  6.      (setq e2 (entsel "\nSelect destination object: "))
  7.      )
  8.    (progn
  9.      (setq l1 (get_ends e1)
  10.            l2 (get_ends e2)
  11.            )
  12.      (command "_align" ss ""
  13.               "_non" (car  l1)
  14.               "_non" (car  l2)
  15.               "_non" (cadr l1)
  16.               "_non" (cadr l2)
  17.               "" "_n"
  18.               )
  19. ;;;      (if
  20. ;;;        (setq p1 (getpoint "\nSpecify base point to move objects or press Enter to exit: "))
  21. ;;;        (progn
  22. ;;;          (command "_move" ss "" "_non" p1)
  23. ;;;          (while (> (getvar 'cmdactive) 0) (command pause))
  24. ;;;          )
  25. ;;;        )
  26.      )
  27.    )
  28. (princ)
  29. )
  30. (defun get_ends (e / o p p1 p2)
  31. (setq o (car e)
  32.        p (vlax-curve-getparamatpoint o
  33.            (vlax-curve-getclosestpointto o (cadr e))
  34.            )
  35.        p1 (fix p)
  36.        p2 (1+ p1)
  37.        )
  38. (if (> (- p2 p) (- p p1))
  39.    (list
  40.      (vlax-curve-getpointatparam o p1)
  41.      (vlax-curve-getpointatparam o p2)
  42.      )
  43.    (list
  44.      (vlax-curve-getpointatparam o p2)
  45.      (vlax-curve-getpointatparam o p1)
  46.      )
  47.    )
  48. )
  49.    
回复

使用道具 举报

10

主题

8258

帖子

8335

银币

初来乍到

Rank: 1

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

使用道具 举报

8

主题

1133

帖子

1164

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 18:24:04 | 显示全部楼层
我可能会使用带引用的Rotate。
 
我不知道为什么强调保存点击。我使用了一个默认设置为“在左边拾取,在右边返回”的两键鼠标,可以非常快速地进行操作。也许有一个医学原因可以节省点击次数。
回复

使用道具 举报

77

主题

298

帖子

232

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
394
发表于 2022-7-5 18:27:20 | 显示全部楼层
我认为对“快速对齐”的需求可能足够公平。根据用于创建这些平面的方法,首先旋转UCS可能不是最简单的选项。例如,如果道路移动,您可能需要一种简单的方法来移动/重新对齐房屋以适应新道路。或者,如果你在平面图周围复制相同的房子/建筑块,最好是快速将每个新的块与其周围环境的方向相匹配。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-13 03:17 , Processed in 0.440168 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表