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命令执行对齐更容易,需要更少的点击),请参阅第二张图片上的示例任务(其中没有任何内容在同一角度上)
|