boyo 发表于 2022-7-8 12:23:37

投影几何体

我想把一个矩形的几何形状转移到另一个平面上。是否有命令来完成它。我要将矩形转移到的平面与矩形当前所在的平面成40度角。

rkent 发表于 2022-7-8 12:37:17

复制自身顶部的几何体,然后使用“对齐”命令。这是其他解决方案之一。

nocturne00 发表于 2022-7-8 12:45:05

这是你想要完成的事情吗?
在我给出解决方案之前,我需要确认一下,也许你脑子里还有别的想法:眨眼:

eldon 发表于 2022-7-8 12:50:39

 
尝试旋转3D。

CALCAD 发表于 2022-7-8 12:58:14

计算投影矩形的长度是一个相当简单的三角问题。但是,如果需要图形解决方案,则需要构造与穿过角度平面的基础矩形垂直的线。然后你需要找到角平面上的交点。在Autocad中,我认为角度平面必须垂直于WCS(平面图)的XY平面,并且必须查看平面图才能使用明显的交点对象捕捉。当您有捕捉点时,您可以在Z轴上绘制线来定义投影矩形的边缘。我希望这有意义。如果您经常做这种事情,您可能会受益于lisp,它可以找到斜线之间的最短距离,实际上,它可以在任何UCS中找到明显的交点。如果你对此感兴趣,请告诉我,我会发布代码。

boyo 发表于 2022-7-8 13:08:13

无论如何,如果你有代码,我会得到它。我尝试了不同的方法,将osnapz设置为1,然后我意识到计算机所能做的就是沿着z轴自动旋转一个精确的图像,这基本上是一个副本。虽然我不想去某个地方,但副本最终还是在正确的平面上。它确实会将捕捉限制为活动UCS,当原始和副本之间的平面角度相同时,这可能很有用,但在本示例中并非如此。
我所能做的最好的事情是将osnapz恢复为默认值0,并使用从原始对象捕捉的两个临时矩形穿过目标平面。然后使用外观交点绘制投影,在侧视图中捕捉并在三维中继续。显然,对于非常复杂的形状,这是不可能的。

CALCAD 发表于 2022-7-8 13:09:28

好的,给你。尝试在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)
)

boyo 发表于 2022-7-8 13:21:15

谢谢,我一弄明白怎么做就会把它付诸实施。

Dipali 发表于 2022-7-8 13:29:54

 
有关“如何使用LISP文件”,请参阅此常见问题解答?
http://www.cadtutor.net/faq/questions/28/How+do+I+use+an+AutoLISP+routine%3F
页: [1]
查看完整版本: 投影几何体