Using the Scripting Interface with PowerShell: Examples

Examples are provided below of using the Scripting Interface with PowerShell in eCADSTAR Library Editor, eCADSTAR Schematic Editor and eCADSTAR PCB Editor.

To Display All Part Properties in a Library

               $app = [Runtime.InteropServices.Marshal]::GetActiveObject('eCADSTAR.LibraryEditor.Application')
               if($app  -ne  $null) {
                  $app.OpenLibrary($libPath)
                  $library = $app.Library
                  if($library  -ne  $null) {
                    $libraryparts = $library.Parts
                    foreach($librarypart  in  $libraryparts) {
                       if($librarypart  -ne  $null) {
                          write-host  "$($librarypart.Name)
                          $partproperties = $librarypart.Properties
                          foreach($partproperty  in  $partproperties) {
                             write-host  "($partproperty.Name) : $($partproperty.Value)"
                          }
                       }
                    }
                 }
              }

To Display All Sheet Properties in a Schematic design

 

              $designPath=$Args[0]
               $app = New-Object -ComObject eCADSTAR.SchematicEditor.Application
               $app.OpenDesign($designPath)
               foreach($sheet  in  $app.Design.Sheets) {
                   $sheet.Number
                   $sheet.Open()
                   foreach($property  in  $sheet.Properties) {
                       write-host  "$($property.Name) : $($property.Value)"
                   }
                   $sheet.Close()
               }
               $app.Quit()

 

To Display All Component Properties in a PCB Design

 

              $designPath=$Args[0]
              $app = New-Object -ComObject eCADSTAR.PCBEditor.Application
              $app.OpenDesign($designPath)
              foreach($component  in  $app.CurrentDesign.Components) {
                   foreach($property  in  $component.Properties) {
                       write-host  "$($property.Name) : $($property.Value)"
                   }
              }
              $app.Quit()
 

To get the board outline in a PCB design

 

               $app = [Runtime.InteropServices.Marshal]::GetActiveObject('eCADSTAR.PCBEditor.Application')
               if($app  -ne  $null) {
                  $design = $app.CurrentDesign()
                  if($design  -ne $null) {
                    $boardOutline= $design.boardoutline
                           write-host  "AreaFill count: $($boardOutline.count)"
                           $areaFillNo = 1
                           foreach($areaFill  in  $boardOutline) {
                               write-host  "AreaFill $($areaFillNo)"
                               write-host  "Fixed $($areaFill.fixed)"
                               $surfaces = $areaFill.surfaces

                               write-host  "Surfaces count: $($surfaces.count)\n"
                               $surfaceNo = 1

                              foreach($surface  in  $surfaces) {
                                  write-host  "Surface $($surfaceNo)"
                                  write-host  "Cutout: $($surface.cutout)"
                                 $edges = $surface.edges
                                  write-host  "Edge count: $($edges.count)"
                                  $edgeNo = 1

                                  foreach($edge  in  $edges) {

                                     write-host  "Edge $($edgeNo)"
                                    $edgeType = $edge.Type
                                     if($edgeType  -eq  0) {
                                          write-host  "Edge type: Arc"
                                     }
                                     elseif ($edgeType  -eq  1) {
                                          write-host  "Edge type: Tangent arc"
                                     }
                                     elseif ($edgeType  -eq  2) {
                                          write-host  "Edge type: Circle"
                                     }
                                     elseif ($edgeType -eq 3) {
                                          write-host  "Edge type: Line"
                                     }
                                     if ($edgeType -eq 0) {
                                    $arcDirection = $($edge.Direction)
                                        if ($arcDirection -eq 0) {
                                        write-host "Arc direction: Anti-clockwise"
                                        }
                                        elseif ($arcDirection  -eq  1) {
                                        write-host"Arc direction: Clockwise"
                                        }

                    elseif ($arcDirection -eq 2) {

                                        write-host"Arc direction: Tangent"
                                        }
                                       $start = $edge.start
                                        write-host "Start x: $($start.CoordinateX)"
                                        write-host "Start y: $($start.CoordinateY)"
                                       $centre = $edge.centre
                                        write-host "Centre x: $($centre.CoordinateX)"
                                        write-host "Centre y: $($centre.CoordinateY)"
                                       $end = $edge.end
                                        write-host "End x: $($end.CoordinateX)"
                                        write-host "End y: $($end.CoordinateY)"
                                    }
                                    elseif($($edgeType -eq 1)) {
                                    $arcDirection = $($edge.Direction)
                                        if ($arcDirection -eq 0) {
                                            write-host "Arc direction: Anti-clockwise"
                                        }
                                        elseif ($arcDirection -eq 1) {
                                            write-host "Arc direction: Clockwise"
                                        }
                                        elseif ($arcDirection -eq 2) {
                                            write-host "Arc direction: Tangent"
                                        }
                                       $centre = $edge.centre
                                        write-host "Centre x: $($centre.CoordinateX)"
                                        write-host "Centre y: $($centre.CoordinateY)"
                                        write-host "Radius: $($edge.radius)"
                                    }
                                    elseif ($edgeType -eq 2) {
                                       $centre = $edge.centre
                                        write-host "Centre x: $($centre.CoordinateX)"
                                        write-host "Centre y: $($centre.CoordinateY)"
                                        write-host "Radius: $($edge.radius)"
                                    }
                                    elseif ($edgeType -eq 3) {
                                       $start = $edge.start
                                        write-host "Start x: $($start.CoordinateX)"
                                        write-host "Start y: $($start.CoordinateY)"
                                       $end = $edge.end
                                        write-host "End x: $($end.CoordinateX)"
                                        write-host "End y: $($end.CoordinateY)"
                                    }
                                   $edgeNo = $edgeNo + 1
                           }
                          $surfaceNo = $surfaceNo + 1
                        }
                       $areaFillNo = $areaFillNo + 1
                     }
                  }
               }

To set the board outline in a PCB design

 
               $app = [Runtime.InteropServices.Marshal]::GetActiveObject('eCADSTAR.PCBEditor.Application')
               if($app  -ne  $null) {
                  $design = $app.CurrentDesign()
                  if($design  -ne $null) {
                    $boardOutline= $design.boardoutline
                    $newAreaFill= $boardOutline.New()
                              if(($newAreaFill  -ne $null) {

                     $surfaces = $newAreaFill.surfaces

 

                     #Add the main outline

                       $Outline = $surfaces.new($false)
                                 if($outline  -ne $null) {
                                    $outline.AddLine(-1000, 0, -10001000, 0, 0)
                                    $outline.AddLine(-10001000, 0, -10001000, 10000000, 0)
                                    $outline.AddLine(-10001000, 10000000, -1000, 10000000, 0)
                                    $surfaces.Add()
                                  }

 

                     #Add a square cutout

                       $cutout1 = $surfaces.new($true)
                                 if($cutout1  -ne $null) {
                                    $cutout1.AddLine(-2501000, 7500000, -7501000, 7500000, 0)
                                    $cutout1.AddLine(-7501000, 7500000, -7501000, 9999990, 0)
                                    $cutout1.AddLine(-7501000, 9999990, -2501000, 9999990, 0)
                                    $surfaces.Add()
                                  }

 

                     #Add a circular cutout

                       $cutout2 = $surfaces.new($true)
                                 if($cutout2  -ne $null) {
                                    $cutout2.AddCircle(-5000500, 2000000, 200000)
                                    $surfaces.Add()
                                  }

 

                     #Add the complete area fill

                     $boardOutline.Add()


                    }
                 }
              }