|
用了deepseek寫的VBA代碼用在CAD,挺好用的。有沒有其他的方便CAD使用的deepseek的例子推薦一下? # B9 o+ e7 y8 q8 g9 _( O8 ^5 W7 W7 M
- Sub AddRectangleAndArrayAndTrim()
2 j! Z; _2 s0 |0 @4 i% g, P$ o - ' 聲明變量) p; ?& K% Z7 c1 C2 \9 |9 w
- Dim lineObj As Object# A! C) M# M& d6 I2 b$ Z7 g
- Dim startPoint As Variant
- n) _$ s/ l u6 a - Dim endPoint As Variant
; M0 Y u# x1 W7 r& b' X/ S - Dim rectWidth As Double
$ Y8 C: h. Z- A! E4 k$ T% t/ X - Dim rectHeight As Double! C8 w( X8 t( z; l
- Dim rectStartPoint(0 To 2) As Double1 | @! A9 s. `( a, o. c
- Dim rectEndPoint(0 To 2) As Double6 `5 ^9 C. X( g; [
- Dim rotationAngle As Double$ w# m0 h; h+ q; H+ e
- Dim rectObj As Object
: Q5 W- \- I2 _/ P+ n! Z7 f7 ]( n - Dim points(0 To 7) As Double ' 用于存儲矩形的四個頂點
* e8 p( i8 F) b( y3 ]2 s+ F- ? - Dim centerPoint(0 To 2) As Double ' 直線的中點3 U7 |) @/ D9 R* D; E
- Dim newRectObj As Object ' 復制的矩形對象* c v/ l t) d7 I& z
- Dim rotationAngleRad As Double ' 旋轉角度(弧度)
$ H1 c$ p) p6 S9 ? - Dim intersectPoint As Variant ' 交點' C0 ^" {$ f9 M9 E3 @
- Dim trimStartPoint As Variant ' 修剪后的起點
; Y4 t8 k" @$ Q& }# h" m - Dim trimEndPoint As Variant ' 修剪后的終點1 [3 Y4 B! n8 o$ {0 q5 Y) O
-
- _6 A, g2 n$ C - ' 定義矩形的尺寸
- Q% P) w1 M6 I( B! ], r6 }( P - rectWidth = 0.1 ' 矩形的寬度(短邊)
7 O2 x% E* ^0 k - rectHeight = 1 ' 矩形的高度(長邊)/ m- ^7 b+ \1 q. m. h
-
i6 t, C9 U$ }" W4 m9 T - ' 提示用戶選擇一條直線
! B- C Q0 O' u - On Error Resume Next
& z9 A' T7 g% L. P6 p' U& ?! z8 g4 m - ThisDrawing.Utility.GetEntity lineObj, startPoint, "請選擇一條直線: ", t7 Y0 z( a& A: M4 R
- On Error GoTo 0; ?0 o, J0 W' F; H9 j7 j
-
, Z: G% j5 ~% q: }3 S; v - ' 檢查用戶是否選擇了直線
. w* u4 D# I/ ]4 H. D - If lineObj Is Nothing Then& Q( I/ a) q) f( ?0 K
- MsgBox "未選擇直線或選擇無效。"
8 {- j+ d% k' p2 h' r$ A - Exit Sub
% W6 g: f: z- \3 b. S3 }: F# D - End If
: j' {" C- w. D, _2 \ - 6 o/ L/ C4 Y$ G
- ' 獲取直線的起點和終點6 u: Z; b, N% g. e, ?! K' ?* Q+ e
- startPoint = lineObj.StartPoint. m. B2 G; F$ V, P2 R6 T1 S F
- endPoint = lineObj.EndPoint# X9 Y2 L9 [- \9 q @' n
- ; M0 Y0 r: |) X! N
- ' 計算直線的中點1 M8 }8 y" M. {3 D* Z6 }! ~8 B
- centerPoint(0) = (startPoint(0) + endPoint(0)) / 29 p0 ~$ e! _6 e* R
- centerPoint(1) = (startPoint(1) + endPoint(1)) / 2
; c; _8 q5 t- h- I( R' r& K - centerPoint(2) = (startPoint(2) + endPoint(2)) / 2
' c! B. z3 M% h2 m4 h' i1 M( E -
2 x: e. a8 z8 A/ @1 l) C - ' 計算直線的角度(用于矩形的旋轉)
3 }& m) N$ H. y, | b4 T - rotationAngle = Atn((endPoint(1) - startPoint(1)) / (endPoint(0) - startPoint(0)))
4 {4 M; d9 P4 B. _ -
$ @) s$ k/ Y6 R R - ' 計算矩形的起點和終點
; t" r, j! h4 L8 _5 ?+ {$ ^ - rectStartPoint(0) = startPoint(0) - (rectWidth / 2) * Cos(rotationAngle + (3.14159 / 2))' F5 u0 C+ x; X/ R, Q
- rectStartPoint(1) = startPoint(1) - (rectWidth / 2) * Sin(rotationAngle + (3.14159 / 2))
2 d. l( O$ r4 @" z - rectStartPoint(2) = startPoint(2)) J" a2 O8 Y, _/ N1 [
- 9 i$ M B0 h2 |0 @* v! Q
- rectEndPoint(0) = rectStartPoint(0) + rectHeight * Cos(rotationAngle)
# ?/ p* M& T0 e3 }* B" } - rectEndPoint(1) = rectStartPoint(1) + rectHeight * Sin(rotationAngle); l5 K0 P5 \4 ~9 S5 V
- rectEndPoint(2) = rectStartPoint(2)$ F8 Y1 B" M& x; q9 E) i
-
; _& k2 U5 q8 P! C L - ' 定義矩形的四個頂點0 t3 z6 U9 b% z0 ]
- points(0) = rectStartPoint(0)
- Q8 \ q6 p: \8 h2 I7 n T! Y - points(1) = rectStartPoint(1)# t! [. B4 m6 ]) q: J
- points(2) = rectEndPoint(0)
& t* p" \; J% a, c. u" r: E7 ` - points(3) = rectEndPoint(1)
0 n( W3 ^; e8 g. i6 B" F - points(4) = rectEndPoint(0) + rectWidth * Cos(rotationAngle + (3.14159 / 2))& B$ b: m' M% @
- points(5) = rectEndPoint(1) + rectWidth * Sin(rotationAngle + (3.14159 / 2))$ s, L1 ^8 v* I6 A/ H
- points(6) = rectStartPoint(0) + rectWidth * Cos(rotationAngle + (3.14159 / 2))
4 s" Y4 q3 U" t. r5 N - points(7) = rectStartPoint(1) + rectWidth * Sin(rotationAngle + (3.14159 / 2))' [9 h- c; o4 r* L6 f3 Q0 \
-
! w% \4 k- r- J! L: ] - ' 創建矩形
5 ^- j, |. h) @% l7 R* w - Set rectObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)( `+ J2 R6 }& l+ w8 G: {
- + L3 n' P9 s' u+ ~0 t5 Y, }# h+ C2 v
- ' 創建圓周陣列(手動復制和旋轉). ~& v n* L \4 u
- rotationAngleRad = 180 * (3.14159 / 180) ' 將角度轉換為弧度
, i1 Q; `5 i, s, t - Set newRectObj = rectObj.Copy) l& b4 [8 _7 y
- newRectObj.Rotate centerPoint, rotationAngleRad _. Y# E( I1 p5 P6 p% ^+ V& f
- ' y5 K6 `* c9 o7 @; n. o
- ' 修剪直線
, H3 T# v) |0 i" x6 O - ' 查找直線與矩形的交點. Q7 r& J% n5 D% k0 O4 v. x
- intersectPoint = lineObj.IntersectWith(rectObj, acExtendNone)' @. c; M+ l! ~6 F S* G( N3 w
- If Not IsEmpty(intersectPoint) Then
2 E6 @, r' K$ s7 j - ' 修剪直線的起點
/ d* y# Y0 ~# o) @6 o) q8 H% _ - trimStartPoint = intersectPoint
7 x2 E, q$ v* s* E - lineObj.StartPoint = trimStartPoint( }- I3 I5 f% L- h3 \5 m
- End If1 b5 P; x/ x0 x2 M4 z$ ~4 ]
- 5 Y8 m. @- ^" }
- intersectPoint = lineObj.IntersectWith(newRectObj, acExtendNone)5 A$ j4 N% X! N) [7 L5 a- P& y, s% n; U
- If Not IsEmpty(intersectPoint) Then! L, x, E$ M, ~* M5 m
- ' 修剪直線的終點5 l& n# g1 R; _8 j6 k5 ~
- trimEndPoint = intersectPoint
c# t2 ]6 P s x" W8 m9 i" f+ O - lineObj.EndPoint = trimEndPoint
+ y- w! \- W3 v. J- ] - End If! C' |, d9 o) h& t! S, H
-
' F( Q8 T" s3 u% J' P% G - ' 刷新視圖
1 j& }- a( O8 A/ I/ i - ThisDrawing.Regen True! M( c- j3 j) t4 t/ C) A1 P; T! u2 `
-
4 f/ B$ L5 u, |8 t3 u, i1 b" A: l) u - ' 提示用戶' V& x$ H* F6 y+ c9 H
- MsgBox "矩形、陣列和修剪操作已完成!"% B* H; J% [: W( i0 j/ P2 r
- End Sub
復制代碼 " t0 }+ u+ i5 H: ~6 v
7 b5 E/ `: o, |: z" [( r9 B ? |
|