티스토리 뷰

반응형

 

트랜섬의 BACK COVER 설계는 정밀한 치수 계산과 전개도의 정확한 작성이 필수적입니다. 이번 글에서는 백커버를 설계하고 전개도를 작성하는 과정을 자세히 살펴보겠습니다. 이 글은 초보자도 쉽게 따라 할 수 있도록 작성되었으며, 실제 코드와 함께 설계 과정을 친절히 설명합니다.

 


BACK COVER의 위치 설정

먼저, 백커버의 위치를 설정해야 합니다. 백커버는 자동차 트랜섬의 프레임 좌표를 기준으로 위치가 결정됩니다. 예를 들어, 아래 코드는 프레임 좌표와 스케일 값을 기반으로 백커버의 초기 위치를 계산합니다:

pagex, pagey = frameXpos, frameYpos + 1123 * frame_scale    
rx = math.floor(pagex)
ry = math.floor(pagey)
x1 = rx - 550
y1 = ry + 450

여기서 frameXpos와 frameYpos는 기본 프레임의 시작 좌표를 나타냅니다. frame_scale은 스케일 조정을 위한 값입니다. 이 좌표 계산은 백커버의 정확한 위치를 지정하는 데 사용됩니다.


전개도 작성의 핵심

전개도 작성의 핵심은 백커버의 모든 꼭짓점 좌표를 정확히 정의하고, 이를 연결하여 모양을 형성하는 것입니다. 아래는 주요 좌표를 계산하는 코드입니다:

x1 = rx
y1 = ry + 500 
x2 = x1 + 140 - 3
y2 = y1    
x3 = x2
y3 = y2 + 8 
x4 = x3 + 6
y4 = y3 

이처럼 모든 좌표는 순서대로 정의되며, 이후 각 점을 연결하거나 곡선을 그려 백커버의 형태를 만듭니다. 특히, 곡선이 필요한 부분은 draw_arc 함수로 처리합니다:

draw_arc(doc, x3, y3, x4, y4, 3, direction='up')

이 함수는 두 점 (x3, y3)와 (x4, y4) 사이의 곡선을 그립니다. 방향은 up, 즉 위쪽으로 설정됩니다.


구성선과 판정선 추가

전개도에는 정확성을 위해 구성선과 판정선이 추가됩니다. 구성선은 디자인의 참조선 역할을 하며, 판정선은 각 요소의 치수를 확인하는 데 사용됩니다. 아래는 구성선을 추가하는 코드입니다:

line(doc, x3 + 3, y3 + 10, x3 + 3, y3 - 10, layer='CLphantom')
line(doc, x7 + 3, y7 + 10, x7 + 3, y7 - 10, layer='CLphantom')

이 구성선은 CLphantom이라는 레이어로 추가되며, 회색선으로 표시됩니다.


치수 표기 및 주석 추가

전개도에는 설계 이해를 돕기 위해 치수와 설명 텍스트가 필요합니다. 다음은 치수와 주석을 추가하는 코드입니다:

d(doc, x3 + 3, y3 + 3, x1, y1, 110, direction="left")    
d(doc, x11, y11, x10, y10, 180, direction="right")
draw_Text(doc, desx, desy, 25, "CAR TRANSOM의 BACK COVER임.", layer='0')
draw_Text(doc, desx, desy - 50, 25, "Part Name : BACK COVER", layer='0')

위 코드에서는 d 함수를 사용해 치수를 표시하며, draw_Text 함수로 주석을 추가합니다. 텍스트 크기와 위치를 세밀히 조정하여 보기 좋게 표시합니다.


주기표 데이터 구성

전개도 작성 후, 설계와 관련된 데이터를 리스트로 정리해 주기표를 작성합니다. 예시는 아래와 같습니다:

listdata = []
cxlist = []
cxlist.append([1, x1, y1, x1 + 200, y1 + 400])                     
cxlist.append([2, x1, y1, x1 + 200, y1 + 270])                    
cxlist.sort(key=lambda x: x[0])

for item in cxlist:
    index, x1, y1, x2, y2 = item
    listdata.append(["", f"{SU}", str(index).zfill(2), "TRANSOM", "MT'L", dwgnum_dict.get("TRANSOM BRACKET")])

listdata는 주기표 데이터를 저장하는 리스트이며, 이는 나중에 테이블 형태로 화면에 출력하거나 파일로 저장할 수 있습니다.

def transom_backcover(doc, frameXpos, frameYpos, frame_scale):
    pagex, pagey = frameXpos, frameYpos + 1123 * frame_scale    

    rx = math.floor(pagex)
    ry = math.floor(pagey)

    x1 = rx - 550
    y1 = ry + 450 

    insert_block(doc, x1, y1, "transom_backcoversection", layer="0")
    
    # 일체형 transom BACK COVER 전개도    
    x1 = rx 
    y1 = ry + 500 
    x2 = x1 + 140 - 3
    y2 = y1    
    x3 = x2
    y3 = y2 + 8 
    x4 = x3 + 6
    y4 = y3 
    x5 = x4 
    y5 = y4 - 8
    x6 = x5 + OP - 300 - 6
    y6 = y5 
    x7 = x6 
    y7 = y6 + 8
    x8 = x7 + 6
    y8 = y7 
    x9 = x8 
    y9 = y8 - 8
    x10 = x9 + 140 - 3
    y10 = y9 
    x11 = x10 
    y11 = y10 + 150
    x12 = x11 - OP + 20
    y12 = y11

    prev_x, prev_y = x1, y1  # 첫 번째 점으로 초기화
    lastNum = 12
    for i in range(1, lastNum + 1):
        curr_x, curr_y = eval(f'x{i}'), eval(f'y{i}')
        if i == 4:
            draw_arc(doc, x3, y3, x4, y4, 3, direction='up')
        elif i == 8:
            draw_arc(doc, x7, y7, x8, y8, 3, direction='up')
        else:
            line(doc, prev_x, prev_y, curr_x, curr_y, layer="레이져")
        prev_x, prev_y = curr_x, curr_y

    line(doc, prev_x, prev_y, x1, y1, layer="레이져")   

    line(doc, x3 + 3, y3 + 10, x3 + 3, y3 - 10, layer='CLphantom')  # '구성선' 회색선    
    line(doc, x7 + 3, y7 + 10, x7 + 3, y7 - 10, layer='CLphantom')  # '구성선' 회색선    

    d(doc, x3 + 3, y3 + 3, x1, y1, 110, direction="left")    
    d(doc, x11, y11, x10, y10, 180, direction="right")    
    d(doc, x3, y3, x4, y4, 100, direction="up")    
    d(doc, x1, y1, x3 + 3, y1, 100, direction="down")    
    dc(doc, x7 + 3, y1)
    dc(doc, x10, y10)
    d(doc, x1, y1, x10, y10, 200, direction="down")    

    ##################### part 설명  ##########################
    mx = frameXpos + 1500 + (OP - 900) 
    my = frameYpos + 400
    desx = mx - 1500
    desy = my + 200
    text = 'BACK COVER' 
    unitsu = SU

    textstr = f" CAR TRANSOM의 BACK COVER임."    
    draw_Text(doc, desx, desy , 25, str(textstr), layer='0')    
    textstr = f"Part Name : {text}"    
    draw_Text(doc, desx, desy - 50, 25, str(textstr), layer='0')    
    textstr = f"Mat.Spec : 445 1.5T/1.2T 가능 "
    draw_Text(doc, desx, desy - 100, 25, str(textstr), layer='0')    
    textstr = f"Quantity : {unitsu} SET"    
    draw_Text(doc, desx, desy - 150, 25, str(textstr), layer='0')   

    listdata = []  # 주기표 테이블을 위한 listdata 초기화
    cxlist = []  # 주기를 위한 리스트                
    cxlist.append([1, x1, y1, x1 + 200, y1 + 400])                     
    cxlist.append([2, x1, y1, x1 + 200, y1 + 270])                    
    cxlist.sort(key=lambda x: x[0])            
    for item in cxlist:
        index, x1, y1, x2, y2 = item
        if index == 1:            
            listdata.append(["", f"{SU}", str(index).zfill(2), f"TRANSOM", "MT'L", dwgnum_dict.get("TRANSOM BRACKET")])    

    return listdata

 


최종 결과물

이제 모든 과정을 거쳐 설계된 백커버 전개도는 완성되었습니다. 설계에 포함된 곡선, 구성선, 치수, 주석은 백커버의 정확한 제작과 품질 검증을 가능하게 합니다.

이 글을 참고하여 여러분의 설계 작업에 적용해 보세요. 효율적이고 체계적인 설계를 위한 좋은 출발점이 될 것입니다.

반응형
댓글