Forum: Platinen Altium, Skripte, Macros oder ähnliches zur Automatisierung


von M.A. S. (mse2)


Lesenswert?

Ich arbeite mit Altium Designer Summer 9 und suche nach einer 
Möglichkeit, immer wiederkehrende Dinge zu automatisieren, sprich: mit 
einem Mausklick oder einer einfachen Tastenkombination anzustoßen, statt 
eine längere Folge von Befehlen auszuführen.

Beispiel:
Umschalten der Sichtbarkeiten von Designators und Comments von 
Bauteilen.
Bisher mache ich das wie folgt:

Comments sichtbar, Designators unsichtbar machen:

- PCBList, "all objects", "only Text":
- Sortieren nach "String Type",
- bei allen Designators "Hide" setzen (mit Hilfe von Markieren, Copy und 
Paste)
- bei allen Comments entsprechend "Hide" zurücksetzen.


Kann man das und ähnliche Dinge irgendwie mittels Skript, Makro etc. 
programmieren und dann mit nur einer Tastenkombination oder von mir aus 
Menübefehl zur Ausführung bringen?

von Cyblord -. (cyblord)


Lesenswert?

Michael S. schrieb:
>
> Kann man das und ähnliche Dinge irgendwie mittels Skript, Makro etc.
> programmieren und dann mit nur einer Tastenkombination oder von mir aus
> Menübefehl zur Ausführung bringen?

Ja. Der AD kann komplexe Scripte in versch. Sprachen ausführen.

von spess53 (Gast)


Lesenswert?

Hi

>Kann man das und ähnliche Dinge irgendwie mittels Skript, Makro etc.
>programmieren und dann mit nur einer Tastenkombination oder von mir aus
>Menübefehl zur Ausführung bringen?

Das konnte schon Protel99.

MfG Spess

von M.A. S. (mse2)


Lesenswert?

Ich danke Euch für Eure Hinweise.

Mit Hilfe der Doku auf der Altium Seite habe ich inzwischen ein "Hallo 
Welt" realisiert und nach langem Suchen einen ersten Hauch von Ahnung, 
wie man sich in dem Objektsystem zurechtfindet.
Besonders komfortabel finde ich die Dokumentation davon sowie auch die 
IDE nicht gerade.
Mal sehen, ob ich damit 'was zustandekriege...

von M.A. S. (mse2)


Lesenswert?

...also eine Einladung, sich damit zu beschäftigen sieht wirklich anders 
aus, als die Doku. Sie mag vollständig sein, aber es navigiert sich 
nicht so schön.

Welche Property muss man setzen/rücksetzten, damit ein IPCB_Text 
sichtbar/unsichtbar wird?

von Florian (Gast)


Lesenswert?

Hallo Michael,

ich habe auch schon ein paar Skripte für AD gemacht. Man kann zwar viel 
machen, aber die Doku lässt wirklich zu wünschen übrig.

Ich habe mir aber viel von Skripten aus dem Netz angeeignet. Unter 
anderem von dieser Seite
http://code.google.com/p/altium-designer-addons/downloads/list
Ich glaube das Skript "ShowHideDesignators_v1.1" ist sogar das was du 
suchst.

Gruß
Florian

von M.A. S. (mse2)


Lesenswert?

Hi Florian,

ich danke Dir vielmals für Deine Antwort.
Inzwischen habe ich herausgefunden, wie man das macht, was ich machen 
möchte:

Ich habe eine Sichtbar/Unsichtbareigenschaft vergeblich in IPBC_Text 
gesucht, weil es sie dort nicht gibt.

Es gibt sie für Comment und Designator in der Klasse IPCB_Component als
"CommentOn" und "NameOn".



Comp.SetState_NameOn(true);
Comp.SetState_CommentOn(false);


Procedure NamesOn;
Var
    Board     : IPCB_Board;
    Comp       : IPCB_Primitive;
    Iterator  : IPCB_BoardIterator;

Begin


    // Retrieve the current board
    Board := PCBServer.GetCurrentPCBBoard;
    If Board = Nil Then Exit;

    // retrieve the iterator
    Iterator        := Board.BoardIterator_Create;
    Iterator.AddFilter_ObjectSet(MkSet(eComponentObject));
    Iterator.AddFilter_LayerSet(AllLayers);
    Iterator.AddFilter_Method(eProcessAll);

    // Search and count pads
    Comp := Iterator.FirstPCBObject;
    While (Comp <> Nil) Do
    Begin

        // **** HIER PASSIERTS: ******************
        Comp.SetState_NameOn(true);
        Comp.SetState_CommentOn(false);


        Comp := Iterator.NextPCBObject;
    End;
    Board.BoardIterator_Destroy(Iterator);

End;


// Danke und gute Nacht!

// Gruß,
// Michael

von mse2 (Gast)


Lesenswert?

das oben gezeigte Programm ist übrigens ein modifiziertes Beisiel.

Falls jemand das gleiche Versucht:
die Prozedur macht, was sie soll, aber im Verborgenen. D.h., dass man 
die Änderung erst sieht, wenn man explizit ein Redraw des Boards 
anstößt.

Dies kann man manuell durch Drücken der 'Ende' Taste tun oder, wie ich 
inzwischen mit Hilfe eines Beispiels aus Florians Link mit folgender 
Code-Sequenz:

// Board neu Zeichnen, damit man die Veränderung auch sieht
    ResetParameters;
    AddStringParameter('Action','Redraw');
    RunProcess('PCB:Zoom');

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.