##

    Letzte Änderung: 2013-02-25

    RemoteControl gCAD3D

    Was ist RemoteControl

    PRI(text)            // Text im CAD-Ausgabefenster anzeigen
    ADD(code)            // CAD-Objekte speichern und anzeigen
    ADDFILE(filNam)      // CAD-Objekte aus Datei speichern und anzeigen
    MOD(code)            // CAD-Objekte modifizieren, anzeigen
    NEW                  // das aktive Modell speichern (wenn modifiziert), dann löschen
    CLEAR                // das aktive Modell löschen ohne speichern
    NEW                  // das gesamte Modell löschen
    MODSIZ(newsize)      // Modellgrößen ändern
    END                  // gesamtes Modell neu anzeigen

    GETSYMDIR(sym)       // liefert den absoluten Pfad des Verzeichnisses <sym>
    SETSYMDIR(sym,path)  // speichert neues symbolisches Verzeichnis
    DELSYMDIR(sym)       // löscht symbolisches Verzeichnis <sym>

    LOAD(modelname)      // löschen und neues Modell laden (native,step,iges,dxf ..)
    LOADSM(submodel)     // Submodell laden (muss natives Modell (.gcad) sein)

    SAVE                 // Modell mit aktuellem Modellnamen speichern
    SAVE(new_modelname)  // Modell mit anderem Modellnamen speichern

    ZOOMALL              // Zoomfaktor automatisch
    VIEW(center, scale, rotAng, tiltAng)  // Ansicht ändern
    SHOW(obj,off)        // Object unsichtbar machen
    SHOW(obj)            // Object sichtbar machen
    ATTL(linetypNr,objects) // Linientype ändern
    ATTS("code",objects) // Flächenattribute ändern (Farbe, Texture, Symbolisch)
    LOADTEX(texFilNam)   // Texturdatei (Bild) laden

    ERRCLR               // Fehlercode abfragen / löschen; 0=OK
    GETMODSIZ            // aktuelle Modellgröße abfragen
    GETOBJINDNXT(P)      // nächsten freien Objektindex abfragen
    GETLNR               // aktuelle Zeilennummer abfragen
    DELFOLL(lnr)         // alle Objekte ab Zeile <lnr> löschen
    USER                 // Objekt von Anweder abfragen; Selektion / Abbruch (Esc.)
    DUMP(list)           // Ausgabe einer List in das Konsolfenster
    MODE(widget,off|on)  // Ein/Ausblenden von CAD-Fenstern; Browser, Menü, Toolbars ..
    WAIT_ESC             // stop bis ESC - Taste gedrückt wird
    SYSTEM               // System-Kommando ausführen; warten; zB: "SYSTEM(pluma /tmp/t1)"
    EXIT                 // shut down gcad3d

    __________________________________________________________________________

    Was ist RemoteControl

    Mit RemoteControl kann gCAD3D programmgesteuert bedient werden.
    Es können alle Programmiersprachen benutzt werden; auch skript-shells.
    Es werden 2 Pipes (Linux; MS-Windows: Files) zur Ein- und Ausgabe benutzt.
    Die Ein- Ausgabepipes werden im Verzeichnis {tmpdir} angelegt.
    Das temp-Verzeichnis von gcad wird zu Programmbeginn im Konsolfenster ausgegeben
      (zB Unix " basdir = |/mnt/serv2/devel/gcad3d/|")
      bei einer Standardinstallation sind dies:
    Linux:
      Die Eingabepipe ist ${HOME}/gCAD3D/tmp/CTRLpin
      die Ausgabepipe ist ${HOME}/gCAD3D/tmp/CTRLpout
    Windows:
      Eingabe über %APPDATA%\gCAD3D\tmp\CTRLpin
      Ausgabe nach %APPDATA%\gCAD3D\tmp\CTRLpout

    Es kann eine Systemvariable gesetzt werden -
      Unix "RCTL=/mnt/serv2/devel/gcad3d/CTRLpin"
        Damit können nun Commands an $RCTL gesendet werden.
      MS-Win: set RCTL="%APPDATA%\gCAD3D\tmp\CTRLpin"
        Damit können nun Commands an %RCTL% gesendet werden.

    Die Eingabe und die Ausgabe erfolgt mit Textcodes, nicht binär.
    Mit einem normalen Terminalprogramm (Linux: xterm oder gnome-terminal; MS-Windows: cmd)
    können Kommandos an gcad geschickt werden (zB. aktives Modell löschen):
    Linux:
      echo 'new' > ~/gCAD3D/tmp/CTRLpin
      oder
      echo 'new' > $RCTL
    MS-Windows:
      echo new>"%APPDATA%\gCAD3D\tmp\CTRLpin"
      oder
      echo new>%RCTL%

    Eine Befehlsdatei (mehrere Befehle) schicken:
     - put the following 6 lines into  file t1.dat:
    new
    add(P1=P(100 0 0))
    add(C1=P1 50)
    #eof

    Datei schicken:
    Linux:
      cat t1.dat > ~/gCAD3D/tmp/CTRLpin
    MS_Windows:
      copy t1.dat "%APPDATA%\gCAD3D\tmp\CTRLpin"

    Empfang der Ausgaben von gcad (zB Anzeige der Ausgabe in einem Terminalfenster):
    Linux (Verbindung bleibt bestehen):
      cat  ~/gCAD3D/tmp/CTRLpout
    MS-Windows (Datei wird nach jedem RemoteCommand neu erstellt):
      type %APPDATA%\gCAD3D\tmp\CTRLpout

    Gcad sendet nach jedem Kommando zumindest ein Neue-Zeile-Zeichen
      (newline, Ascii 10).

    Wenn das Programm über "Remote/ Select-Start" aktivierbar sein soll:
      Kopieren Sie das Start-script in Verzeichnis <binDir>/remote/.
      Kopieren Sie das Executable in Verzeichnis <binDir>.

    Programmierbeispiele:
    VB.Net (MS-Windows): Demo1gCadRemoteControl.zip
    Java (Linux): DemoRC1.java

    Alle folgenden angeführten Beispiele sind Linux-Beispiele.

    Bitte senden Sie verbesserte Programme oder Programme für andere
      Programmiersprachen an
      support at gcad3d.org

    __________________________________________________________________________

    PRI(text)              // Text im CAD-Ausgabefenster anzeigen

    Objekte (Punkte, Vektoren, Variablen) werden dekodiert; die Werte
      werden angezeigt.

    Beispiel:
    echo 'pri("TestPrint 1")' > ~/gCAD3D/tmp/CTRLpin
    # Anzeige der Koordinaten von Punkt P1 und Vektor D1:
    echo 'pri("P20 = ",P20," D20 = ",D20)' > ~/gCAD3D/tmp/CTRLpin

    __________________________________________________________________________

    GETLNR               // aktuelle Zeilennummer abfragen
    DELFOLL(lnr)         // alle Objekte ab Zeile <lnr> löschen

    # die Zeilennummer von GETLNR kann später mit DELFOLL zum Löschen der
    #   danach erzeugten Objekte benutzt werden.

    __________________________________________________________________________

    GETOBJINDNXT(typ)     // nächsten freien Objektindex abfragen

    # Beispiel: nächsten freien DB-index für Punkte abfragen:
    echo 'GETOBJINDNXT(P)' > ~/gCAD3D/tmp/CTRLpin
    # Siehe Liste Objekttypen

    __________________________________________________________________________

    __________________________________________________________________________

    ADD(code)            // CAD-Objekte speichern und anzeigen

    # Code: ein gcad-ObjektText; siehe Codes
    # zB Punkt erzeugen mit:
    echo 'add(P1=P(100 0 20))' > ~/gCAD3D/tmp/CTRLpin

    __________________________________________________________________________

    ADDFILE(filNam)      // CAD-Objekte aus Datei speichern und anzeigen

    echo 'addfile("t1")' > ~/gCAD3D/tmp/CTRLpin

    Beispiel für Datei t1:
    MODE(MEN,off)
    MODE(BRW,off)
    MODE(BAR1,off)
    MODE(BAR2,off)
    new
    add(P1=P(100 0 0))
    add(C1=P1 50)
    zoomall
    #eof

    __________________________________________________________________________

    MOD(code)            // CAD-Objekte modifizieren, anzeigen

    Beispiel:
    echo 'MOD(V1=70)' > ~/gCAD3D/tmp/CTRLpin

    # Ändern der Zeile "V1=50" im Code (siehe unten) und Update der Variablen V1
    # und des Kreises C1.

    P1=P(100 100 0)
    V1=50
    C1=P1 V1

    __________________________________________________________________________

    GETSYMDIR(sym)       // liefert den absoluten Pfad des Verzeichnisses <sym>
    SETSYMDIR(sym,path)  // speichert neues symbolisches Verzeichnis
    DELSYMDIR(sym)       // löscht symbolisches Verzeichnis <sym>

    # Abfrage des (absoluten) Pfades des Symbols "Data"
    echo 'GETSYMDIR("Data")' > ~/gCAD3D/tmp/CTRLpin

    # Neues Symbol "myPath" auf Verzeichnis "/tmp/gcad/" setzen.
    echo 'SETSYMDIR("myPath","/tmp/gcad/")' > ~/gCAD3D/tmp/CTRLpin

    # Symbol "myPath" löschen:
    echo 'DELSYMDIR("myPath")' > ~/gCAD3D/tmp/CTRLpin

    # Fehler löschen:
    echo 'ERRCLR' > ~/gCAD3D/tmp/CTRLpin

    __________________________________________________________________________

    LOAD(modelname)      // löschen und neues Modell laden (native,step,iges,dxf ..)

    Modell laden; Dateiname kann symbolisch, relativ oder absolut sein.

    # Beispiel symbolischer Dateiname:
    echo 'load("Data/sample_area1.gcad")' > ~/gCAD3D/tmp/CTRLpin
    # Beispiel relativer Dateiname: (verwendet das aktuelle symbolische Verzeichnis):
    echo 'load("../dat/sample_area2.gcad")' > ~/gCAD3D/tmp/CTRLpin
    # Beispiel absoluter Dateiname:
    echo 'load("/tmp/test1.gcad")' > ~/gCAD3D/tmp/CTRLpin

    echo 'MODSIZ(10000)' > ~/gCAD3D/tmp/CTRLpin
    echo 'END' > ~/gCAD3D/tmp/CTRLpin

    LOADSM(submodel)     // Submodell laden (muss natives Modell (.gcad) sein)

    # Submodelle müssen in einem Verzeichnis mit Symbol liegen.
    # Siehe SETSYMDIR.
    # Beispiel Submodelle laden, positionieren:
    echo 'new' > ~/gCAD3D/tmp/CTRLpin
    echo 'loadsm("Data/sample_mod_blech1.gcad")' > $RCTL
    echo 'loadsm("Data/sample_mod_screw1.gcad")' > $RCTL
    echo 'loadsm("Data/sample_mod_nut1.gcad")' > $RCTL
    echo 'add(M20="Data/sample_mod_blech1.gcad" P(0 10 0))' > $RCTL
    echo 'add(M21="Data/sample_mod_screw1.gcad" P(30 36.5 67))' > $RCTL
    echo 'add(M22="Data/sample_mod_nut1.gcad" P(36 36.5 67))' > $RCTL

    oder eine Datei test.cmd erzeugen mit:
    new
    loadsm("Data/sample_mod_blech1.gcad")
    loadsm("Data/sample_mod_screw1.gcad")
    loadsm("Data/sample_mod_nut1.gcad")
    add(M20="Data/sample_mod_blech1.gcad" P(0 10 0))
    add(M21="Data/sample_mod_screw1.gcad" P(30 36.5 67))
    add(M22="Data/sample_mod_nut1.gcad" P(36 36.5 67))
    # eof

    ausführen mit -
    Unix:
      cat test.cmd > $RCTL
    MS-Win:
      copy test.cmd %RCTL%

    __________________________________________________________________________

    SAVE                 // Modell mit aktuellem Modellnamen speichern
    SAVE(new_modelname)  // Modell mit anderem Modellnamen speichern

    # Aktives Modell als "test1.gcad" im symbolischen Verzeichnis "Data" speichern.
    # Siehe SETSYMDIR.
    echo 'save("Data/test1.gcad")' > ~/gCAD3D/tmp/CTRLpin

    # speichern.
    echo 'save' > ~/gCAD3D/tmp/CTRLpin

    __________________________________________________________________________

    VIEW(center, scale, rotAng, tiltAng)  // Ansicht ändern

    # Ansichts-maßstab ändern:
    echo 'view(0.25)' > ~/gCAD3D/tmp/CTRLpin

    # Ansicht über Verdrehwinkel und Kippwinkel ändern (in Grad)
    echo 'view(ang(45) ang(30))' > ~/gCAD3D/tmp/CTRLpin

    # Ansicht verschieben (Bildschirmittelpunkt ändern):
    echo 'view(P(38 49 7))' > ~/gCAD3D/tmp/CTRLpin

    __________________________________________________________________________

    SHOW(obj,off)        # Object unsichtbar machen
    SHOW(obj)            # Object sichtbar machen

    # Linie L21 unsichtbar machen
    echo 'show(L21,off)' > ~/gCAD3D/tmp/CTRLpin

    # Linie L21 sichtbar machen
    echo 'show(L21)' > ~/gCAD3D/tmp/CTRLpin

    __________________________________________________________________________

    DUMP()    # Ausgabe der geom. Struktur eines Datenbank-objekts

    DUMP("GA")           # Ausgabe der Liste der graf. Attribute
    DUMP("DL")           # Ausgabe Display-Liste
    DUMP("AT")           # Ausgabe Linietypentabelle
    DUMP("TX")           # Ausgabe Texturen
    DUMP("SD")           # Ausgabe aller symbolischen Verzeichnisse

    Beispiele:
    echo 'DUMP(C20)' > ~/gCAD3D/tmp/CTRLpin
    echo 'DUMP("GA")' > ~/gCAD3D/tmp/CTRLpin

    __________________________________________________________________________

    MODE(widget,off|on)      // Ein/Ausblenden von CAD-Fenstern; Browser, Menü, Toolbars ..

    # Menü aus
    echo 'MODE(MEN,off)' > ~/gCAD3D/tmp/CTRLpin

    # Brwowser aus
    echo 'MODE(BRW,off)' > ~/gCAD3D/tmp/CTRLpin

    # Balken oben aus
    echo 'MODE(BAR1,off)' > ~/gCAD3D/tmp/CTRLpin

    # Nachrichtenfenster unten aus
    echo 'MODE(BAR2,off)' > ~/gCAD3D/tmp/CTRLpin

    # Nachrichtenfenster unten wieder Ein.
    echo 'MODE(BAR2,on)' > ~/gCAD3D/tmp/CTRLpin

    __________________________________________________________________________

    ATTL(linetypNr,objects)             // Linientype ändern

    # Linientypen 0 - 12 sind vordefiniert in Datei ~/gCAD3D/cfg_{os}/ltyp.rc
    # See Defaultsettings

    # Linientyp = 8 setzen für L21 und L22
    echo 'ATTL(8,L21,L22)' > ~/gCAD3D/tmp/CTRLpin

    # Linientyp ändern/erzeugen (G<linienTypNr> = Farbe,Linientyp,Dicke)
    # Linientyp G13 erzeugen: grün, Volllinie, Dicke = 4 mit:
    echo 'add(G13=3,0,4))' > ~/gCAD3D/tmp/CTRLpin

    # Linientyp = 13 setzen für L21 and L22
    echo 'ATTL(13,L21,L22)' > ~/gCAD3D/tmp/CTRLpin

    __________________________________________________________________________

    ATTS("code",objects)           // Flächenattribute ändern (Farbe, Textur, Symbolisch)

    Beispiel:
    # Typ der Fläche A21 auf Symbolisch ändern (nicht schattiert)
    echo 'ATTS("S" A21)' > ~/gCAD3D/tmp/CTRLpin

    # auf Standardfarbe zurücksetzen
    echo 'ATTS("C" A21)' > ~/gCAD3D/tmp/CTRLpin

    # Farbe grün setzen (Rot-Anteil-0, Grün-Anteil-255, Blau-Anteil-0)
    echo 'ATTS("C00ff00" A21)' > ~/gCAD3D/tmp/CTRLpin

    # Transparent setzen (T0=normal, T1=halb transparent, T2=voll transparent)
    echo 'ATTS("T2" A21)' > ~/gCAD3D/tmp/CTRLpin

    # Textur laden und aktiv setzen.
    # Texturen müssen in einem Verzeichnis mit Symbol liegen.
    echo 'LOADTEX("DIR_BMP/Ziegel1.bmp")' > ~/gCAD3D/tmp/CTRLpin

    # Texture auf Fläche A21 aufbringen; hor./vert. Maßstab auf "0.5,0.5".
    # ATTS("X<Maßstab>,<Offsets>,<Winkel>",Objekte) // aktive Textur aufbringen
    echo 'ATTS("X0.5,0.5" A21)' > ~/gCAD3D/tmp/CTRLpin

    __________________________________________________________________________

    USER                                // Objekt von Anweder abfragen; Selektion / Abbruch (Esc.)

    # vom Anwender ein Objekt auswählen lassen
    echo 'USER' > ~/gCAD3D/tmp/CTRLpin
    # liefert "SEL(P(-3.244327 -10.077265 0.000000))"  bei Positionsanzeige
    # liefert "SEL(C16)"                               bei Auswahl von Objekt C16
    # liefert "SEL()"                                  bei Escape-Taste gedrückt