Last update: 2013-02-25

RemoteControl gCAD3D

What is RemoteControl PRI(text) // print text (into messagewindow) ADD(code) // process and store source-objects ADDFILE(filNam) // process and store cad-objects in file MOD(code) // modify cad-code, update NEW // save active model if modified, then clear whole model CLEAR // clear whole model - do not save model if modified MODSIZ(newsize) // change modelsize; use 'END' to update. END // reprocess whole model GETSYMDIR(sym) // returns path for symbolic-directory SETSYMDIR(sym,path) // set new symbolic-directory DELSYMDIR(sym) // delete symbolic-directory LOAD(modelname) // clear and load new model (native, step, iges, dxf ..) LOADSM(submodel) // load submodel (can only load native models (.gcad)) SAVE // save model with current modelname SAVE(new_modelname) // save model with given modelname ZOOMALL // set zoomfactor to view all objects VIEW(center, scale, rotAng, tiltAng) // define view; SHOW(obj,off) // hide object SHOW(obj) // show hidden object ATTL(linetypNr,objects) // change linetype for objects ATTS("code",objects) // change surface-attribute LOADTEX(texFilNam) // load texturefile (image) ERRCLR // returns errcode and clears error; 0=OK GETMODSIZ // get current modelsize GETOBJINDNXT(P) // get next free object-index GETLNR // get current lineNr DELFOLL(lnr) // delete all lines following lineNr' USER // get object from user (selection); Esc: empty. DUMP(list) // dump list to console-window MODE(widget,off|on) // hide or show subwindows: browser, menu, toolbars .. WAIT_ESC // stop until ESC - key becomes pressed SYSTEM // do operating-system command, wait; eg "SYSTEM(pluma /tmp/t1)" EXIT // shut down gcad3d __________________________________________________________________________

What is RemoteControl RemoteControl has 3 modes: - External-control - do cad-operations from a terminal or process outside gcad (remote) - StartRemote - start a RemoteControlScript at startup - Internal-control - start a RemoteControlScript from menu "Remote" External-control: With RemoteControl you can control the cad-program gCAD3D from programs. All programming languages can be used, even shell-scripts. For input and output 2 pipes (Linux; MS-Windows: Files) are used. Input/outputpipe are created in directory {tmpdir}. The temp-directory of gcad is indicated at strtup in the console-window - (eg Unix " basdir = |/mnt/serv2/devel/gcad3d/|") for default-installation this is: Linux: the inputpipe is ${HOME}/gCAD3D/tmp/CTRLpin; the outputpipe is ${HOME}/gCAD3D/tmp/CTRLpout. MS_Windows: Input from %APPDATA%\gCAD3D\tmp\CTRLpin Output to %APPDATA%\gCAD3D\tmp\CTRLpout A system-variable can be set - Unix "RCTL=/mnt/serv2/devel/gcad3d/CTRLpin" Command scan be sent now to $RCTL MS-Win: set RCTL="%APPDATA%\gCAD3D\tmp\CTRLpin" Command scan be sent now to %RCTL% Input and output is done with textcodes, not binary. You can send commands from a terminalprogram (Linux: xterm oder gnome-terminal; MS-Windows: cmd) to gcad (example: clear active model): Linux: echo 'new' > ~/gCAD3D/tmp/CTRLpin or echo 'new' > $RCTL MS_Windows: echo new>"%APPDATA%\gCAD3D\tmp\CTRLpin" or echo new>%RCTL% Send a commandfile to remoteControl: - put the following 4 lines into file t1.cmd: new add(P1=P(100 0 0)) add(C1=P1 50) #eof Send the file: Linux: cat t1.cmd > ~/gCAD3D/tmp/CTRLpin or cat t1.cmd > $RCTL MS_Windows: copy t1.cmd "%APPDATA%\gCAD3D\tmp\CTRLpin" or copy t1.cmd %RCTL% Receiving output from gcad (eg display the output in a terminal-window): Linux (keeps connection): cat ~/gCAD3D/tmp/CTRLpout MS_Windows (new file after each remote-command): type %APPDATA%\gCAD3D\tmp\CTRLpout Gcad sends after each command at least a new-line-character (ascii 10). If you want to activate the program from "Remote/ Select-Start": Put start-scripts into directory /remote Put executables into directory Programming Examples: VB.Net (MS-Windows): Demo1gCadRemoteControl.zip Java: DemoRC1.java All following examples are linux-examples. Please send improved examples or examples for other programming-languages to support at gcad3d.org StartRemote RemoteControlScripts can be executed at startup using: gcad3d rcmd {RemoteControlFilename}.cmd eg: gcad3d mode_cad rcmd ~/gCAD3D/prg/sample_cmd1.cmd Example: see file Data/prg/sample_cmd1.cmd (to see the path for directory "Data" do Standards/edit directory-path-group) Internal-control: Start a RemoteControlScript with Menu Remote/Select .. __________________________________________________________________________

PRI(text) // print text (into messagewindow) Objects (points, vectors, variables) are decoded. Example: echo 'pri("TestPrint 1")' > ~/gCAD3D/tmp/CTRLpin # display coordinates of point p1 and vector D1 with: echo 'pri("P20 = ",P20," D20 = ",D20)' > ~/gCAD3D/tmp/CTRLpin __________________________________________________________________________

GETLNR // get current lineNr DELFOLL(lnr) // delete all lines following lineNr # lineNr from GETLNR can eg later be used for DELFOLL # (delete all objects created after getting 'GETLNR') __________________________________________________________________________

GETOBJINDNXT(typ) // get next free object-index for points # example: get next free DB-index for type point: echo 'GETOBJINDNXT(P)' > ~/gCAD3D/tmp/CTRLpin # See list of objecttypes __________________________________________________________________________ __________________________________________________________________________

ADD(code) // process and store source-objects # code is any valid gcad-text; see Codes # eg create a point with: echo 'add(P1=P(100 0 20))' > ~/gCAD3D/tmp/CTRLpin __________________________________________________________________________

ADDFILE(filNam) // process and store cad-objects in file echo 'addfile("t1")' > ~/gCAD3D/tmp/CTRLpin Example for file 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) // modify cad-code, update Example: echo 'MOD(V1=70)' > ~/gCAD3D/tmp/CTRLpin # modifies the line "V1=50" in the existing code: # and updates the variable V1 and the circle C1. P1=P(100 100 0) V1=50 C1=P1 V1 __________________________________________________________________________

GETSYMDIR(sym) // returns path for symbolic-directory SETSYMDIR(sym,path) // set new symbolic-directory DELSYMDIR(sym) // delete symbolic-directory # get absolute path for (existing) symbol "Data" echo 'GETSYMDIR("Data")' > ~/gCAD3D/tmp/CTRLpin # set new symbol "myPath" to path "/tmp/gcad/" echo 'SETSYMDIR("myPath","/tmp/gcad/")' > ~/gCAD3D/tmp/CTRLpin # delete symbol "myPath" echo 'DELSYMDIR("myPath")' > ~/gCAD3D/tmp/CTRLpin # clear error echo 'ERRCLR' > ~/gCAD3D/tmp/CTRLpin __________________________________________________________________________

LOAD(modelname) // clear and load new model (native, step, iges, dxf ..) Load models; filename can be symbolic, relativ or absolut. # Example symbolic-filename: echo 'load("Data/sample_area1.gcad")' > ~/gCAD3D/tmp/CTRLpin # Example relative-filename (using current symbolic directory): echo 'load("../dat/sample_area2.gcad")' > ~/gCAD3D/tmp/CTRLpin # Example absolute-filename: echo 'load("/tmp/test1.gcad")' > ~/gCAD3D/tmp/CTRLpin echo 'MODSIZ(10000)' > ~/gCAD3D/tmp/CTRLpin echo 'END' > ~/gCAD3D/tmp/CTRLpin

LOADSM(submodel) // load submodel (can only load native models (.gcad)) # submodels need to be in a symbolic directory. See SETSYMDIR. # Example load submodels, use submodels: 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 or copy into file test.cmd: 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 and execute with - Unix: cat test.cmd > $RCTL MS-Win: copy test.cmd %RCTL% __________________________________________________________________________

SAVE // save model with current modelname SAVE(new_modelname) // save model with given modelname # save active model as "test1.gcad" in symbolic direcory "Data". See SETSYMDIR. echo 'save("Data/test1.gcad")' > ~/gCAD3D/tmp/CTRLpin # quick-save echo 'save' > ~/gCAD3D/tmp/CTRLpin __________________________________________________________________________

VIEW(center, scale, rotAng, tiltAng) // define view; # change view-scale echo 'view(0.25)' > ~/gCAD3D/tmp/CTRLpin # change view by rotation-angle and tilt-angle (degrees) echo 'view(ang(45) ang(30))' > ~/gCAD3D/tmp/CTRLpin # move view (change center-of-screen-point) echo 'view(P(38 49 7))' > ~/gCAD3D/tmp/CTRLpin __________________________________________________________________________

SHOW(obj,off) # hide object SHOW(obj) # show hidden object # hide line L21 echo 'show(L21,off)' > ~/gCAD3D/tmp/CTRLpin # show hidden line L21 echo 'show(L21)' > ~/gCAD3D/tmp/CTRLpin __________________________________________________________________________

DUMP() # Dump geometric structure of database-object DUMP("GA") # dump Grafic_Attributes_list DUMP("DL") # dump display-list DUMP("AT") # dump linetypetable DUMP("TX") # dump textures DUMP("SD") # dump all symbolic directories Examples: echo 'DUMP(C20)' > ~/gCAD3D/tmp/CTRLpin echo 'DUMP("GA")' > ~/gCAD3D/tmp/CTRLpin __________________________________________________________________________

MODE(widget,off|on) // Hide/restore menu, browser, upper toolbar, messagebar. # menu off echo 'MODE(MEN,off)' > ~/gCAD3D/tmp/CTRLpin # browser off echo 'MODE(BRW,off)' > ~/gCAD3D/tmp/CTRLpin # upper toolbar off echo 'MODE(BAR1,off)' > ~/gCAD3D/tmp/CTRLpin # messagewindow off echo 'MODE(BAR2,off)' > ~/gCAD3D/tmp/CTRLpin # Restore messagewindow. echo 'MODE(BAR2,on)' > ~/gCAD3D/tmp/CTRLpin __________________________________________________________________________

ATTL(linetypNr,objects) // apply predefined linetype to object # linetypNr 0 - 12 are predefined in file ~/gCAD3D/cfg_{os}/ltyp.rc # See Defaultsettings # use linetypNr=8 for L21 and L22 echo 'ATTL(8,L21,L22)' > ~/gCAD3D/tmp/CTRLpin # change/create linetype (G = color,linetyp,thick) # create linetype G13: green, full-line, thick=4 with: echo 'add(G13=3,0,4))' > ~/gCAD3D/tmp/CTRLpin # set linetypNr=13 for L21 and L22 echo 'ATTL(13,L21,L22)' > ~/gCAD3D/tmp/CTRLpin __________________________________________________________________________

ATTS("code",objects) // change surface-attribute Examples: # set surface A21 symbolic (not shaded) echo 'ATTS("S" A21)' > ~/gCAD3D/tmp/CTRLpin # reset previous color (default-colour) echo 'ATTS("C" A21)' > ~/gCAD3D/tmp/CTRLpin # set color green (red-share-0, green-share-255, blue-share-0) echo 'ATTS("C00ff00" A21)' > ~/gCAD3D/tmp/CTRLpin # set transparent (T0=reset, T1=half transparent, T2=full transparent) echo 'ATTS("T2" A21)' > ~/gCAD3D/tmp/CTRLpin

# load texture and make active. Textures must be in symbolic directory. echo 'LOADTEX("DIR_BMP/Ziegel1.bmp")' > ~/gCAD3D/tmp/CTRLpin # apply texture to surface A21; set hor./vert.scales to "0.5,0.5". # ATTS("Xscale,offset,angle",objects) // apply active texture echo 'ATTS("X0.5,0.5" A21)' > ~/gCAD3D/tmp/CTRLpin __________________________________________________________________________

USER // get object from user (selection); Esc: empty. # get user-selection; echo 'USER' > ~/gCAD3D/tmp/CTRLpin # returns "SEL(P(-3.244327 -10.077265 0.000000))" for indicate position or # returns "SEL(C16)" for selection of obj C16 or # returns "SEL()" for key esc pressed.