Cad] 정착부 강연선(Tendon) 배치 VBA

Cad] 정착부 강연선(Tendon) 배치 VBA

 

강연선(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= -* c / x + c + Pnt3(1)
               
    Dim circlePnt(2As 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(1Then
        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))

댓글

Designed by JB FACTORY