投影几何体
我想把一个矩形的几何形状转移到另一个平面上。是否有命令来完成它。我要将矩形转移到的平面与矩形当前所在的平面成40度角。 复制自身顶部的几何体,然后使用“对齐”命令。这是其他解决方案之一。 这是你想要完成的事情吗?在我给出解决方案之前,我需要确认一下,也许你脑子里还有别的想法:眨眼:
尝试旋转3D。 计算投影矩形的长度是一个相当简单的三角问题。但是,如果需要图形解决方案,则需要构造与穿过角度平面的基础矩形垂直的线。然后你需要找到角平面上的交点。在Autocad中,我认为角度平面必须垂直于WCS(平面图)的XY平面,并且必须查看平面图才能使用明显的交点对象捕捉。当您有捕捉点时,您可以在Z轴上绘制线来定义投影矩形的边缘。我希望这有意义。如果您经常做这种事情,您可能会受益于lisp,它可以找到斜线之间的最短距离,实际上,它可以在任何UCS中找到明显的交点。如果你对此感兴趣,请告诉我,我会发布代码。
无论如何,如果你有代码,我会得到它。我尝试了不同的方法,将osnapz设置为1,然后我意识到计算机所能做的就是沿着z轴自动旋转一个精确的图像,这基本上是一个副本。虽然我不想去某个地方,但副本最终还是在正确的平面上。它确实会将捕捉限制为活动UCS,当原始和副本之间的平面角度相同时,这可能很有用,但在本示例中并非如此。
我所能做的最好的事情是将osnapz恢复为默认值0,并使用从原始对象捕捉的两个临时矩形穿过目标平面。然后使用外观交点绘制投影,在侧视图中捕捉并在三维中继续。显然,对于非常复杂的形状,这是不可能的。 好的,给你。尝试在3D中绘制一些斜线,看看它是如何工作的。与投影图像相关的该程序的重要内容是,斜线之间的最短线垂直于两条线。
; LSQ.LSP - "LINE SKEW" Connects SKEW lines with the shortest connector
; From original code (c)1992, Mitchell A. Wawzonek
; Mitchell A. Wawzonek, P.Eng., Professor
; School of Engineering Technology
; Conestoga College
; 299 Doon Valley Drive
; Kitchener, ON N2G 4M4
; Canada
;
; FINDS THE COMMON PERPENDICULAR
; BETWEEN 2 SKEW LINES
;
; 5-26-06Added error handling and useability in any UCS.
; Also declared local variables.
;
(defun lsq_error (msg)
(setq *error* sys_error)
(command "UCS" "R" "SYSUCS")
(command "UCS" "D" "SYSUCS")
(setvar "OSMODE" OLDSNAP)
(setvar "CMDECHO" 1)
(redraw)
(princ)
)
(defun C:LSQ (/ E1 E2 P1 P2 P3 P4 X1 X2 X3 X4 Y1 Y2 Y3 Y4
Z1 Z2 Z3 Z4 A D B C F CA SA ANG R1 R P5 P6 DS )
(setq sys_error *error*)
(setq *error* lsq_error)
(setvar "CMDECHO" 0)
(setq OLDSNAP (getvar "OSMODE"))
(setvar "OSMODE" 0)
(command "UCS" "S" "SYSUCS")
(command "UCS" "")
(setq E1 nil E2 nil)
(while (null E1)
(setq E1 (entsel "\nLine 1:"))
(if E1
(progn
(setq E1 (car E1))
(redraw E1 3)
(if (/= (cdr (assoc 0 (entget E1))) "LINE")
(progn
(prompt "\nEntity is a ")
(princ (cdr (assoc 0 (entget E1))))
(princ ". Select a LINE")
(setq E1 nil)
)
)
)
)
) ;endwhile
(while (null E2)
(setq E2 (entsel "\nLine 2:"))
(if E2
(progn
(setq E2 (car E2))
(if (/= (cdr (assoc 0 (entget E2))) "LINE")
(progn
(prompt "\nEntity is a ")
(princ (cdr (assoc 0 (entget E2))))
(princ ". Select a LINE")
(setq E2 nil)
)
)
)
)
) ;endwhile
(setq P1 (cdr (assoc 10 (entget E1)))) ; start point line 1
(setq P2 (cdr (assoc 11 (entget E1)))) ; end point line 1
(setq P3 (cdr (assoc 10 (entget E2)))) ; start point line 2
(setq P4 (cdr (assoc 11 (entget E2)))) ; end point line 2
(setq X1 (car P1) Y1 (cadr P1) Z1 (caddr P1)); components of P1
(setq X2 (car P2) Y2 (cadr P2) Z2 (caddr P2)); " " " P2
(setq X3 (car P3) Y3 (cadr P3) Z3 (caddr P3)); " " " P3
(setq X4 (car P4) Y4 (cadr P4) Z4 (caddr P4)); " " " P4
(setq A (+ (* (- X2 X1)(- X1 X3)) (* (- Y2 Y1)(- Y1 Y3)) (* (- Z2 Z1)(- Z1 Z3))))
(setq D (+ (* (- X4 X3)(- X1 X3)) (* (- Y4 Y3)(- Y1 Y3)) (* (- Z4 Z3)(- Z1 Z3))))
(setq B (+ (* (- X2 X1)(- X2 X1)) (* (- Y2 Y1)(- Y2 Y1)) (* (- Z2 Z1)(- Z2 Z1))))
(setq C (+ (* (- X2 X1)(- X4 X3)) (* (- Y2 Y1)(- Y4 Y3)) (* (- Z2 Z1)(- Z4 Z3))))
(setq F (+ (* (- X4 X3)(- X4 X3)) (* (- Y4 Y3)(- Y4 Y3)) (* (- Z4 Z3)(- Z4 Z3))))
(setq CA (ABS (/ C (* (SQRT B)(SQRT F))))) ;Cosine CA=1
(setq SA (SQRT (ABS (- 1 (* CA CA))))) ;Sine SA=0
(setq ANG (ATAN SA CA))
(princ (strcat "\nAngle = " (angtos ANG 0 4)))
(IF (< ANG 0.000005)
(princ "\nLines are parallel - No connector\n")
(progn
(setq R1 (/ (- (* A C) (* B D)) (- (* C C) (* B F))))
(setq R (/ (- (* C R1) A) B))
; connector end pnts
(setq P5 (LIST (+ X1 (* (- X2 X1) R))(+ Y1 (* (- Y2 Y1) R))(+ Z1 (* (- Z2 Z1) R))))
(setq P6 (LIST (+ X3 (* (- X4 X3) R1))(+ Y3 (* (- Y4 Y3) R1))(+ Z3 (* (- Z4 Z3) R1))))
(setq DS (distance P5 P6)) ; connector length
(if (or (< 1 R) (< 1 R1))
(princ " * * * CAUTION: Connector past end of Line 1 or 2"))
(if (or (< R 0) (< R1 0))
(princ " * * * CAUTION: Connector past end of Line 1 or 2"))
(princ (strcat "\nConnector length = " (rtos DS)))
(if (> DS 0.00000000001)
(command ".LINE" P5 P6 "")
(princ"\nLines intersect - no connection")
)
);endprogn
);endif
(setq *error* sys_error)
(command "UCS" "R" "SYSUCS")
(command "UCS" "D" "SYSUCS")
(setvar "OSMODE" OLDSNAP)
(setvar "CMDECHO" 1)
(princ "\r")
(redraw)
(princ)
)
谢谢,我一弄明白怎么做就会把它付诸实施。
有关“如何使用LISP文件”,请参阅此常见问题解答?
http://www.cadtutor.net/faq/questions/28/How+do+I+use+an+AutoLISP+routine%3F
页:
[1]