乐筑天下

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

[综合讨论] 投影几何体

[复制链接]

6

主题

16

帖子

10

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-8 12:23:37 | 显示全部楼层 |阅读模式
我想把一个矩形的几何形状转移到另一个平面上。是否有命令来完成它。我要将矩形转移到的平面与矩形当前所在的平面成40度角。
回复

使用道具 举报

10

主题

895

帖子

887

银币

初来乍到

Rank: 1

铜币
49
发表于 2022-7-8 12:37:17 | 显示全部楼层
复制自身顶部的几何体,然后使用“对齐”命令。这是其他解决方案之一。
回复

使用道具 举报

11

主题

107

帖子

96

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
55
发表于 2022-7-8 12:45:05 | 显示全部楼层
这是你想要完成的事情吗?
在我给出解决方案之前,我需要确认一下,也许你脑子里还有别的想法:眨眼:
132342fxp8ptfpk1ciy8pt.jpg
回复

使用道具 举报

8

主题

1133

帖子

1164

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-8 12:50:39 | 显示全部楼层
 
尝试旋转3D。
回复

使用道具 举报

10

主题

109

帖子

99

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

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

使用道具 举报

6

主题

16

帖子

10

银币

初来乍到

Rank: 1

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

使用道具 举报

10

主题

109

帖子

99

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-8 13:09:28 | 显示全部楼层
好的,给你。尝试在3D中绘制一些斜线,看看它是如何工作的。与投影图像相关的该程序的重要内容是,斜线之间的最短线垂直于两条线。
 
 
  1. ; LSQ.LSP - "LINE SKEW" Connects SKEW lines with the shortest connector
  2. ;               From original code (c)1992, Mitchell A. Wawzonek
  3. ;   Mitchell A. Wawzonek, P.Eng., Professor
  4. ;   School of Engineering Technology
  5. ;   Conestoga College
  6. ;   299 Doon Valley Drive
  7. ;   Kitchener, ON   N2G 4M4
  8. ;   Canada
  9. ;
  10. ;   FINDS THE COMMON PERPENDICULAR
  11. ;   BETWEEN 2 SKEW LINES
  12. ;
  13. ; 5-26-06  Added error handling and useability in any UCS.
  14. ;          Also declared local variables.
  15. ;
  16. (defun lsq_error (msg)
  17. (setq *error* sys_error)
  18. (command "UCS" "R" "SYSUCS")
  19. (command "UCS" "D" "SYSUCS")
  20. (setvar "OSMODE" OLDSNAP)
  21. (setvar "CMDECHO" 1)
  22. (redraw)
  23. (princ)
  24. )
  25. (defun C:LSQ (/ E1 E2 P1 P2 P3 P4 X1 X2 X3 X4 Y1 Y2 Y3 Y4
  26.                Z1 Z2 Z3 Z4 A D B C F CA SA ANG R1 R P5 P6 DS )
  27.                
  28.   (setq sys_error *error*)
  29.   (setq *error* lsq_error)
  30.   (setvar "CMDECHO" 0)
  31.   (setq OLDSNAP (getvar "OSMODE"))
  32.   (setvar "OSMODE" 0)
  33.   (command "UCS" "S" "SYSUCS")
  34.   (command "UCS" "")
  35.   (setq E1 nil E2 nil)
  36.      (while (null E1)
  37.         (setq E1 (entsel "\nLine 1:"))
  38.         (if E1
  39.            (progn
  40.               (setq E1 (car E1))
  41.               (redraw E1 3)
  42.               (if (/= (cdr (assoc 0 (entget E1))) "LINE")
  43.                  (progn
  44.                     (prompt "\nEntity is a ")
  45.                     (princ (cdr (assoc 0 (entget E1))))
  46.                     (princ ". Select a LINE")
  47.                     (setq E1 nil)
  48.                   )
  49.                )
  50.             )
  51.         )
  52.      ) ;endwhile
  53.      (while (null E2)
  54.         (setq E2 (entsel "\nLine 2:"))
  55.         (if E2
  56.            (progn
  57.               (setq E2 (car E2))
  58.               (if (/= (cdr (assoc 0 (entget E2))) "LINE")
  59.                  (progn
  60.                     (prompt "\nEntity is a ")
  61.                     (princ (cdr (assoc 0 (entget E2))))
  62.                     (princ ". Select a LINE")
  63.                     (setq E2 nil)
  64.                   )
  65.                )
  66.             )
  67.         )
  68.      ) ;endwhile
  69.      (setq P1 (cdr (assoc 10 (entget E1)))) ; start point line 1
  70.      (setq P2 (cdr (assoc 11 (entget E1)))) ; end point line 1
  71.      (setq P3 (cdr (assoc 10 (entget E2)))) ; start point line 2
  72.      (setq P4 (cdr (assoc 11 (entget E2)))) ; end point line 2
  73.      (setq X1 (car P1) Y1 (cadr P1) Z1 (caddr P1))  ; components of P1
  74.      (setq X2 (car P2) Y2 (cadr P2) Z2 (caddr P2))  ;   "   "   "   P2
  75.      (setq X3 (car P3) Y3 (cadr P3) Z3 (caddr P3))  ;   "   "   "   P3
  76.      (setq X4 (car P4) Y4 (cadr P4) Z4 (caddr P4))  ;   "   "   "   P4
  77.      (setq A (+ (* (- X2 X1)(- X1 X3)) (* (- Y2 Y1)(- Y1 Y3)) (* (- Z2 Z1)(- Z1 Z3))))
  78.      (setq D (+ (* (- X4 X3)(- X1 X3)) (* (- Y4 Y3)(- Y1 Y3)) (* (- Z4 Z3)(- Z1 Z3))))
  79.      (setq B (+ (* (- X2 X1)(- X2 X1)) (* (- Y2 Y1)(- Y2 Y1)) (* (- Z2 Z1)(- Z2 Z1))))
  80.      (setq C (+ (* (- X2 X1)(- X4 X3)) (* (- Y2 Y1)(- Y4 Y3)) (* (- Z2 Z1)(- Z4 Z3))))
  81.      (setq F (+ (* (- X4 X3)(- X4 X3)) (* (- Y4 Y3)(- Y4 Y3)) (* (- Z4 Z3)(- Z4 Z3))))
  82.      (setq CA (ABS (/ C (* (SQRT B)(SQRT F))))) ;Cosine CA=1
  83.      (setq SA (SQRT (ABS (- 1 (* CA CA))))) ;Sine SA=0
  84.      (setq ANG (ATAN SA CA))
  85.      (princ (strcat "\nAngle = " (angtos ANG 0 4)))
  86.      (IF (< ANG 0.000005)
  87.      (princ "\nLines are parallel - No connector\n")
  88.         (progn
  89.            (setq R1 (/ (- (* A C) (* B D)) (- (* C C) (* B F))))
  90.            (setq R (/ (- (* C R1) A) B))
  91.            ; connector end pnts
  92.            (setq P5 (LIST (+ X1 (* (- X2 X1) R))(+ Y1 (* (- Y2 Y1) R))(+ Z1 (* (- Z2 Z1) R))))  
  93.            (setq P6 (LIST (+ X3 (* (- X4 X3) R1))(+ Y3 (* (- Y4 Y3) R1))(+ Z3 (* (- Z4 Z3) R1))))
  94.            (setq DS (distance P5 P6)) ; connector length
  95.            (if (or (< 1 R) (< 1 R1))
  96.               (princ " * * * CAUTION: Connector past end of Line 1 or 2"))
  97.            (if (or (< R 0) (< R1 0))
  98.               (princ " * * * CAUTION: Connector past end of Line 1 or 2"))
  99.            (princ (strcat "\nConnector length = " (rtos DS)))
  100.            (if (> DS 0.00000000001)
  101.               (command ".LINE" P5 P6 "")
  102.               (princ  "\nLines intersect - no connection")
  103.            )
  104.         );endprogn
  105.      );endif
  106.      (setq *error* sys_error)
  107.      (command "UCS" "R" "SYSUCS")
  108.      (command "UCS" "D" "SYSUCS")
  109.      (setvar "OSMODE" OLDSNAP)
  110.      (setvar "CMDECHO" 1)
  111.      (princ "\r")
  112.      (redraw)
  113.      (princ)
  114. )
回复

使用道具 举报

6

主题

16

帖子

10

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-8 13:21:15 | 显示全部楼层
谢谢,我一弄明白怎么做就会把它付诸实施。
回复

使用道具 举报

2

主题

135

帖子

135

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-8 13:29:54 | 显示全部楼层
 
有关“如何使用LISP文件”,请参阅此常见问题解答?
http://www.cadtutor.net/faq/questions/28/How+do+I+use+an+AutoLISP+routine%3F
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 01:38 , Processed in 4.948961 second(s), 72 queries .

© 2020-2025 乐筑天下

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