"Editor Control>Pad Entry>Allow via under pad"를 변경하는 스크립트 짜기 (2/3)

Version 4

    이번에는 Pad Entry 관련된 Property에 대해 각각 MsgBox로 결과값을 표시하여 확인해보도록 하겠습니다.

     

    의도하는 바에 따라 스크립트의 내용을 아무리 변경하더라도, 아래 박스 안의 내용 중 위쪽 부분과 아래쪽 "ValidateServer" 부분은 절대 변경할 일이 없습니다.

    따라서 "본문" 부분만 변경해가면서 완성해나갈 것입니다.

    Header 1

    Option Explicit

     

    Dim pcbDocObj

    Set pcbDocObj = Application.ActiveDocument    '현재 열려있는 레이아웃 데이터에 접근합니다

     

    ValidateServer(pcbDocObj)

     

    Scripting.AddTypeLibrary("MGCPCB.Application")  ''TypeLibary 선언하면 명령에 사용하는 argument를 숫자 대신 글씨로 사용할 수 있습니다

     

    Dim EditConObj

    Set EditConObj = pcbDocObj.EditorControl  'EditorControl Object 를 선언합니다.

    .

    .

      본문

    .

    .

    Private Function ValidateServer(doc)

      Dim key, licenseServer, licenseToken

      key = doc.Validate(0)

      Set licenseServer = CreateObject("MGCPCBAutomationLicensing.Application")

      licenseToken = licenseServer.GetToken(key)

      Set licenseServer = nothing

      On Error Resume Next

      Err.Clear

      doc.Validate(licenseToken)

      If Err Then

        ValidateServer = 0

      Else

        ValidateServer = 1

      End If

    End Function

     

    이제 본문을 작성해가면서 각각 property에 대한 결과값을 확인해보겠습니다.

    rev.0 부터 시작하여 새로운 property를 확인할 때마다 save as를 합니다. 이렇게 단계별로 저장을 해두면, 중간과정에서 진행했던 부분이 필요해질 때 손쉽게 복구할 수 있습니다.

     

    rev.0

    가장 먼저 Pads Property에 대해서 확인해 보겠습니다.

    Header 1

    'rev.0 - Pads Property로 각 Pad Shape Type에 대해서 return되는 값 확인해보기

      Dim ePcbPadShapesArg

      ePcbPadShapesArg=Array("Rectangular", "Oblong/Octagon", "Round/Octagon", "Square", "Custom")

     

      Dim i,j,PadsCol,Text1,PadsCol,PadShape

      For j = 0 to 4

          Set PadsCol= EditConObj.Pads(j)  '상수 j는 EPcbPadShapes Enumerate를 뜻합니다. 매뉴얼의 Pads Property 부분을 참고하세요. 즉, Pads(j)는 각각의 pad shape type에 속한 pad collection을 가져오겠다는 뜻입니다.

          Text1 = Text1 & vbCrlf & "*Pad Shape Type: " & ePcbPadShapesArg(j) & vbCrlf &_

                      "*Pads Count: " & PadsCol.count & vbCrlf   'Pad Shape Type 및 Pads collection에 있는 pad object의 개수를 Text1에 추가합니다.

           For Each PadObj in PadsCol  'Pads collection 안에 있는 각각의 Pad object의 이름을 Text1에 추가합니다.

                    Text1 = Text1 & "    - " & PadObj & vbCrlf

           Next

      Next

     

      MsgBox Text1  'Text1 을 MsgBox로 출력합니다.

     

    위 구문을 본문 부분에 넣고 레이아웃에서 실행하면, 아래와 같은 결과가 나타납니다.

    ver0result.png

     

    예를 들어 아래와 같이 Rectangular Shape Type에 속하는 pad object는 총 4개이고, 각각의 이름을 확인할 수 있습니다.

    padshapes.png

     

     

     

    이후부터는 첨부된 스크립트 파일을 보면서 본문과 함께 확인해보세요.

     

    rev.1

    목적: PadEntryAllowedPadsViaSpan Property에 대한 return값(LayerRange)을 확인해보기

    결과: 해당 Pad에 대해 Pad Entry>Via Spans Allowed under Pads에서 체크되어있는 Layer Range만 나옴

    rev1.png

         ※ 경우에 따라 아래와 같은 에러 메세지를 나타내는 경우가 있을 것입니다.

         error.png

         원인은 아래와 같이 "Allow via under pad"가 먼저 체크되어있지 않아서 "Via spans allowed under pads"에 대한 접근이 불가하게 된 것입니다.

         우선 테스트를 위해서 매뉴얼로 체크하시기 바랍니다. 추후 실제 스크립트를 작성할때는 이 부분을 먼저 체크하는 구문을 넣어야한다는 힌트를 얻었습니다.

         PadEntrySelection.png

     

     

    rev.2

    목적: PadEntryViaSpans Property에 대한 return값(LayerRange) 확인해보기

    결과: Via Definition에서 현재 설정된 모든 Layer Range가 나옴

    rev2.png

     

    rev.3

    목적: PadEntryViaSpansForPad Property에 대한 return값(LayerRange) 확인해보기

    결과: 해당 Pad에 대해 설정할 수 있는 Layer Range 나옴

    rev3.png

     

    rev.4

    목적: SelPadsViaPosRules property에 대한 return값(True or False) 확인해보기

    결과: 체크박스 상태에 따라 True/False표기됨

    Selboxresult.png

     

         ※  본문을 보면 EPcbECSelPadsViaPosRulesArgs 에 대한 값을 가져오는 부분이 If 문으로 구성되어 있습니다.

              만약 아래 6개의 체크박스에 대해 나열식으로 return값을 요구할 경우, 체크가 되어있지 않은 부분 부터는 에러를 발생하게 됩니다.

              따라서 체크 박스가 계층적으로 구성되어 있기 때문에, If문으로 처리하여 False값이 나오면 빠져나오도록 처리해야 합니다.

         selectionbox1.jpg

     

     

    지금까지 파악한 결과들을 종합해보면, 어떤 object property를 활용해서 스크립트를 만들어야할지 계획을 할 수 있을 것입니다.

    처음부터 원하는 기능을 완전히 구현하려고 하기 보다, 간단한 것으로 시작하여 조금씩 조건을 붙여가며 업그레이드 하는 방식으로 진행하는 방법을 추천합니다.

     

    예를들어, 특정 pad에 대해 먼저 "Allow via under pad"를 체크한 다음, "Via spans allowed under pads:"를 체크하도록 설정하도록 하고나서,

    그 다음 전체 pad를 설정하도록 수정하고, 또 원하는 Layer Range만 체크하도록 수정하도록 단계적으로 변경하도록 합니다.

    conclude.png

     

     

    한가지 팁.

    Read/Write가 모두 가능한 property의 경우,

         Variable = EditorControl.PadEntryViaSpansForPad

    와 같이 등호 왼쪽에 Variable을 써주게 되면, Variable에 값을 반환(Read)하도록 명령하는 것이고,

         EditorControl.PadEntryViaSpansForPad   = IMGCPCBLayerRanges

    와 같이 등호 오른쪽에 원하는 Set 값을 써주게 되면 GUI설정에 반영되어 바뀌게 됩니다. (Write)

     

    단,

    Set값을 줄 때는 매뉴얼에 명시된 [Return/Set Type] 형식(Int, Collection, Object 등등)에 맞게 사용해야하며,

    매뉴얼에서 [Access]가 Read-only로 되어있을 경우 Read만 가능하기 때문에 설정을 바꿀 수 없습니다.