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()
}
}
}