Cad] 정착부 강연선(Tendon) 배치 VBA
- Cad
- 2020. 3. 15.
강연선(Tendon) 배치시, 정착부 시작의 일부구간은 직선형상이어야 합니다.
이번 포스팅은 캐드(Autocad) VBA로 직선이 있는 강연선을 그려보겠습니다.
강연선 배치에 필요한 점은 3개입니다. 정착점 ①, 직선구간 점(원곡선 시점) ②, 원곡선 종점 ③. 여기서 ②의 y좌표는 계산을 해서 정해집니다.
미지수는 x1을 가정한 후 ②에서 (x1,0)의 거리와 (x1,0)에서 ③까지 거리가 동일하도록 몇번의 계산을 거쳐 구합니다. 미지수 x1이 구해지면 ①②를 이루는 직선방정식을 알수 있고, x에 b를 대입하면 y좌표가 구해집니다. 이 직선과 직교하는 직선의 한 점이 원의 중심이 되는데 ③에서 수직으로 그은 선과 만나는 점입니다. 원의 반지름은 ③점과 원점의 거리가 됩니다.
이제 값들이 정해졌으니 그림을 그려보겠습니다. VBA 코드입니다.
Sub te1()
Dim Pnt1, Pnt2, Pnt3 As Variant '3points
Pnt1 = ThisDrawing.Utility.GetPoint(, "1st Point")
Pnt2 = ThisDrawing.Utility.GetPoint(, "2nd Point")
Pnt3 = ThisDrawing.Utility.GetPoint(, "3rd Point")
Dim a, b, c As Double
a = Pnt3(0) - Pnt1(0)
b = Pnt2(0) - Pnt1(0)
c = Pnt1(1) - Pnt3(1)
Dim x, fx, fxd As Double
Dim i As Integer
x = c
For i = 0 To 10
fx = (x - b) ^ 2 - (x - a) ^ 2 + (b * c / x - c) ^ 2
fxd = -2 * b * c / (x * x * x) + 2 * c / (x * x) + 2 * a - 2 * b
x = x - fx / fxd
Next i
Pnt2(1) = -b * c / x + c + Pnt3(1)
Dim circlePnt(2) As Double
Dim circleR As Double
circlePnt(0) = Pnt3(0)
circlePnt(1) = x / c * a - b * c / x + c - b * x / c + Pnt3(1)
circleR = Abs(circlePnt(1) - Pnt3(1))
Dim lineObj As AcadLine
Set lineObj = ThisDrawing.ModelSpace.AddLine(Pnt1, Pnt2)
Dim strA, endA As Double
If circlePnt(1) > Pnt1(1) Then
strA = Atn(x / c) + 3.14159265358979
endA = 3.14159265358979 * 1.5
Else
strA = 3.14159265358979 * 0.5
endA = Atn(x / c) - 3.14159265358979
End If
'MsgBox endA
Dim arcObj As AcadArc
Set arcObj = ThisDrawing.ModelSpace.AddArc(circlePnt, circleR, strA, endA)
End Sub
|
cs |
VBA 에디터로 들어가서 위의 코드를 복사하여 Module을 하나 만들어서 붙여 넣으면 됩니다. 실행은 F5를 누르면 됩니다. 명령어로 실행시키고 싶으면 아래 값을 복사하여 command line에 붙여넣기 바랍니다. 명령어는 te1 로 해두었습니다.
(defun c:te1()(command "-vbarun" "te1")(princ))
'Cad' 카테고리의 다른 글
오토캐드] 다각형 도심(Centroid) 찍어주는 리습(Lisp) (0) | 2020.03.19 |
---|---|
Cad] 변곡 강연선(Tendon) 배치 VBA (0) | 2020.03.15 |
Cad] 직선과 접하는 두점으로 이루어진 원호(Arc) 그리기 (0) | 2020.03.14 |
캐드에서 VBA를 이용한 두점과 수평력에 의한 현수선 그리기(Drawing 2 points & Hor. force catenary in Autocad using VBA) (0) | 2020.03.09 |
캐드에서 VBA를 이용한 세점 현수선 그리기(Drawing 3 points catenary in Autocad using VBA) (0) | 2020.03.08 |