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
SETSYMDIR(sym,path) // speichert neues symbolisches Verzeichnis
DELSYMDIR(sym) // löscht symbolisches Verzeichnis
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 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
RemoteControl hat 3 Betriebsarten:
- External-control - cad-operationen von einm Terminal oder Process ausführen (remote)
- StartRemote - ein RemoteControlScript bei Programmstart ausführen
- Internal-control - ein RemoteControlScript mit Menüpunkt Remote starten
External-control:
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 /remote/.
Kopieren Sie das Executable in Verzeichnis .
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
StartRemote
RemoteControlScripts bei Programmstart ausführen mit:
gcad3d rcmd {remoteControlFilename}.cmd
zB:
gcad3d mode_cad rcmd ~/gCAD3D/prg/sample_cmd1.cmd
Beispiel: siehe Datei Data/prg/sample_cmd1.cmd
(Siehe Pfad für Verzeichnis "Data" mit Menü Standards/edit directory-path-group)
Internal-control:
Starten eines RemoteControlScript mit Menü Remote/Select ..
__________________________________________________________________________
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 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
SETSYMDIR(sym,path) // speichert neues symbolisches Verzeichnis
DELSYMDIR(sym) // löscht symbolisches Verzeichnis
# 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 = 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,,",Objekte) // aktive Textur aufbringen
echo 'ATTS("X0.5,0.5" A21)' > ~/gCAD3D/tmp/CTRLpin
__________________________________________________________________________
USER // Objekt von Anwender 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