Click on a component and the designator autoposition will cycle around the 8 positions each time you click on the component.
Sub CycleDesPos
Dim Board
Dim Comp
Dim I
Dim eAutoArray
' 0 1 2
'eAutoPos_TopLeft,eAutoPos_CenterLeft,eAutoPos_BottomLeft,
' 3 4 5
'eAutoPos_BottomCenter,eAutoPos_BottomRight,eAutoPos_CenterRight,
' 6 7
'eAutoPos_TopRight,eAutoPos_TopCenter
eAutoArray = Array(1,2,3,6,9,8,7,4)
Set Board = PCBServer.GetCurrentPCBBoard
If Board is Nothing Then Exit Sub
Call PCBServer.PreProcess
While Board.ChooseLocation(x,y, "Click Via To Change") = True
Set Comp = Board.GetObjectAtXYAskUserIfAmbiguous(x,y,MkSet(_
eComponentObject),AllLayers,eEditAction_Focus)
I= -1
If Not(Comp is Nothing) Then
'Look for the current setting of the autoposition
For J = 0 to 7
If Comp.NameAutoposition = eAutoArray(J) Then
I = J + 1
'Set the array to begin again at eAutoPos_TopLeft
If J = 7 Then
I = 0
End If
End If
Next
'Autoposition is either manual or centercenter
If I = -1 Then
I = 0
End If
Call PCBServer.SendMessageToRobots(Comp.I_ObjectAddress,_
c_Broadcast, PCBM_BeginModify, c_NoEventData)
Comp.ChangeNameAutoposition = eAutoArray(I)
Call PCBServer.SendMessageToRobots(Comp.I_ObjectAddress,_
c_Broadcast, PCBM_EndModify , c_NoEventData)
End If
Wend
Call PCBServer.PostProcess
ResetParameters
Call AddStringParameter("Action", "Redraw")
RunProcess("PCB:Zoom")
End Sub
www.tdpcb.com
Altium Designer Script Information in VB for PCB Layout and Schematic Capture by Bill Smock from Tru Designs, San Diego, CA.
Showing posts with label Designators. Show all posts
Showing posts with label Designators. Show all posts
Friday, September 16, 2011
Wednesday, June 08, 2011
Swap Component Positions
This will swap the positions of two components that are choosen, including the rotation of the part and the rotation and position of the designators. Based on a script that came with Summer '09 but more useful. If a component is not selected the script will end to avoid a crash.
Sub SwapComps
Dim Board
Dim CompA
Dim CompB
Dim CompX
Dim CompY
Dim CompR
Dim DesX
Dim DesY
Dim DesR
Set Board = PCBServer.GetCurrentPCBBoard
If Board is Nothing Then Exit Sub
Pcbserver.PreProcess
While Board.ChooseLocation(x,y, "Select First Componet") = True
Set CompA = Board.GetObjectAtXYAskUserIfAmbiguous(x,y,MkSet(eComponentObject)_
,AllLayers, eEditAction_Select)
If CompA Is Nothing Then Exit Sub 'Needed, if no comp is selected, crash
Call Board.ChooseLocation(x,y, "Select Second Componet")
Set CompB = Board.GetObjectAtXYAskUserIfAmbiguous(x,y,MkSet(eComponentObject)_
,AllLayers, eEditAction_Select)
If CompB Is Nothing Then Exit Sub 'Needed, if no comp is selected, crash
CompX = CompA.X
CompY = CompA.Y
CompR = CompA.Rotation
DesX = CompA.Name.XLocation
DesY = CompA.Name.YLocation
DesR = CompA.Name.Rotation
Call PCBServer.SendMessageToRobots(CompA.I_ObjectAddress,c_Broadcast,_
PCBM_BeginModify, c_NoEventData)
CompA.X = CompB.X
CompA.Y = CompB.Y
CompA.Rotation = CompB.Rotation
CompA.ChangeNameAutoposition = eAutoPos_Manual
Call PCBServer.SendMessageToRobots(CompA.I_ObjectAddress,c_Broadcast,_
PCBM_EndModify , c_NoEventData)
Call PCBServer.SendMessageToRobots(CompA.Name.I_ObjectAddress, c_Broadcast,_
PCBM_BeginModify, c_NoEventData)
CompA.Name.XLocation = CompB.Name.XLocation
CompA.Name.YLocation = CompB.Name.YLocation
CompA.Name.Rotation = CompB.Name.Rotation
Call PCBServer.SendMessageToRobots(CompA.Name.I_ObjectAddress, c_Broadcast,_
PCBM_EndModify , c_NoEventData)
Call PCBServer.SendMessageToRobots(CompB.I_ObjectAddress,c_Broadcast,_
PCBM_BeginModify, c_NoEventData)
CompB.X = CompX
CompB.Y = CompY
CompB.Rotation = CompR
CompB.ChangeNameAutoposition = eAutoPos_Manual
Call PCBServer.SendMessageToRobots(CompB.I_ObjectAddress,c_Broadcast,_
PCBM_EndModify , c_NoEventData)
Call PCBServer.SendMessageToRobots(CompB.Name.I_ObjectAddress, c_Broadcast,_
PCBM_BeginModify, c_NoEventData)
CompB.Name.XLocation = DesX
CompB.Name.YLocation = DesY
CompB.Name.Rotation = DesR
Call PCBServer.SendMessageToRobots(CompB.Name.I_ObjectAddress, c_Broadcast,_
PCBM_EndModify , c_NoEventData)
Wend
Pcbserver.PostProcess
ResetParameters
Call AddStringParameter("Action", "Redraw")
RunProcess("PCB:Zoom")
End Sub
www.tdpcb.com
Sub SwapComps
Dim Board
Dim CompA
Dim CompB
Dim CompX
Dim CompY
Dim CompR
Dim DesX
Dim DesY
Dim DesR
Set Board = PCBServer.GetCurrentPCBBoard
If Board is Nothing Then Exit Sub
Pcbserver.PreProcess
While Board.ChooseLocation(x,y, "Select First Componet") = True
Set CompA = Board.GetObjectAtXYAskUserIfAmbiguous(x,y,MkSet(eComponentObject)_
,AllLayers, eEditAction_Select)
If CompA Is Nothing Then Exit Sub 'Needed, if no comp is selected, crash
Call Board.ChooseLocation(x,y, "Select Second Componet")
Set CompB = Board.GetObjectAtXYAskUserIfAmbiguous(x,y,MkSet(eComponentObject)_
,AllLayers, eEditAction_Select)
If CompB Is Nothing Then Exit Sub 'Needed, if no comp is selected, crash
CompX = CompA.X
CompY = CompA.Y
CompR = CompA.Rotation
DesX = CompA.Name.XLocation
DesY = CompA.Name.YLocation
DesR = CompA.Name.Rotation
Call PCBServer.SendMessageToRobots(CompA.I_ObjectAddress,c_Broadcast,_
PCBM_BeginModify, c_NoEventData)
CompA.X = CompB.X
CompA.Y = CompB.Y
CompA.Rotation = CompB.Rotation
CompA.ChangeNameAutoposition = eAutoPos_Manual
Call PCBServer.SendMessageToRobots(CompA.I_ObjectAddress,c_Broadcast,_
PCBM_EndModify , c_NoEventData)
Call PCBServer.SendMessageToRobots(CompA.Name.I_ObjectAddress, c_Broadcast,_
PCBM_BeginModify, c_NoEventData)
CompA.Name.XLocation = CompB.Name.XLocation
CompA.Name.YLocation = CompB.Name.YLocation
CompA.Name.Rotation = CompB.Name.Rotation
Call PCBServer.SendMessageToRobots(CompA.Name.I_ObjectAddress, c_Broadcast,_
PCBM_EndModify , c_NoEventData)
Call PCBServer.SendMessageToRobots(CompB.I_ObjectAddress,c_Broadcast,_
PCBM_BeginModify, c_NoEventData)
CompB.X = CompX
CompB.Y = CompY
CompB.Rotation = CompR
CompB.ChangeNameAutoposition = eAutoPos_Manual
Call PCBServer.SendMessageToRobots(CompB.I_ObjectAddress,c_Broadcast,_
PCBM_EndModify , c_NoEventData)
Call PCBServer.SendMessageToRobots(CompB.Name.I_ObjectAddress, c_Broadcast,_
PCBM_BeginModify, c_NoEventData)
CompB.Name.XLocation = DesX
CompB.Name.YLocation = DesY
CompB.Name.Rotation = DesR
Call PCBServer.SendMessageToRobots(CompB.Name.I_ObjectAddress, c_Broadcast,_
PCBM_EndModify , c_NoEventData)
Wend
Pcbserver.PostProcess
ResetParameters
Call AddStringParameter("Action", "Redraw")
RunProcess("PCB:Zoom")
End Sub
www.tdpcb.com
Labels:
Components,
Designators,
Rotation,
Swap
Monday, June 06, 2011
Set the DRC error for a component
Simple test to look for the "R2" componet and set it's DRC flag.
Sub SetDRC
Dim Board
Dim CompDes
Set Board = PCBServer.GetCurrentPCBBoard
If Board is Nothing Then Exit Sub
Iterator = Board.BoardIterator_Create
Iterator.AddFilter_ObjectSet(MkSet(eComponentObject))
Iterator.AddFilter_LayerSet(AllLayers)
Iterator.AddFilter_Method(eProcessComponents)
Set CompDes = Iterator.FirstPCBObject
PCBServer.PreProcess
While Not(CompDes Is Nothing)
If CompDes.Name.Text = "R2" then
CompDes.SetState_DRCError = True
End If
Set CompDes = Iterator.NextPCBObject
Wend
Board.BoardIterator_Destroy(Iterator)
Pcbserver.PostProcess
ResetParameters
Call AddStringParameter("Action", "Redraw")
RunProcess("PCB:Zoom")
End Sub
www.tdpcb.com
Sub SetDRC
Dim Board
Dim CompDes
Set Board = PCBServer.GetCurrentPCBBoard
If Board is Nothing Then Exit Sub
Iterator = Board.BoardIterator_Create
Iterator.AddFilter_ObjectSet(MkSet(eComponentObject))
Iterator.AddFilter_LayerSet(AllLayers)
Iterator.AddFilter_Method(eProcessComponents)
Set CompDes = Iterator.FirstPCBObject
PCBServer.PreProcess
While Not(CompDes Is Nothing)
If CompDes.Name.Text = "R2" then
CompDes.SetState_DRCError = True
End If
Set CompDes = Iterator.NextPCBObject
Wend
Board.BoardIterator_Destroy(Iterator)
Pcbserver.PostProcess
ResetParameters
Call AddStringParameter("Action", "Redraw")
RunProcess("PCB:Zoom")
End Sub
Labels:
Components,
Designators,
DRC
Thursday, May 26, 2011
Toggle Component Designators
Toggle all component designators on PCB from shown to hidden.
Sub ToggleDesignators
Dim Board
Dim Component
Set Board = PCBServer.GetCurrentPCBBoard
If Board is Nothing Then Exit Sub
Iterator = Board.BoardIterator_Create
Iterator.AddFilter_ObjectSet(MkSet(eComponentObject))
Iterator.AddFilter_LayerSet(AllLayers)
Iterator.AddFilter_Method(eProcessAll)
Set Component= Iterator.FirstPCBObject
PCBServer.PreProcess
While Not(Component is Nothing)
Component.NameOn = Not(Component.NameOn)
Set Component= Iterator.NextPCBObject
Wend
Board.BoardIterator_Destroy(Iterator)
Pcbserver.PostProcess
ResetParameters
Call AddStringParameter("Action", "Redraw")
RunProcess("PCB:Zoom")
End Sub
www.tdpcb.com
Sub ToggleDesignators
Dim Board
Dim Component
Set Board = PCBServer.GetCurrentPCBBoard
If Board is Nothing Then Exit Sub
Iterator = Board.BoardIterator_Create
Iterator.AddFilter_ObjectSet(MkSet(eComponentObject))
Iterator.AddFilter_LayerSet(AllLayers)
Iterator.AddFilter_Method(eProcessAll)
Set Component= Iterator.FirstPCBObject
PCBServer.PreProcess
While Not(Component is Nothing)
Component.NameOn = Not(Component.NameOn)
Set Component= Iterator.NextPCBObject
Wend
Board.BoardIterator_Destroy(Iterator)
Pcbserver.PostProcess
ResetParameters
Call AddStringParameter("Action", "Redraw")
RunProcess("PCB:Zoom")
End Sub
www.tdpcb.com
Labels:
Designators,
Toggle
Monday, May 09, 2011
Rotate and Center Designators of Selected Parts.
Build upon a previous script, rotate and center designators for only selected parts.
Sub RotateSelectedDesignators
Dim Board
Dim Component
Dim CompDes
Dim I
Set Board = PCBServer.GetCurrentPCBBoard
If Board is Nothing Then Exit Sub
BeginHourGlass
Iterator = Board.BoardIterator_Create
Iterator.AddFilter_ObjectSet(MkSet(eComponentObject))
Iterator.AddFilter_LayerSet(AllLayers)
Iterator.AddFilter_Method(eProcessAll)
Set CompDes = Iterator.FirstPCBObject
PCBServer.PreProcess
I = 0
While Not (CompDes Is Nothing)
If CompDes.Selected = True Then
Call PCBServer.SendMessageToRobots(CompDes.Name.I_ObjectAddress,_
c_Broadcast, PCBM_BeginModify, c_NoEventData)
I = I + 1
If CompDes.Layer = eTopLayer then 'Component is on the top
Select Case CompDes.Rotation
Case 0, 180, 360
CompDes.Name.Rotation = 0
Case 90, 270
CompDes.Name.Rotation = 90
End Select
else 'Component is on the bottom
Select Case CompDes.Rotation
Case 0, 180, 360
CompDes.Name.Rotation = 0
Case 90, 270
CompDes.Name.Rotation = 270
End Select
End If
Call PCBServer.SendMessageToRobots(CompDes.Name.I_ObjectAddress,_
c_Broadcast, PCBM_EndModify , c_NoEventData)
Call PCBServer.SendMessageToRobots(CompDes.Name.I_ObjectAddress,_
c_Broadcast, PCBM_BeginModify, c_NoEventData)
CompDes.ChangeNameAutoposition = eAutoPos_CenterCenter
Call PCBServer.SendMessageToRobots(CompDes.Name.I_ObjectAddress,_
c_Broadcast, PCBM_EndModify , c_NoEventData)
End if
Set CompDes = Iterator.NextPCBObject
Wend
'Uncomment this line if you want a message after it has finished.
'ShowMessage(I & " were found")
If I = 0 then
ShowMessage("No parts were selected.")
End If
Board.BoardIterator_Destroy(Iterator)
Pcbserver.PostProcess
EndHourGlass
Call AddStringParameter("Action", "Redraw")
RunProcess("PCB:Zoom")
End Sub
Sub RotateSelectedDesignators
Dim Board
Dim Component
Dim CompDes
Dim I
Set Board = PCBServer.GetCurrentPCBBoard
If Board is Nothing Then Exit Sub
BeginHourGlass
Iterator = Board.BoardIterator_Create
Iterator.AddFilter_ObjectSet(MkSet(eComponentObject))
Iterator.AddFilter_LayerSet(AllLayers)
Iterator.AddFilter_Method(eProcessAll)
Set CompDes = Iterator.FirstPCBObject
PCBServer.PreProcess
I = 0
While Not (CompDes Is Nothing)
If CompDes.Selected = True Then
Call PCBServer.SendMessageToRobots(CompDes.Name.I_ObjectAddress,_
c_Broadcast, PCBM_BeginModify, c_NoEventData)
I = I + 1
If CompDes.Layer = eTopLayer then 'Component is on the top
Select Case CompDes.Rotation
Case 0, 180, 360
CompDes.Name.Rotation = 0
Case 90, 270
CompDes.Name.Rotation = 90
End Select
else 'Component is on the bottom
Select Case CompDes.Rotation
Case 0, 180, 360
CompDes.Name.Rotation = 0
Case 90, 270
CompDes.Name.Rotation = 270
End Select
End If
Call PCBServer.SendMessageToRobots(CompDes.Name.I_ObjectAddress,_
c_Broadcast, PCBM_EndModify , c_NoEventData)
Call PCBServer.SendMessageToRobots(CompDes.Name.I_ObjectAddress,_
c_Broadcast, PCBM_BeginModify, c_NoEventData)
CompDes.ChangeNameAutoposition = eAutoPos_CenterCenter
Call PCBServer.SendMessageToRobots(CompDes.Name.I_ObjectAddress,_
c_Broadcast, PCBM_EndModify , c_NoEventData)
End if
Set CompDes = Iterator.NextPCBObject
Wend
'Uncomment this line if you want a message after it has finished.
'ShowMessage(I & " were found")
If I = 0 then
ShowMessage("No parts were selected.")
End If
Board.BoardIterator_Destroy(Iterator)
Pcbserver.PostProcess
EndHourGlass
Call AddStringParameter("Action", "Redraw")
RunProcess("PCB:Zoom")
End Sub
Labels:
Components,
Designators,
Select
Friday, April 29, 2011
Moving Designators
Rotate the designators in one of two ways and center them on the component so they are consistant.
Also detect if the component is on the top or the bottom.
Sub RotateDesignators
Dim Board
Dim Component
Dim CompDes
Dim I
Set Board = PCBServer.GetCurrentPCBBoard
If Board is Nothing Then Exit Sub
Iterator = Board.BoardIterator_Create
Iterator.AddFilter_ObjectSet(MkSet(eComponentObject))
Iterator.AddFilter_LayerSet(AllLayers)
Iterator.AddFilter_Method(eProcessAll)
Set CompDes = Iterator.FirstPCBObject
PCBServer.PreProcess
I = 0
While Not (CompDes Is Nothing)
Call PCBServer.SendMessageToRobots(CompDes.Name.I_ObjectAddress,_
c_Broadcast, PCBM_BeginModify, c_NoEventData)
I = I + 1
If CompDes.Layer = eTopLayer then 'Component is on the top
Select Case CompDes.Rotation
Case 0, 180, 360
CompDes.Name.Rotation = 0
Case 90, 270
CompDes.Name.Rotation = 90
Case Else
CompDes.Name.Rotation = 0
End Select
Else 'Component is on the bottom
Select Case CompDes.Rotation
Case 0, 180, 360
CompDes.Name.Rotation = 0
Case 90, 270
CompDes.Name.Rotation = 270
Case Else
CompDes.Name.Rotation = 0
End Select
End If
CompDes.ChangeNameAutoposition = eAutoPos_CenterCenter
Call PCBServer.SendMessageToRobots(CompDes.Name.I_ObjectAddress,_
c_Broadcast, PCBM_EndModify , c_NoEventData)
Set CompDes = Iterator.NextPCBObject
Wend
'Uncomment next line if you want a message after it has finished.
'ShowMessage(I & " were found")
Board.BoardIterator_Destroy(Iterator)
Pcbserver.PostProcess
ResetParameters
Call AddStringParameter("Action", "Redraw")
RunProcess("PCB:Zoom")
End Sub
http://www.tdpcb.com/
Also detect if the component is on the top or the bottom.
Sub RotateDesignators
Dim Board
Dim Component
Dim CompDes
Dim I
Set Board = PCBServer.GetCurrentPCBBoard
If Board is Nothing Then Exit Sub
Iterator = Board.BoardIterator_Create
Iterator.AddFilter_ObjectSet(MkSet(eComponentObject))
Iterator.AddFilter_LayerSet(AllLayers)
Iterator.AddFilter_Method(eProcessAll)
Set CompDes = Iterator.FirstPCBObject
PCBServer.PreProcess
I = 0
While Not (CompDes Is Nothing)
Call PCBServer.SendMessageToRobots(CompDes.Name.I_ObjectAddress,_
c_Broadcast, PCBM_BeginModify, c_NoEventData)
I = I + 1
If CompDes.Layer = eTopLayer then 'Component is on the top
Select Case CompDes.Rotation
Case 0, 180, 360
CompDes.Name.Rotation = 0
Case 90, 270
CompDes.Name.Rotation = 90
Case Else
CompDes.Name.Rotation = 0
End Select
Else 'Component is on the bottom
Select Case CompDes.Rotation
Case 0, 180, 360
CompDes.Name.Rotation = 0
Case 90, 270
CompDes.Name.Rotation = 270
Case Else
CompDes.Name.Rotation = 0
End Select
End If
CompDes.ChangeNameAutoposition = eAutoPos_CenterCenter
Call PCBServer.SendMessageToRobots(CompDes.Name.I_ObjectAddress,_
c_Broadcast, PCBM_EndModify , c_NoEventData)
Set CompDes = Iterator.NextPCBObject
Wend
'Uncomment next line if you want a message after it has finished.
'ShowMessage(I & " were found")
Board.BoardIterator_Destroy(Iterator)
Pcbserver.PostProcess
ResetParameters
Call AddStringParameter("Action", "Redraw")
RunProcess("PCB:Zoom")
End Sub
http://www.tdpcb.com/
Labels:
Components,
Designators
Subscribe to:
Posts (Atom)










