##

##

##

##

##

##

##

##

##

##

##

##

##

##

##

##

##

##

##

##

###

###

###

###

    TODO: nicht-up-to-date; see CAD_Base_en.htm#fmt1

    ____________________________________________________________________________

    Formatbeschreibung gCAD3D-Codes

    Variable
    Punkte
    Linien
    Vektor / Richtung
    Kreis
    Kurven
    Ebene / Referenzsystem
    Flächen
    Solids
    Texte / Vermaßung
    Modelle
    Transformationen
    Interaktionen
    Joints
    Gruppe

    values             19 RAD_360 V20 X(10) SQRT(L20) ..
    ObjRefs            P(L20 0.5) ..
    properties         # properties filtercodes objName ..

    Programmcodes

    Attribute
    Einstellungen

    Dateiformat

    Format allgemein

    The native (internal) format is .gcad.
      Its objectcodes are stored as asciitext, not binary.
      You can also create / modify modelfiles (.gcad) with any editor.

    Processing is done sequential by a interpreter.

    All objects in memory are kept in analytical form with all definition parameters
      (Ascii text, analytical form)

    Curves and surfaces (ellipses, Ruled and Revolved Surfaces) are
      not converted into Splines/NURBS, they are stored / exported
      in their orignal form.

    The file format .gcad is the same as the internal format.

    Es gibt 3 Arten von Codes:

    - DefinitionsCode   erzeugt geometrische Objekte,
                        das Format ist: "{DB-obj} = {parameters ..} [# {properties}"
                        zB. "P20=P(100 0 0)"

        DB-obj:
          is stored in DB,
          Besteht aus einem Kennbuchstaben und dem DB-Index (die obj-ID or DB-ID)
          Beispiel:   P123 ist ein Punkt mit der Nummer 123.
          DB-index 0 is reserved for the active object;
          DB-indexes 1 to 19 should be kept free for script-functions.

        parameters:
          functionCodes   (eg INT (intersect) CUT (trim) ..)
          DB-objs         (eg L20 (db-line 20)
          dynamic-objs    (eg P(10 5 0) ..; see dynamic-obj)
          values          (eg 10 (direct) or V20 (DB-variable 20) or VAL(expression) ..)
                          see values
          propertyCodes   (eg REV (revers) ..)

        properties (optional, separated by '#', see properties)

        Definition-codes for points eg:           (see Points)
          P123=P(10 5 0)              # point-123 = point at x=10, y=5, z=0
        - with parameters:
          P124=INT S30 L24            # intersection curve-30 with line-24
          P126=PRJ P37 L21            # projection of P37 onto line-21

        Definition-codes for lines eg:            (see Lines)
          L20=L(P20 P(10 5 0))        # line from point 20 to coords (10 5 0)
        - with parameters:
          L20=TNG P30 C20             # line-20 is a tangent from point-30 to circle-20

        Create definition-codes:
          - with module CAD - see using CAD
          - or with module MAN - see using MAN
          - or produce the codes direct (with editor or scripts or plugins ..)

    - AusführungsCodes  Zustandsänderungen, die sofort ausgeführt werden
                        bestehen aus einer direkten Anweisung;
                        zB "DEFCOL 0 0 220"    (Standardfarbe blau)
                        oder ProgrammCodes
                        zB. "pri "P20=" P20"   (print point P20)
         see Attributes
         and Settings

      Programming-codes:
        - control the programflow (IF JUMP CALL EXIT DEBUG PRI ..)
        eg PRI "P20=" P20"     # print coords. of point P20
        see - Programmingcodes

    Kennbuchstaben:
      A=Area           (Fläche)
      B=Body           (Solid)
      C=Circle         (Kreis)
      D=Direction      (Vektor)
      I=Interaktion
      J=Joint
      L=Line           (Linie)
      M=Model          (Submodel, Mockup-Model, Normteil)
      N=Note           (Text, Vermaßung, Tag, Bitmap-Image)
      P=Point          (Punkte)
      R=Refsys         (Referenzsystem, Ebene)
      S=Spline         (Spline, Polygon, Kegelschnitt, zusammengesetzte Kurve(CCV))
      T=Transformation (Translation od Rotation)
      U=Union          (Gruppe)
      V=Variable       (numer. Wert)

    DB-Index:
      0 kann nicht verwendet werden (ist das aktuelle Objekt)
      ist eine positive Zahl für permanente Objekte,
      ist eine negative Zahl für temporäre Objekte, die dynamisch erzeugt werden.

    Variable
    Kennbuchstabe einer Variablen ist V.
    ____________________________________________________________________________

    siehe auch CAD-Funktionen Variable

    Direktzuweisung einer Variablen:
    Beipiel:
    V20=10

    Es können folgende Konstanten benutzt werden:
    RAD_360    PI * 2           6.2831853071795862319
    RAD_180    PI               3.1415926535897932384
    RAD_90     PI / 2           1.5707963267948965579
    RAD_1      PI / 180         0.0174532925199432954
    SR_3       SQRT(3)          1.732050808
    SR_2       SQRT(2)          1.414213562

    Beispiel:
    V21=V20*TAN(RAD_90)

    Es können folgende Funktionen benutzt werden:
    den /X/Y/Z-Koordinatenwert eines Punktes übernehmen:
    V21=X(P20)

    den Radius eines Kreises übernehmen:
    V20=C20

    Länge zwischen 2 Punkten:
    V20 = P20 P21

    Länge einer Strecke:
    V20 = L20

    Normalabstand eines Punktes von einer Strecke:
    V20 = P20 L20

    die Grundrechnungsarten + - / *
    V20=10
    V21=V20+10
    # ergibt 20
    V22=10 + V21 * 3
    # ergibt 70
    V22=10+V21 * 3
    # !! ergibt 90  - entspricht V22=(10+V21)*3
    V20=20 *2
    # !! Error - "20*2"  oder "20 * 2"

    die Potenzfunktion ^
    V1=4^0.5
    # ergibt 2  (4 hoch 0.5)

    die mathemat. Funktionen (SQRT() SIN() COS() TAN() ASIN() ACOS() ATAN()):
    V23=SQRT(V22)

    Absolutwert (das Vorzeichen ist immer positiv)
    V24=ABS(V20)

    Integerzahl - den Rest hinter dem Komma abschneiden
    V25=FIX(1.8)
    # ergibt 1.0

    Runden. 1.3 wird zu 1.0, 1.8 wird zu 2.0, -1.3 wird zu -1.0, -1.8 wird zu -2.0.
     V26=RND(V20)

    Numer. Variablen indirekt durch Funktion VAL() übernehmen; Beispiel:
     C10=P10 VAL(C5)
     (es wird der Radius des C5 übernommen).

    Anzeige des Inhalts von Variablen:
    PRI "V26 = " V26

    Punkt
    Kennbuchstabe eines Punktes ist P.
    ____________________________________________________________________________

    siehe auch CAD-Funktionen Punkt
    siehe auch Punkt in Eingabefeld
    siehe auch Punkt aus Kopierfunktion

    Selektion von Punkten auf Linearen Objekten:
    Anfangs- / Endpunkt einer Line; Seite: 1 = Startpunkt; 2 = Endpunkt.
     P20=L20 MOD(1)
    Anfangs- / Endpunkt eines Kreises: 1=Startpunkt, 2=Endpunkt.
     P28=C22 MOD(2)
    Anfangs- / Endpunkt einer Kurve, entsprechend Seite.
     P10=S10 Seite

    Endpunkte eines Polygons:
     P10=S{Polygon} MOD({PunktNummer})
    Eckpunkt eines Polygon aus einer Kontur:
     P# = P(S{ccv} MOD({ccvSegNr}) MOD({polgonPtNr}))
    Punkte innerhalb der Endpunkte werden parametrisch dargestellt:
     P# = P({baseObj} {lpar})
     Beispiel - Punkt in der Mitte des Objekt Line-20:
     P20=P(L20 0.5)
     Punkt auf einer Konturlinie:
     P = P(S{ccv} MOD({ccvSegNr}) {lpar})

    Der Punkt mit Index 0 ist zu jeder Zeit die aktuelle Position, kann also
    nur für einen Arbeitsschritt verwendet werden.

    Punkt aus Kopierfunktion (parametrisch)
    Diese Formate werden bei Selektionsfunktionen erzeugt:

    # Punkt auf Linie, Kreis, Polygon, Spline:
    P({obj} {Parameterwert})

    # Start- oder Endpunkt von Linie/Kreis/Polygon/Spline
    # oder Punkt auf einem Polygonpunkt:
    P({obj} MOD({PunktNummer}))

    # Punkt auf Linie/Kreis/Polygon/Spline in einer CCV
    P({obj} MOD({CCV-SegmentNummer}) {Parameterwert})

    # Start- oder Endpunkt von Linie/Kreis/Polygon/Spline in einer CCV
    # oder Punkt auf einem Polygonpunkt in einer CCV:
    P({obj} MOD({CCV-SegmentNummer}) MOD({PunktNummer}))

    # Parametrischer Punkt auf einer Flaeche:
    "P(A# {uPar} {vPar})"

    Beispiel:
    # Punkt in der Mitte des 1.Segmentes der CCV S26:
    P(S26 MOD(1) 0.5)

    Standardformate:

    P21=P(10,20,30)
      3D-Punkt absolut

    P2=P1,D1
      Punkt P1 um den Vektors D1 verschieben.

    P2=P1,D1,Abstand
      Punkt P1 in Richtung des Vektors D1 um den Abstand abst verschieben.

    P11=R1 P10
      Transformation des Punktes P10 in das Referenzsysten R1 (Ebene R1).
    P11=R1 10 0
      Punkt P11 wird auf der X-Achse des Referenzsystems R1 liegen.

    P11=P10 R1
      Projektion des Punktes P10 auf die Ebene R1.

    P3=P2,X(10),Y(10)
      Punkt relativ (im Abstand 10,10 von p2)

    P5=P4,ANG(90),Abstand
      Polar relativ (Basispunkt, Winkel, Abstand)

    P3=P1,P2
      Punkt in der Mitte erzeugen.

    P3=P1,D(P1,P2),Abstand
      Eine Strecke abtragen.
      Punkt mit bestimmtem Abstand von P1 in Richtung P1 -> P2 abschlagen.
      Die Richtung wird bestimmt durch den Winkel der Strecke P1 -> P2.

    P11=P1,D(L1),Abstand
      Eine Strecke von einem Punkt weg entlang einer Linie mit bestimmtem Abstand abtragen.

    P2=P1,D(L1),Abstand,Normalabstand
      Eine Strecke von einem Punkt weg abtragen.
      Der Abstand wird in die Richtung der Linie abgetragen,
      der Normalabstand wird normal zur Linie abgetragen. Beispiel:
    p1=p1,d(l1),val(100),val(50)
      P1 wird 100 mm in Richtung l1 verschoben, dann wird er 50 mm in Richtung normal
      zu l1 verschoben

    P3=P1,P2,Winkel
      Punkt drehen (Mittelpunkt,Ausgangsposition,Winkel) Beispiel:
    P3=P1,P2,ANG(180)
      P2 wird 180 Grad um P1 gedreht.

    P1=L1,Seite
      Anfangs- oder Endpunkt einer Linie (entsprechend Seite)

    P2=P1,L1
      Punkt auf Linie projizieren.

    P4=L1 L2
      Schnittpunkt Linie - Linie

    P41=L20 A20
      Schnittpunkt Linie - B-SplineFläche

    P6=C1
       Kreismittelpunkt

    P7=P1 C1 [Seite]
      Punkt normal auf Kreis (wird auf den Kreis projiziert).
      Die Standardlösung ist der nähere Punkt.
      MOD(2) definiert den entfernten Punkt.

    P5=L1 C1 Seite
        Schnittpunkt Linie- Kreis.

    P6=C1 C2 Seite
        Schnittpunkt 2-er Kreise

      Punkt auf Kurve projizieren:
      Punkt = Punkt Kurve {PunktNummer}
    P11=P1 S10 MOD(1)
      P1-P11 bilden nun eine Normale auf S10 im Punkt P11.
      MOD(1) = Seite - erste Lösung.

    Der Punkt mit Index 0 ist zu jeder Zeit die aktuelle Position, kann also
    nur für einen Arbeitsschritt verwendet werden.

    Implizite Punktdefinitionen:
    Beispiel für Endpunkte der Linie mit P(L20 MOD(1)):
    L20=P(-300 10) P(-260 40)
    N21=DIM P(L20 MOD(1)) P(L20 MOD(2)) P(-280 -40) ANG(0)

    Linie
    Kennbuchstabe einer Linie ist L.
    ____________________________________________________________________________

    siehe auch CAD-Funktionen Linie
    siehe auch Linie aus Kopierfunktion

    Definition einer Linie durch:
    - Eingabe einer Linie (mit der Tastatur:)
      durch Eingabe einer definierten Linie; zB "L12"
      durch Eingabe von 2 Punkten; zB "P(0 0 0) P(10 0 0)"
      durch Eingabe von Punkt und Winkel; zB "P(10 0 0) ANG(45)"
      durch Eingabe von Punkt und Vektor; zB "P20 D(0 0 1)"
      Horizontale Linie: Eingabe des Y-Wertes; zB "Y(10)"
      Vertikale Linie: Eingabe des X-Wertes; zB "X(10)"

    - Selektion einer Line
      liefert die Bezeichnung; zB "L20"

    - Selektion einerLine in einer Kontur (CCV):
        L(S{ccv} MOD({ccvSegNr}))
      Polygonsegment aus einer CCV:
        L(S{ccv} MOD({ccvSegNr}) MOD({polgonSegNr}))

      Linie aus Kopierfunktion
    Diese Formate werden bei Selektionsfunktionen erzeugt:

    # Linie von Polygonsegment
    # oder Linie von Linie in einer CCV:
    L({obj} MOD({SegmentNummer}))

    # Linie von Polygonsegment in einer CCV:
    L({obj} MOD({CCV-SegmentNummer}) MOD({SegmentNummer}))

    Beispiel:
    # Line vom 1.Segmente der CCV S26 (einer Linie):
    L(S26 MOD(1))

    Standardformate:

    L1=P1 P(100 100)
      Linie zwischen 2 Punkten

    L2=Y(10)
    L2=DX P20 Y(10) Z(10)
      Linie parallel zur aktuellen X-Achse; durch einen Punkt.
      Es kann ein Y-Offset und/oder Z-Offset definiert werden.

    L1=X(10)
    L2=DY P20
      Linie parallel zur aktuellen Y-Achse; durch einen Punkt.
      Es kann ein X-Offset und/oder Z-Offset definiert werden.

    L2=DZ P20
      Linie parallel zur aktuellen Z-Achse; durch einen Punkt.
      Es kann ein X-Offset und/oder Y-Offset definiert werden.

      Linie durch Punkt mit fixem Winkel
    L3=P1 ANG(45)

      Linie durch Punkt mit Richtung (Vektor)
    L4=P1 D(L1)
      parallel zu Linie L1 oder:
    L = P L

      Line durch Punkt und die Z-Achse von Kreis/Ebene:
    L = P C
    L = P R

    L4=P1 D(L1) ANG(90)
      Linie durch Punkt mit Winkel relativ zu anderer Linie.
      ANG(0): parallel zu Linie L1; ANG(90): normal.

      Linie parallel zu Linie mit Abstand.
    L8=L1 Abstand Seite
    L8=L1 VAL(10) HIY

      Linie als Mittellinie (wenn l1, l2 parallel)
      oder als Winkelhalbierende (durch den Schnittpunkt).
    L9=L1 L2

      Linie als Winkelhalbierende, zusätzlich drehen.
    L9=L1 L2 ANG(90)

      Line tangential an Kreis, parallel zu Linie.
    L1=TNG C1 D(L1) MOD(1)

      Linie tangential an Kreis mit fixem Winkel
    L1=TNG C1 D(ANG(45)) MOD(1)

      Linie tangential durch Punkt P10 an Kurve S10.
    L10=TNG P10 S10 MOD(1)

      Linie durch Punkt tangential an Kreis
    L5=TNG P1 C1 MOD(1)

      Linie tangential an 2 Kreise       (Ort: in out)
    L5=TNG C1 C2 MOD(2)

      Schnittlinie zwischen zwei Ebenen.
    L10=R20 R21

      Projektion einer Linie auf eine Ebene.
    L21=L20 R20

    Implizite Liniendefinitionen:
    L20=L(Startpunkt Endpunkt)

    Vektor / Richtung
    Kennbuchstabe eines Vektors ist D ("Direction").
    ____________________________________________________________________________

    siehe auch CAD-Funktionen Vektor / Richtung
    siehe auch Vektor in Eingabefeld
    siehe auch Vektor aus Kopierfunktion

    Ein Vektor definiert eine Richtung und ist an keine Position gebunden.

    Es gibt folgende Standardvektoren:
      DX DY DZ
      entsprechend den Standardachsrichtungen;

      DIX DIY DIZ
      entsprechen den inversen Standardachsrichtungen

    Darstellung von Vektoren:
    - Vektoren werden nur temporär dargestellt;
    - Standardvektoren werden rechts unten dargestellt
    - Auswahl der definierten Vektoren durch die PageUp/PageDown(Bild)-Tasten;
    - Normierte Vektoren (mit Länge 1) sind strichliert, sonst als volle Linie.

    Definition eines Vektors durch:
    - Selektion einer Linie oder von 2 Punkten oder eines Polygons
    - Selektion eines Kreises oder einer Ebene (Normalvektor)
    - Auswahl eines Standardvektors aus den rechts unten dargestellten Vektoren
    - Auswahl eines definierten Vektors durch die PageUp/PageDown(Bild)-Tasten;
    - Eingabe eines Vektors mit der Tastatur:
      DX oder DY oder DZ oder invers dazu DIX DIY DIZ
      oder Eingabe eines definierten Vektors; zB "D12"
      oder Eingabe der X/Y/Z-Komponenten; "D(0 0 1)" definiert einen Z-Vektor
      durch einen oder zwei Winkel; zB "D(ANG(45))" oder "D(ANG(45) ANG(45))"
        (siehe [Drehwinkel,] [Kippwinkel]);

    Als letzter Parameter kann bei Vektordefinitionen "REV" angegeben werden
      (Vektor wird verkehrt = Revers dargestellt).

    Als vorletzter Parameter kann bei Vektordefinitionen
      die Vektorlänge angegeben werden.
      Beispiel: "DX 2" oder "DX 2 REV"

    Beispiel:
    # Vektor 1 = Richtung negative X-Achse
    D1=DIX
    # Vektor 2 = in Richtung x=1, y=1 in der XY-Ebene
    D2=D(1 1 0)

      Vektor aus Kopierfunktion
    Diese Formate werden bei Selektionsfunktionen erzeugt:

    # Vektor von Linie:
    D(L{nr})
    Beispiel:
    L20=P(0 0 0) P(100 10 0)
    D20=D(L20)

    # Vektor von Polygonsegment
    # oder Vektor von Linie in einer CCV:
    D({obj} MOD({SegmentNummer}))

    # Vektoren auf Kreis, B-Spline, Klothoide, Ellipse:
     D#={C#|S#}) {lpar})
    Beispiel:
    # Vektor an einem Punkt am Kreis:
    C20=P(0 0 0) 12
    D20=D(C20 0.5)

    # Vektor von Linie in einer CCV
    # oder Vektor von Polygonsegment in einer CCV:
    P({obj} MOD({CCV-SegmentNummer}) MOD({SegmentNummer}))
    Beispiel:
    # Vektor vom 1.Segmente der CCV S26 (einer Linie):
    P(S26 MOD(1))

    Standardformate:

      Definition Vektor durch Richtung und Länge.
      D=D(dx,dy[,dz]) [Länge] ["REV"]
    D1=DX 100
    D2=D(10 0)
    D3=D(0.7 0 0.7) 100

    D3=ANG(30) 100
      Definition 2D-Vektor durch 2D-Winkel und Vektorlänge (optional).
      Der Winkel definiert die Richtung in der X-Y-Ebene.

    D4=ANG(90) ANG(30) 100
      Definition Vektor durch Drehwinkel, Kippwinkel und Vektorlänge (optional).
      Zuerst drehen um die Z-Achse, dann drehen um die neue Y-Achse.
      ANG(0) ANG(0)      - ergibt Vektor 1,0,0
      ANG(90) ANG(0)     - ergibt Vektor 0,1,0
      ANG(90) ANG(30)    - ergibt Vektor 0,0.9,0.5
      ANG(180) ANG(30)    - ergibt Vektor -0.9,0,0.5

    D5=P1 P2
    D5=P1 P2 100
      Vektor D5 als Strecke von P1 nach P2. Länge optional.

    D6=L10 100
      Vektor in Richtung der Linie; Länge optional.

    Haupt/Nebenachsen von Circ, Ellipse, Plane durch Modifier:
      1 = Z-Achse (Normalvektor)
      2 = X-Achse (Ellipse: Hauptachse),
      3 = Y-Achse (Ellipse: Nebenachse),
      4 = inverse X-Achse
      5 = inverse Y-Achse
      Beispiel:
    D20 = C20 MOD(2)
      liefert die X-Achse des C20

    Normalvektoren:
    D=Circle MOD(1)
    D=Ellipse MOD(1)
    D=Plane
    D=Point Point Point
    D=Line Line
    D=Line Point
    D=Vector Line
    D=Vector Point Point

    (Alle zusätzlich mit Länge und "REV" möglich).

      Beispiele:
    D7=C10 100
    # Vektor in Richtung der Z-Achse von Kreis C10, Länge 100

    D7=R10 REV
    # Vektor in die umgekehrte Richtung der Z-Achse von Ebene R10.

    Kreis / Kreisbogen (Circle / Arc)
    Kennbuchstabe eines Keises / Kreisbogens ist C.
    ____________________________________________________________________________

    siehe auch CAD-Funktionen Kreis / Kreisbogen (Circle / Arc)

    Definition eines Kreises durch:

    Definition eines Kreisbogens durch:
    - C(Startpunkt Endpunkt Mittelpunkt [Z-Achse] [Drehrichtung])
    - C(Endpunkt Mittelpunkt [Z-Achse] [Drehrichtung])
      Punkte hier nur mit Index "P20" oder direkt "xKoord yKoord [Z(zKoord]"
      Beispiel: | C(25 0 0 25 0 0)
      Fehlt der Startpunkt, so wird der Endpunkt der letzten P(), L() oder C() - Definition benutzt.

    - Selektion eines Kreises
      liefert die Bezeichnung; zB "C20"

    - Selektion eines Kreises in einer Kontur (CCV):
      C(S{ccv} MOD({ccvSegNr}))

    Sehnentoleranz:
      Die Sehnentoleranz für die Darstellung der Kreise kann direkt gesetzt werden
        in Standards/Tolerances mit "Toleranzen zur Darstellung - Polygon".
      Weiters wird auch durch Verändern der Modelsize (MODSIZ) die Sehnentoleranz
        gesetzt.

    Parameter Drehrichtung:

    CW   (clockwise, im Uhrzeigersinn) oder
    CCW  (counterclockwise, Gegenuhrzeigersinn)
    Die Angabe von CCW ist nicht erforderlich (Standard).

    Der Drehsinn ist gültig, wenn die Drehachse zum Auge des Betrachters zeigt.
    # Kreis kopieren
    C2=C1

    Standardformate:

    # konzentr. Kreise. Negative Radiusdifferenz verkleinert den Kreis.
    C2=C1 {Radiusdifferenz}

    # Mittelpunkt, Punkt am Umfang [Z-Achsvektor]
    C3=P1 P2
    C3=P1 P2 D(1 0 1)

    # Mittelpunkt, tangential  an Line / Circ
    C1=P1 L1
    C1=P1 C1

    # Tangential an 2 Elemente, Radius.
    # C1=P1,L1,Radius,Seite
    # C2=P1,C1,Radius,Seite
    # C5=L1,L2,Radius,Seite
    # C5=L1,C1,Radius,Seite
    # C5=C1,C2,Radius,Seite
    L1=X(10)
    L2= Y(10)
    C1=L1 L2 VAL(5) MOD(1)

    # 2 Punkte am Umfang, Radius. Seite: auf der sich der Mittelpunkt befindet.
    # C1=P1 P2 Radius Seite Z-Achs-Vektor
    P20=P(98.6 5.4 0)
    P21=P(114.5 -15.2 0)
    C22=P20 P21 VAL(12) MOD(1) DZ

    # Punkt am Umfang, Tangente, Radius.
    # C1=P1 L1 Radius Seite
    L20=P(44.6 -32.8 0) P(86.5 -69.3 0)
    P26=P(56.2 -35.5 0)
    C21=P26 L20 VAL(8) MOD(2)

    # Punkt am Umfang, tangential an Kreis.
    # C2=P1 C1 Radius Seite
    C20=P(114.5 -15.2 0) VAL(12) DZ
    P27=P(96.9 -19.7 0)
    C21=P27 C20 VAL(8) MOD(1)

    # Kreis durch drei Punkte am Umfang
    C20=P(0 0) P(10 0) P(10 10)

    Kreisbögen (begrenzte Kreise):

      Mittelpunkt Startpunkt Drehwinkel Z-Achs-Vektor
    C21=ARC P20 P21 ANG(90) DZ

      Circ=ARC Startpunkt Endpunkt Mittelpunkt [Z-Achse] [Drehrichtung]
      Kreisbogen aus Startpunkt Endpunkt Mittelpunkt (Mittelpunktsachse, Drehrichtung)
      Drehrichtung: CW (Uhrzeigersinn) oder CCW (Gegenuhrzeigersinn, Standard).
      Der Drehsinn ist gültig, wenn die Drehachse zum Auge des Betrachters zeigt.
    C20=ARC P1 P2 P3
    C31=ARC P(10,0,10) P(0,10,10) P(0,0,10)
    C32=ARC P(10,0,0) P(0,0,10) P(0,0,0) D(0,1,0) CW

      Circ = ARC Startpunkt, Endpunkt, Radius, Z-Achse
      Kreisbogen aus Startpunkt Endpunkt Radius Mittelpunktsachse
      Radius: positiv fuer Uhrzeigersinn, negativ fuer Gegenuhrzeigersinn.
    C21=ARC P(251 23 0) P(189 75 0) VAL(50) DZ

      Kreisbogen durch Startpunkt, Startrichtung und Radius.
      Startrichtung: die Tangente an den Kreis im Starpunkt. Ein Vektor.
      Angle: Öffnungswinkel, optional; Standard ist 360 Grad.
      Achsvektor optional.
      [CW/CCW] ist die Drehrichtung; optional ("CW").
    # Beispiel: Endtangente einer Klothoide als Startrichtung.
    S20=CLOT P(0 0 0) DX ANG(30) 0 10
    P20=P(S20 1)
    D20=TNG P20 S20
    C20=ARC P20 D20 25 ANG(30)

      Kreisbogen durch drei Punkte am Umfang
    C20=ARC1 P(0 0) P(10 0) P(10 10)

    Implizite Definition von Kreisen / Kreisbögen:

    C({Startpunkt} {Endpunkt} {Mittelpunkt} [Z-Achse] [Drehrichtung])
    C({Endpunkt} {Mittelpunkt} [Z-Achse] [Drehrichtung])

    Punkte hier nur mit Index "P20" oder direkt "xKoord yKoord [Z(zKoord]"
    Beispiel:  C(25 0 0 25 0 0)

    Kreis aus Kopierfunktion
    Diese Formate werden bei Selektionsfunktionen erzeugt

      Kreis aus CCV:
    C(S{ccv} MOD({ccvSegNr}))

    Kurven
    Kennbuchstabe der Kurven ist S (Spline).
    ____________________________________________________________________________

    siehe auch CAD-Funktionen für Kurven

    Polygon
    Ellipse
    Klothoide
    Freiformkurve (B-Spline)
    Kontur (zusammengesetzte Kurve)

    Polynomische Kurve  (derzeit nur von Import-Programmen oder MANuell)

    Standardformate Ellipse:

      Ellipse aus Mittelpunkt, Endpunkt Hauptachse, Endpunkt Nebenachse:
    S1=ELL P(100 0) P(150 0) P(100 20)

      Ellipse aus Mittelpunkt, Vektor Hauptachse, Vektor Nebenachse:
    S1=ELL P(100 0) D(10 0) D(0 5)
      (die Vektoren definieren Richtung und Länge der Haupt- und Nebenachse)

      Begrenzte Ellipse aus Mittelpunkt, Vektor Hauptachse, Vektor Nebenachse,
      Startpunkt und Endpunkt:
    S1=ELL P(0 0) D(10 0) D(0 5) P(10 0) P(-10 0)

      Ellipse aus Projektion von Kreis auf Ebene:
    S20 = ELL C20 R20

    Standardformate Polygon:

      Parallelogram aus einem Punkt und 2 Vektoren:
      S= REC pt1 vec1 vec2
      (Vektoren: Richtung und Länge !)
    S20=REC P(100 0 0) D(50 0 0) D(0 12 0)

      Polygon aus Punkten:
      S#=POL,point1,point2<,point3, .. pointn>
    P20=P(10,10)
    P21=P(20,20,15)
    P22=P(25,20)
    S24=POL P20 P21 P22 P(30,12,0) P(30,10,10) P(40,30,10)

      Polygon auf Ebene projizieren:
      S#=POL Polygon Refsys
    S20=POL P(30,0) P(30,10,10) P(40,30,20)
    S21=POL S20 R0

      3D-Polygon aus B-Spline:
      S#=POL,B-Spline,Toleranz

    Standardformate Klothoide:

      Klothoid-Kurve erzeugen (eine planare Spirale durch Fresnel-Integrale).
      StartPoint   Startpunkt
      StartVector  StartRichtung  (Vektor oder Winkel)
      Angle        Differenzwinkel Startrichtung - Richtung am Endpunkt
                    positiv: Uhrzeigersinn (CW); negativ: Gegenuhrzeigersinn (CCW).
      StartRadius  Radius beim Startpunkt oder 0 für unendlich
      EndRadius    Radius beim Endpunkt oder 0 für unendlich
      [Z-Axis]     Normalvektor; optional.

    S20=CLOT P(0 0 0) ANG(0) ANG(30) 0 10

    Beispielmodel siehe sample_cloth1.gcad

    Export einer Klothoid-Kurve:
      DXF:  Ausgabe als POLYLINE.
      Iges: Ausgabe als Entity 106 (CopiousData, Form 12 = 3D-Polygon).

    Standardformate B-Splinekurve:

      B-Spline aus Kontrollpunkten / Knotenvektor:
      S-bsp = BSP,ptNr,degree,controlpoints,knotvector,Startparameter,Endparameter
        ptNr = Anzahl von Kontrollpunkten
        controlpoints: die Kontrollpunkte; Anzahl = ptNr, 3 Werte (X/Y/Z).
        knotvector: die Abstandsparameter; Anzahl = ptNr + degree + 1.
    S20=BSP,6,3,-178,109,0,-166,128,0,-144,109,0,-109,112,0,-106,134,0,-119,138,
     0,0,0,0,0,0.333333,0.666667,1,1,1,1,0,1

      B-Spline aus Punkten:
      S-bsp = BSP {points} [,degree] [,CTRL]
      CTRL: ob die definierten Punkte Durchgangspunkte oder Kontrollpunkte sind.
    P20=P(78,9)
    P21=P(66,28)
    P22=P(44,9,25)
    P23=P(9,12)
    P24=P(6,34)
    # B-Spline from Points
    S20=BSP,P20,P21,P22,P23,P24

      B-Spline aus Polygon:
      S-bsp = BSP {Polygon} [,degree] [,CTRL]
      CTRL: ob die definierten Punkte Durchgangspunkte oder Kontrollpunkte sind.
    P20=P(78,9)
    P21=P(66,28)
    P22=P(44,9,25)
    P23=P(9,12)
    P24=P(6,34)
    # B-Spline from Points
    S20=BSP,P20,P21,P22,P23,P24
    # Polygon from Points:
    DRAW OFF
    S21=POL,P20,P21,P22,P23,P24
    # BSpline from Polygon
    DRAW ON
    S22=BSP,S21

      B-Spline = Isoparametrische Kurve aus einer Flaeche
      Dzt nur aus B-SplineFläche, Punkteingabe statt Parameterwert noch nicht implementiert
      S-bsp = ISO {B-SplineFläche} {Parameterwert} [{Richtung}]
        Richtung:  "CX" definiert QuerRichtung; keine Angabe: LängsRichtung;
          (Modifier CX = across; Default = along)
    # Querschnittkurve in der Mitte der Surface A20:
    S20=ISO A20 0.5 CX

    Standardformate Kontur (zusammengesetzte Kurve):

    Kontur ("Concatenated Curve" - CCV)
    Die Kontur beginnt und endet an einem Punkt.
    Elemente: Punkte, Linien, Kreise, Kurven.
    Im Anschluss an Kreise und Kurven kann die Drehrichtung (CW oder CCW) definiert werden.
    Es werden automatisch Normalen an Linien und Kreisbögen gebildet.

    Format:
    S#=CCV {Konturelemente}

    Beispiel:
    C20=P(39,26) VAL(22)
    S20=CCV P(7,25) C20 CW P(35,58)

    Standardformate Polynomische Kurve:

      Polynomische Kurve aus Polynomwerten:
      S#=PSP3,arc1{,arc2, .. arcn}
      Polynomische Kurve mit 1-n Arcs.
      Ein Arc besteht aus 13 Zahlen; dem Abstandswert und den Polynomwerten
      xa, ya, za, xb, yb, zb, xc, yc, zc und xd, yd, zd.
      xa, ya, za definieren einen Durchgangspunkt.
    S20=PSP3,0,3.84815,0.967105,0,0.577021,0.207039,0,0,0,0,-0.169071,0.140166,0,
     1,4.2561,1.31431,0,0.069808,0.627537,0,-0.507212,0.420498,0,0.341924,
     -0.327596,0,2,4.16062,2.03475,0,0.081155,0.485747,0,0.518559,-0.562288,0,
     -0.183075,0.224101,0,3,4.57726,2.18231,0,0.56905,0.033474,0,-0.030664,
     0.110016,0,-0.060996,-0.13481,0,4,5.05465,2.19099,0,0.324734,-0.150924,0,
     -0.213651,-0.294414,0,0.071217,0.098138,0,5,5.23695,1.84379,0,0.111083,
     -0.445338,0,0,0,0,0.427303,0.588828,0

    Solids (Bodies)
    Kennbuchstabe der Solids ist B (Body).
    ____________________________________________________________________________

    siehe auch CAD-Funktionen für Solids (Bodies)

    Konus
    Torus
    Kugel
    Prisma

    ____________________________________________________________________________
    Kugel:

    # Kugel aus Mittelpunkt Radius:
    B1=SPH P(0 0 0) 12

    # Kugel aus Kreis:
    C1=P(0 0 0) 12
    B2=SPH C1

    Konischer Körper (Kegel):

      B2=CON Mittelpunkt_1 Mittelpunkt_2 Radius_1 Radius_2
    B20=CON P(0 0 0) P(100 0 0) VAL(60) VAL(40)

      B3=CON Kreis_1 Kreis_2
    C20=P(0 0 0) VAL(100) DX
    C21=P(100 0 0) VAL(40) DX
    B20=CON C20 C21

      B1=CON BasisKreis Punkt_Kegelspitze

    Torus / Kreisring:

      B#=TOR Mittelpunkt Hauptachse Radius_Hauptkreis Radius_Nebenkreis

      B#=TOR L C                                // Achse Aussenkreis
      B#=TOR C C                                // Hauptkreis Aussenkreis
      B#=TOR R C                                // Basisebene Aussenkreis

      Die Achse des Hautkreises ist die Hauptachse.
      Die Nebenkreisachse liegt immer normal auf Hauptachse.
      Radius_Hauptkreis ist ganz an der Aussenseite; ist also immer positiv.
      Modifikator_Aussen_Innen: erforderlich zur Auswahl einer Variante,
        bei der der Radius_Hauptkreis kleiner als der Radius_Nebenkreis ist.

    B20=TOR P(0 0 0) DZ VAL(100) VAL(25)
    C20=P(100 0 0) VAL(25) DY
    B20=TOR P(0 0 0) DZ C20

    Prisma:

      B=PRISM planare_Basisflaeche Vektor/Point/Dicke

      planare_Basisflaeche: geschlossenes Polygon / Kreis /Ellipse
      Die gegenüberliegende Fläche kann ein Punkt sein oder durch einen Vektor
      oder die Dicke (z.B. Blechdicke) definiert sein.

    # Prisma aus Parallelogram und Vektor
    S20=REC P(100 0 0) D(50 0 0) D(0 12 0)
    B20=PRISM S20 D(0 0 10)

    # Prisma aus Kreis mit Dicke (Zylinderhöhe)
    C20=P(289 -20.8 0) VAL(125) DZ
    B20=PRISM C20 25

    # Prisma konisch aus Polygon
    P20=P(768 -457 0)
    S20=POL P20 P(930 -474 0) P(1029 -251 0) P(971 -246 0) P(891 -412 0) P(801 -407 0) P20
    B21=PRISM S20  P(900 -500 200)

    Notes / Dimensions
    Kennbuchstabe der Notes / Dimensions ist N.
    ____________________________________________________________________________

    siehe auch CAD-Funktionen für Notes / Dimensions

      Die Schriftgröße für Texte und Vermaßung wird definiert durch
    DEFTX {Textsiz} {DimTextSiz} {TextGeneralScale} {AnzahlNachkommstellen}
      oder interaktiv in Standards/Text.
      Defaultwerte in der Datei {base}/xa/gCAD3D.rc.

    Offen:
    TEXTE UND VERMASZUNG WERDEN NOCH NICHT NACH IGS, DXF EXPORTIERT.
    Für interaktive Modifikation der Parameter Mpfeile, Mlinien und Zusatztext sollte
    e ein Userinterface erstellt werden.

    Modelle
    Kennbuchstabe von Models ist M.
    ____________________________________________________________________________

    siehe auch CAD-Funktionen für Modelle

    Ein Modell (eine Zusammenstellung - Assembly) kann aus mehreren
      Modellen (subModels) bestehen.

    Transformationen
    Kennbuchstabe von Transformationen ist T.
    ____________________________________________________________________________

    siehe auch CAD-Funktionen zur Definition von Transformationen
    siehe auch CAD-Funktionen zum Benutzen von Transformationen

    ____________________________________________________________________________

    Drehrichtung
      CW      (clockwise, im Uhrzeigersinn) oder
      CCW     (counterclockwise, Gegenuhrzeigersinn)
      Die Angabe von CCW ist nicht erforderlich (Standard).
      Der Drehsinn ergibt sich in der Draufsicht, wenn also die Drehachse
        zum Auge des Betrachters zeigt.

    Drehwinkel (Rotate)
        Die Drehung erfolgt um die Z-Achse der aktiven Konstruktionsebene.
        Eingabe direkt: Winkel
        Eingabe indirekt: ANG(Winkel)
        Ausgabeformat: ANG({Winkel}); zB:
          ANG(30)  - Drehung um 30 Grad

      # Winkelwert
      ANG (Winkelwert [REV])
      # Richtungsvektor
      ANG (D [ANG()/REV])
      # Linie (Richtung)
      ANG (L [ANG()/REV])
      # 2 Punkte (Richtung)
      ANG (P P [ANG()/REV])

    Im Modus CAD kann durch die PgUp / PgDown - Taste eine zusätzlicher (relativer)
     Winkelwert von jeweils +90 Grad aufaddiert werden. (Es muss zuvor eine
      Richtungsangabe gemacht worden sein (zB eine Linie selektieren)).

    Kippwinkel (Tilt)
    Die Drehung (das Kippen) erfolgt um die neue  -
      (durch eine Z-Achs-Drehung entstandene) Y-Achse.
      Ein Kippwinkel von 90 Grad liefert die Z-Achse (unabhängig vom Drehwinkel).

    Ausgabeformat: ANG({Winkel}); zB:
      ANG(30)  - Drehung um 30 Grad

    Beispiel drehen und Kippen:
      ANG(90) ANG(30)
      Es wird das Objekt 90 Grad um die Z-Achse gedreht;
      die Kippachse entspricht nun der alten X-Achse; um diese Kippachse
      wird nun um 30 Grad hochgekippt.
      Ein negativer Kippwinkel dreht in die Gegenrichtung.

    Seite 1/2
     Seite:    mit PageUp/Down-Taste;
        1, 2 seitlich rechts / links;
        Ausgabeformat: MOD(1)   oder MOD(2)

    Color
     0 = black
     1 = DefCol
     2 = rot
     3 = grün
     4 = blau
     5 = gelb
     6 = magenta
     7 = cyan
     8 = weiss
     9 = hilite
     10 = abgedunkelt

       SymbolType
         0 = star small,
         1 = small triangle
         2 = small circle
         3 = large rectangle
         4 = normalized vector (always same length, arrowhead points to EndpointVector)
         5 = vector (with correct length, arrowhead is at EndpointVector)
         6 = Arrowhead 2D (SymbolPosition is the arrowhead)

    Symbolische Dateibezeichnungen:
    Eine symbolische Dateibezeichnung besteht aus
    "{symbolischer_Pfad}/{Dateiname}"

    Alle symbolischen Pfade sind in Datei {base}xa/dir.lst definiert.
    Das Symbol ist frei wählbar.
    Pfad interaktiv definieren mit der Funktion "Standards/Directories".
    Standardverzeichnis ist {base}/dat; das Zugriffsysmbol für dieses
      Verzeichnis ist "Data".

    Beispiel symbolische Dateibezeichnungen:
    "Data/Niet1.dat"

    Symbolisches Directory einrichten: siehe Standards / Directories.

    Gruppe
    Kennbuchstabe für Gruppe ist U.
    ____________________________________________________________________________

    Selektieren Sie die Objekte der Gruppe - die Objekete werden gehilitet.
    Aus der Gruppe entfernen durch nochmaliges Selektieren.
    Weiter zum nächsten Eingabefeld mit der Tab-Taste.

    Beispiel:
    # Gruppe aus 2 Flächen
    U(A20 A21)

    ____________________________________________________________________________
    In den CAD-Eingabefeldern können als Zahlenwerte (zB für Radius) nur Variablen,
    PI, die Grundrechnungsarten und mathemat. Funktionen benutzt werden (nicht die Funktionen X,Y,Z sowie L, C).

    Attribute:

    Hide / View
    # Object B20 nicht anzeigen
    SHOW B20 OFF
    # wieder anzeigen
    SHOW B20

    Neuen Linientyp definieren
    ATTL
    Beispiel:
    ATTL 20 9 2 4

    # Definition lineAttribute 20 with color 009 = blue, 2=dashed, 4=linewidth

     Format: indexNr colour lineTyp lineThick // comment

       colour     3 digits; red, green, blue.
                  900 = red,   090 = green, 009 = blue;
                  000 = black; 999 = white, 990 = yellow ..
       lineTyp:   0 = full-line (VollLinie);    1 = dash-dot (Strich-Punkt),
                  2 = dashed (kurz strichliert) 3 = dashed-long (lang strichliert),
       lineThick: 1-6, thickness in pixels

    Max. nr of attribute-records is 44 (indexes 0 - 44)
    Defaults are in file /gCAD3D//ltyp.rc
      config is eg cfg_Linux.

    Linientype ändern
    # Linientyp 8 für Objekte L21 und L22
    ATTL 8 L21 L22
    # Siehe Defaultsettings

    Flächenattribute ändern (Farbe, Darstellung)
    # Typ der Fläche A21 auf Symbolisch ändern (nicht schattiert)
    ATTS "S" A21

    # Transparent setzen (T0=normal, T1=halb transparent, T2=voll transparent)
    ATTS "T2" A21

    # Farbe grün setzen (Rot-Anteil-0, Grün-Anteil-255, Blau-Anteil-0)
    ATTS "C00ff00" A21

    # auf Standardfarbe zurücksetzen
    ATTS "C" A21

    Einstellungen:

    # Menü aus
    MODE MEN OFF

    # Browser aus
    MODE BRW OFF

    # Balken oben aus
    MODE BAR1 OFF

    # Nachrichtenfenster unten aus
    MODE BAR2 OFF

    # Nachrichtenfenster unten wieder Ein.
    MODE BAR2 ON

    # Anzeige Ebenen aus
    MODE DISP_PL OFF

    # Anzeige Punkte ein (im Modus VWR steht die Anzeige von Punkten OFF)
    MODE DISP_PT ON

    # Anzeige Punkte aus
    MODE DISP_PT OFF

    # Anzeige aller Object-Names
    MODE DISP_OID ON

    Values:

    - Direct: enter number with keybord;

    - from DB-variable (eg V20 (DB-variable 20))

      Example:
        V20=25
        C20=P20 V20         # circle with radius 25

    - from geometric obj -
        X(P20)                   x-coordinate of point 20
        Y(P20)                   y-coordinate of point 20
        Z(P20)                   z-coordinate of point 20
        VAL(L20)                 length of line 20
        VAL(C20)                 radius of circle 20
        VAL(P1 P2)               length between 2 points
        VAL(P1 L1)               normal distance from point to line

      Example:
        C21=P21 VAL(C20)     # circle with same radius as C20

    - from numeric constant:
        RAD_360    PI * 2     6.2831853071795862319
        RAD_180    PI         3.1415926535897932384
        RAD_90     PI / 2     1.5707963267948965579
        RAD_1      PI / 180   0.0174532925199432954
        SR_3       SQRT(3)    1.732050808
        SR_2       SQRT(2)    1.414213562

      Example:
        V21 = V20 * TAN(RAD_90)

    - from mathematic functions:
       SIN () COS () TAN () ASIN () ACOS () ATAN ())
       SQRT()      square-root
       ABS()       Absolute value (the sign is always positive)
       FIX()       remove the numbers after the decimal point
       RND()       Rounding. 1.3 to 1.0, 1.8 to 2.0, -1.3 to -1.0, -1.8 to -2.0

      Example:
        V26=RND(V20) * 2    # V20=1.8 resuts in 4

    - from mathematic operations:
      supported operators: + - / * ^   (plus minus multiply subtract power)

      Example:
        V20=10
        V21=10+20*2     # result is 60
        V22=10+(20*2)   # result is 50
        V23=V22*2       # result is 100
        V27=4^0.5       # result is 2 (4 to the power 0.5)

    Properties:

      - Properties follow the definitioncode separated by '#'
      - Properties can be used for filtering objects  (see Search / Name)

      Example:
        P20=0,0,0            # Origin BaseLayer
        V30=V20+(V21*1.2)    # sum

    Dynamic-objs:

       -  obj is stored in the dynamic-area,
       -  is not yet stored in DB or is a sub-object of an DB-obj;
       -  consists of a type-letter and parameters

      Example new defined dynamic-obj:
        P(10 5 0)              # point at x=10, y=5, z=0;
        L(P20 P(10 5 0))       # line from point 20 to coords (10 5 0)
        D(V20 0 0)             # vector - cartesian; x-coord from variable
        C(P(0 0 0) P(10 0 0))  # circle from centerpoint, point on circle

      Example sub-object:      eg P(L20 PTS(1)) # startpoint of line L20
        - is a reference to a component of an existing obj
        - this formats can come from object-selections
        see ObjRefs

    Sub-objects:

      - are parts of objects already stored in dB.
      - can come from object-selections
      - use this functionCodes:
        SEG(segment-nr)        # SEG(1) is first segment of polygon or composite-curve (CCV)
        PTS(point-code)        # PTS(1) gives startpoint, endpoint is PTS(2)
        PTI(point-index)       # PTI(2) is the second point of a polygon

    Examples:
    P(C21 0.25)            # parametric point on circle (parameter 0.25 = at 25 % of curve)
    P(S21 0.5)             # parametric point on curve (parameter 0.5 = midpoint)
    P(L20 PTS(1))          # startpoint of line 21 (endpoint is PTS(2))
    P(S21 PTI(7))          # point 7 of curve-21 (a polygon)
    P(S21 SEG(2) PTS(2))   # endpoint of segment 2 of compound-curve-S21
    P(A20 {uPar} {vPar})   # Parametric point on a surface (not all surface-types yet supported)

    L(C20 0.25)            # tangential line to circle (parameter 0.25 = at 25 % of curve)
    L(C21 PTS(2))          # tangential line to circle at endpoint
    L(C20 MOD(1))          # line from centerpoint of C20 to its startpoint
    L(S21 0.25)            # tangential line to curve S21 at parametric pos. 0.25
    L(S21 SEG(3))          # linesegment-3 of curve-21 (a polygon)
    L(S22 SEG(3) SEG(1))   # linesegment-1 of curve nr 3 (a polygon) of composite-curve S22

    D(C21 0.25)            # tangential vector to circle (parameter 0.25 = at 25 % of curve)
    D(S21 PTS(1))          # tangential vector to startpoint of curve S21
    D(S22 SEG(3))          # tangential vector to segment 3 of curve S22
    D(C20 MOD(2))          # vector from centerpoint of C20 to its endpoint

    C(S21 SEG(2))          # second object of composite-curve S21 (must be circle)