--- title: "Standardprozeduren" slug: "standardprozeduren" updated: 2024-05-13T08:23:11Z published: 2024-05-13T08:23:11Z canonical: "kb.moveit.at/standardprozeduren" --- > ## Documentation Index > Fetch the complete documentation index at: https://kb.moveit.at/llms.txt > Use this file to discover all available pages before exploring further. # Standardprozeduren Alle Aufrufe der Standardprozeduren die für Grafikprogrammierung verwendet werden stammen aus der Makrodatei namens "LIB3D.BAS". Diese Makrodatei ist eine von seitens moveIT bereitgestellte Datei, die die notwendigen Methoden zur Grafikprogrammierung bereitgestellt. Im Prinzip sind hier die einzelnen Methoden (Prozeduren) gekapselt und für den Stammdatenentwickler funktioneller aufbereitet (z.B. Extrusion-Befehl). Oft sind die Aufrufe einfach nur durchgeschliffen, sprich der Name der Prozedur in der "LIB3D.BAS" entspricht exakt dem Namen der eigentlichen Prozedur im Kernel (siehe Initialisierung des Grafiksystems Prozedur GascadInit) der instanzierten 3D-OCX-Datei! Um auf die standardisierte LIB3D zugreifen zu können, muss man im visuellen Parametersystem eine Verknüpfung zu den zentralen Stammdaten von moveIT herstellen. Dies kann man im visuellen Parametersystem unter dem Menüpunkt Versionsverwaltung einstellen: ![](https://cdn.document360.io/3757b259-159c-4720-a193-d5c07ebc9cf7/Images/Documentation/image(52).png) Durch den Eintrag 9905 werden im Programmcode alle Aufrufe wie RUN public\lib3D.Prozedurname in den mitausgelieferten zentralen Stammdaten gefunden. Alle Standardprozeduren sind in den zentralen Stammdaten in der Makrodatei PUBLIC\LIB3D.BAS zu finden. > [!CAUTION] > Diese Prozeduren dürfen nicht verändert werden, da diese durch ISS-Updates immer überschrieben werden! ## Initialisierung des Grafiksystems Die Initialisierung des Grafiksystems sollte wenn möglich immer so oder ähnlich aussehen: PROCEDURE InmFmStartmaske DEFINE VARIABLE lstViewList lstViewLst = {} RUN SetViewLst(lstViewLst) RUN public\lib3D.InitializeGraphicSystemV2("Gascad3D", lstViewLst) END PROCEDURE SetViewLst DEFINE PARAMETER inputoutput plstViewLst plstViewLst = {} !Sicht 1 - Innenansicht ! Daher Bemaßungen die auf Layer 1 sind ausblenden plstViewLst = APPEND(plstViewLst, {"1", "1"}) !Sicht 2 - Innenansicht mit Bemassung plstViewLst = APPEND(plstViewLst, {"2", ""}) !Sicht 3 - Außenansicht ! Daher Bemaßungen die auf Layer 1 sind ausblenden plstViewLst = APPEND (plstViewLst, {"3", "1"}) !Sicht 4 - Außenansicht mit Bemassung plstViewLst = APPEND (plstViewLst, {"4", ""}) END PROCEDURE GascadInit IF GSERVER = true THEN ObjectViewer = GETOBJECT("", "OBJECTVIEWER.ObjectViewerCtrl.1") ! 3D-OCX Kernel = GETOBJECT("", "G3DKernel.G3DKernel") ! Kernel RootId = Kernel.GetRootItem IF RootId <> 0 THEN Position = Kernel.GetElementHeadPosition(RootId) WHILE Position <> 0 DO BEGIN ObjId = Kernel.GetNextElement(RootId, INPUTOUTPUT Position) Kernel.KILLOBJECT(ObjId) END ENDIF ENDIF END Bei der Initialisierung werden zwei Objekte instanziert: ObjectViewer Kernel Auf das ObjectViewer-Objekt wird zugegriffen wenn man z.b. den Blickwinkel währende Konfiguration ändern will oder wenn man steuern möchte welche Möglichkeiten in der Grafikanzeige möglich sind (Koordinatenkreuz, …). Auf den Kernel greifen im Prinzip alle Prozeduren der LIB3D.BAS zu, wie z.B. bei der Prozedur TranslateTo: PROCEDURE TranslateTo DEFINE PARAMETER INPUTOUTPUT pObjId, pX, pY, pZ IF gserver = TRUE THEN BEGIN Kernel.TRANSLATETO(pObjId, pX, pY, pZ) ENDIF END ## METHODEN ZUR OBJEKTERZEUGUNG ### BASISOBJEKTE ERZEUGEN UND OBJEKT-GRUPPEN #### CreateProduct Durch diesen Aufruf werden Elemente dem 3D-OCX namentlich bekanntgemacht. Dieser Aufruf ist dann notwendig, wenn Objekte durch EnGroup-Anweisungen zu einer einzigen ID zusammengefasst werden sollen. Mit der DeGroup-Anweisung können Objekte wiederum aus der Gruppe entfernt werden! Aufruf RUN public\lib3D.CREATEPRODUCT(nID, "Produktname") Parameter nID NUM Rückgabewert-ID des erzeugten Objektes sObjektname STRING Name des Objektes, mit GetElementName(nID) kann diese wieder ermittelt werden! --- #### EnGroup Fügt ein Objekt einem Vaterobjekt (entstanden durch CreateProduct()) als Kind zu. Aufruf RUN public\lib3D.ENGROUP(nFatherID, nChildID) Parameter nFatherID NUM ID des Vaterobjektes nChildID NUM ID des Objektes welches zu Vaterobjekt hinzugefügt wird --- #### DeGroup Entfernt ein Objekt von der zugehörigen Objektgruppe. Aufruf RUN public\lib3D.DeGroup(nID) Parameter nID NUM ID des Objektes, dieses Objekt ist zuvor mit EngGroup einem Gruppenobjekt zugeordnet worden! --- #### LoadObject Lädt ein Objekt aus einem A3D-File in den ObjectViewer. Aufruf RUN public\lib3D.LOADOBJECT(nId, PATH+"OBJ\HT1.A3D", "HT", 1) Parameter nID NUM Liefert den ID-Wert des geladenen Objektes sFileName STRING Name der vollständigen Datei inkl. Pfad sObjektname STRING Name des Objektes in der A3D-Datei nLayer NUM Optional, weist dem geladenen Objekt diesen Layer zu. --- #### SaveObject Mit dieser Prozedur kann ein Objekt als A3D-File abgespeichert werden. Aufruf RUN public\lib3D.SaveObject(nId, PATH+"OBJ\HT2.A3D", "HT") Parameter nID NUM ID-Wert des Objektes sFileName STRING Name der vollständigen Datei inkl. Pfad sObjektname STRING Name des Objektes wie es in der A3D-Datei gespeichert wird --- #### Mirror Spiegelt ein Objekt um die yz-Ebene (Spiegelebene). Die x-Achse stellt hier den Normalvektor auf die Spiegelebene. Das neue Objekt befindet sich an gleicher Position wie das Ursprungsobjekt. Aufruf RUN public\lib3D.Mirror(nId, nIdNew) Parameter nID NUM ID-Wert des Objektes nIDNew NUM Liefert den ID-Wert des gespiegelten Objektes --- #### MirrorEx Spiegelt ein Objekt um die yz-, xz- oder xy-Ebene (pAxis = 1, 2 oder 3). Das neue Objekt befindet sich an gleicher Position wie das Ursprungsobjekt. Aufruf RUN public\lib3D.MirrorEX(nId, nIdNew, 1) Parameter nID NUM ID-Wert des Objektes nIDNew NUM Liefert den ID-Wert des gespiegelten Objektes nAxis NUM 1 … x-Achse ist Normalvektor auf yz-Ebene (Spiegelebene) 2 … y-Achse ist Normalvektor auf xz-Ebene (Spiegelebene) 3 … z-Achse ist Normalvektor auf xy-Ebene (Spiegelebene) --- #### Copy Kopiert ein Objekt. Das neue Objekt befindet sich exakt an gleicher Position wie das Ursprungsobjekt. Aufruf RUN public\lib3D.Copy(nId, nIdNew) Parameter nID NUM ID-Wert des Objektes nIDNew NUM Liefert den ID-Wert der Kopie des Objektes --- #### AddText Erzeugt einen 3D Text in der xy-Ebene liegt, d.h. man muss von oben draufschauen, damit der Text gut sichtbar ist. Um einen Text in einer Innenansicht lesen zu können, muss dieser mit RotateBy() um 90° Grad im mathematischen Uhrzeigersinn gedreht werden. Aufruf RUN public\lib3D.AddText(nID, "Test", "Arial", 180, 100, 2) Parameter nID NUM Liefert den ID-Wert des erzeugten Textes sText STRING Der Text welcher generiert werden soll sFont STRING Schriftart, sollte eine Windows-Standardfont sein nHeight NUM Schriftgrad nThickness NUM Schriftstärke nLayer NUM Optional, weist dem geladenen Objekt diesen Layer zu --- #### DrawMeasureLine Zeichnet eine Maßlinie. Aufruf nID = 0 : nLayer = 1 : nX1 = 300 : nX2 = 1000 RUN public\lib3D.DRAWMEASURELINE(nID, nX1, 0, 100, nX2, 0, 100, STR$(nX2-nX1) + " mm", nLayer) Parameter nID NUM Liefert den ID-Wert der erzeugten Maßlinie nX1 NUM X-Koordinate des ersten Punktes der Maßlinie nY1 NUM Y-Koordinate des ersten Punktes der Maßlinie nZ1 NUM Z-Koordinate des ersten Punktes der Maßlinie nX2 NUM X-Koordinate des zweiten Punktes der Maßlinie nY2 NUM Y-Koordinate des zweiten Punktes der Maßlinie nZ2 NUM Z-Koordinate des zweiten Punktes der Maßlinie sText STRING Bemaßungstext, bei Leerstring wird das Maß zwischen dem Anfangspunkt und dem Endpunkt ermittelt und angezeit nLayer NUM Optional --- #### DrawMeasureObject Greift die Objektabmasse eines Objektes ab und generiert wahlweise die X- bzw. Y- bzw. Z-Bemaßungen Aufruf RUN public\lib3D.DRAWMEASUREOBJECT(nIDO, nIDM, TRUE, TRUE, TRUE) Parameter nIDO NUM ID-Wert des zu bemaßenden Objektes nIDM NUM Liefert den ID-Wert der Maßlinie(n) bX NUM True … Bemaßung in X-Richtung, False … keine Bemaßung bY NUM True … Bemaßung in Y-Richtung, False … keine Bemaßung bZ STRING True … Bemaßung in Z-Richtung, False … keine Bemaßung nLayer NUM Optional --- #### SetMeasureProperties Mit dieser Methode können die Bemaßungseinstellungen gesetzt werden. Aufruf RUN public\lib3D.SETMEASUREPROPERTIES("Arial", 0.05, 0.01, 1, 2) Parameter sFont STRING Der Name einer vorinstallierte Schriftart z.b. “Arial“ nFontHeight NUM Höhe der Schriftart, 1 entspricht Window-Höhe nDistance NUM Abstand der Maßlinien zum Maßobjekt nUnit NUM 0 … mm, 1 ... cm, 2 … m nRoundTo NUM Anzahl der Nachkommastellen --- ### GEOMETRISCHE ELEMENTE ERZEUGEN #### DrawQuader Erzeugt einen Quader mit der Methode Extrusion. Zur Performanceverbesserung sollte man besser die Methode DrawBox verwenden. Aufruf RUN public\lib3D.DRAWQUADER(nID, 1000, 1000, 1000) Parameter nID NUM Liefert die ID des erzeugten Quaders nX NUM x-Maß des Quader nY NUM y-Maß des Quaders nZ NUM z-Maß des Quaders nLayer NUM Optional, Layer der zugeordnet werden kann --- #### DrawQuaderHorizontal Erzeugt einen Quader mit der Methode Extrusion. wobei der Extrusionspfad horizontal verläuft (Texturverlauf). Zur Performanceverbesserung sollte man besser die Methode DrawBox verwenden. Aufruf RUN public\lib3D.DRAWQUADERHORIZONTAL(nID, 1000, 1000, 1000) Parameter nID NUM Liefert die ID des erzeugten Quaders nX NUM x-Maß des Quader nY NUM y-Maß des Quaders nZ NUM z-Maß des Quaders nLayer NUM Optional, Layer der zugeordnet werden kann --- #### DrawBox Erzeugt einen Quader Aufruf RUN public\lib3D.DRAWBOX(nID, 1000, 1000, 1000) Parameter nID NUM Liefert die ID des erzeugten Quaders nX NUM x-Maß des Quader nY NUM y-Maß des Quaders nZ NUM z-Maß des Quaders nLayer NUM Optional, Layer der zugeordnet werden kann --- #### DrawZylinder Erzeugt einen Zylinder mit der Methode Extrusion. Aufruf RUN public\lib3D.ZYLINDER(nID, 1000, 800) Parameter nID NUM Liefert die ID des erzeugten Zyinders nDM NUM Der Durchmesser des Zylinders nHeight NUM Die Höhe des Zylinders nLayer NUM Optional, Layer der zugeordnet werden kann --- #### DrawCylinder Erzeugt einen Zylinder. Aufruf RUN public\lib3D.CYLINDER(nID, 1000, 800, 60) Parameter nID NUM Liefert die ID des erzeugten Zyinders nDM NUM Der Durchmesser des Zylinders nHeight NUM Die Höhe des Zylinders nSeg NUM Anzahl der Segmente nLayer NUM Optional, Layer der zugeordnet werden kann --- #### DrawCone Erzeugt einen Kegel oder einen Kegelstumpf Aufruf RUN public\lib3D.DRAWCONE(nID, 300, 0, 700, 60) Parameter nID NUM Liefert die ID des erzeugten Kegels oder Kegelstumpfes nRadBottom NUM Radius am Fußpunkt des Kegels nRadTop NUM Radius an der Spitze des Kegels, ist dieser 0 ergibt dies einen Kegel und keinen Kegelstumpf! nHeight NUM Höhe des Kegel oder des Kegelstumpfes nSeg NUM Anzahl der Segmente nLayer NUM Optional, Layer der zugeordnet werden kann --- #### DrawSphere Erzeugt eine Kugel. Aufruf RUN public\lib3D.DRAWSPHERE(nID, 300, 60, 60) Parameter nID NUM Liefert die ID der erzeugten Kugel nRadius NUM Radius der Kugel nSeg1 NUM Anzahl der Flächen entlang des Äquators nSeg2 NUM Anzahl der Segmente von Pol zu Pol nLayer NUM Optional, Layer der zugeordnet werden kann --- #### DrawTorus Erzeugt eine Reifen (Torus) Aufruf RUN public\lib3D.DRAWTORUS(nID, 300, 150, 60, 60) Parameter nID NUM Liefert die ID des erzeugten Reifens nRadL NUM Radius des großen Kreises nRadS NUM Radius des kleinen Kreises nSegL NUM Anzahl der Segmente entlang des großen Kreises nSegS NUM Anzahl der Segmente entlang des kleinen Kreises nLayer NUM Optional, Layer der zugeordnet werden kann --- ### OBJEKTE DURCH EXTRUSIONEN ERZEUGEN #### Extrusion Extrudiert eine 2D Kontur entlang eines Pfades. Die Kontur wird in Relation zu einem frei wählbaren Punkt gesetzt, welcher dann den Extrusionspfad abläuft. Aufruf nID = 0 lstO = {SEGMENT([10, 0],[80, 0]), SEGMENT([80, 0],[80,50]), SEGMENT([80,50],[ 0,70]), SEGMENT([ 0,70],[10, 0]) } vRP = [0,0] : lstRef = {0,1,0} pEP1 = {0,0,0} : pEP2 = {200,100,0} :pEP3 = {300,-100,1200} lstPart1 = {pEP1, pEP2} : lstPart2 = {pEP2, pEP3} lstEP = {pPart1, pPart2} RUN public\lib3D.EXTRUSION(nID, lstO, vRP, lstRef, lstEP) Parameter nID NUM Liefert den ID-Wert des extrudierten Objekts, falls in Ordnung lstO LIST {SEGMENT,SEGMENT,SEGMENT,...} Profil (Fläche) die extrudiert wird! vRP VECTOR [NUM,NUM] Relationspunkt der Outline! lstRef LIST {NUM,NUM,NUM} - Referenzvektor für die Extrusion Die Lage der X-Achse(2D) im 3D-Raum! lstEP LIST {{{NUM,NUM,NUM},{NUM,NUM,NUM}},...} Eigentlicher Extrusionspfad im 3D-Raum! nLayer NUM Optional, weist dem extrudierten Objekt diesen Layer zu --- #### X_Extrusion Extrudiert eine 2D-Outline in die X Richtung. Wird oft für Testzwecke verwendet! Aufruf nID = 0 lstOutline = {SEGMENT([10, 0],[80, 0]), SEGMENT([80, 0],[80,50]), SEGMENT([80,50],[ 0,70]), SEGMENT([ 0,70],[10, 0]) } nLength = 30 RUN public\lib3D.X_EXTRUSION(nID, lstOutline, nLength) Parameter nID NUM Liefert den ID-Wert des erzeugten Extrusionskörpers lstOutline LIST {SEGMENT,SEGMENT,SEGMENT,...} Profil (Fläche) die extrudiert wird! nLength NUM Länge der Extrusionsstrecke xOffset NUM Optional, Verschiebung des Körpers entlang der x-Achse yOffset NUM Optional, Verschiebung des Körpers entlang der y-Achse zOffset NUM Optional, Verschiebung des Körpers entlang der z-Achse --- #### Y_Extrusion Extrudiert eine 2D-Outline in die Y Richtung. Wird oft für Testzwecke verwendet! Aufruf nID = 0 lstOutline = {SEGMENT([10, 0],[80, 0]), SEGMENT([80, 0],[80,50]), SEGMENT([80,50],[ 0,70]), SEGMENT([ 0,70],[10, 0]) } nDeep = 30 RUN public\lib3D.Y_EXTRUSION(nID, lstOutline, nDeep) Parameter nID NUM Liefert den ID-Wert des erzeugten Extrusionskörpers lstOutline LIST {SEGMENT,SEGMENT,SEGMENT,...} Profil (Fläche) die extrudiert wird! nDeep NUM Tiefe (Dicke) der Extrusion xOffset NUM Optional, Verschiebung des Körpers entlang der x-Achse yOffset NUM Optional, Verschiebung des Körpers entlang der y-Achse zOffset NUM Optional, Verschiebung des Körpers entlang der z-Achse --- #### Z_Extrusion Extrudiert eine 2D-Outline in die Z Richtung. Wird oft für Testzwecke verwendet! Aufruf nID = 0 lstOutline = {SEGMENT([10, 0],[80, 0]), SEGMENT([80, 0],[80,50]), SEGMENT([80,50],[ 0,70]), SEGMENT([ 0,70],[10, 0]) } nHeight = 30 RUN public\lib3D.Z_EXTRUSION(nID, lstOutline, nHeight) Parameter nID NUM Liefert den ID-Wert des erzeugten Extrusionskörpers lstOutline LIST {SEGMENT,SEGMENT,SEGMENT,...} Profil (Fläche) die extrudiert wird! nHeight NUM Höhe der Extrusion xOffset NUM Optional, Verschiebung des Körpers entlang der x-Achse yOffset NUM Optional, Verschiebung des Körpers entlang der y-Achse zOffset NUM Optional, Verschiebung des Körpers entlang der z-Achse --- #### RotExtrusion Erzeugt ein neues Objekt indem eine 2D Kontur um eine Achse gedreht wird. Die 2D Kontur darf dabei die Achse nicht schneiden. Liegen der Anfangs- und Endpunkt der 2D Kontur nicht auf der Achse, so fügt RotExtrusion zusätzliche schließende Segmente ein. AngleStart und AngleEnd können dazu verwendet werden, Tortenstücke anstelle von kompletten Rotationskörpern zu erzeugen. Aufruf nID = 0 lstO=SEGMENT([0,110],[10,110]), SEGMENT([10,110],[25,10]), SEGMENT([25,10],[105,10]), SEGMENT([105,10],[105,110]), SEGMENT([105,110],[210,110]), SEGMENT([210,110],[210,100]), SEGMENT([210,100],[115,100]), SEGMENT([115,100],[0,115]) } pAxisStart = [0,0] : pAxisEnd = [1,0] nStartA = 0 : nStopA = 360 nFacets = 36 RUN public\lib3D.ROTEXTRUSION(nID, lstO, pAxisStart, pAxisEnd, nStartA, nStopA, nFacets) Parameter nID NUM Liefert den ID-Wert des erzeugten Extrusionskörpers lstO LIST {SEGMENT,SEGMENT,SEGMENT,...} Profil (Fläche) die extrudiert wird! pAxisStart VECTOR [NUM,NUM], Startpunkt pAxisEnd VECTOR [NUM,NUM], Endpunkt nStartA NUM Startwinkel nStopA NUM Endwinkel nFacets NUM Anzahl an Teilflächen die erzeugt werden sollen nLayer NUM Optional, weist dem extrudierten Objekt diesen Layer zu --- ### OBJEKTE DURCH GEOMETRISCHE OPERATIONEN ERZEUGEN ![](https://cdn.document360.io/3757b259-159c-4720-a193-d5c07ebc9cf7/Images/Documentation/objekte.png) #### Union Mit der Union-Methode werden zwei Objekte zu einem neuen Objekt verschmolzen. Aufruf RUN public\lib3D.UNION(nNewId, nID1, nId2) Parameter nNewID NUM Liefert den ID-Wert des verschmolzenen Objektes nID1 NUM ID des ersten Objektes (obj1) nID2 NUM ID des zweiten Objektes (obj2) --- #### ObjIntersection Erzeugt ein neues Objekt, das sich aus der geometrischen Schnittmenge der beiden Ausgangsobjekte ergibt. Bitte anstatt dieser Methode ForceIntoBox verwenden! Aufruf RUN public\lib3D.OBJINTERSECTION(nNewId, nId1, nId2, nKillOpt) Parameter nNewID NUM Liefert den ID-Wert des neu entstandenen Objektes nID1 NUM ID des ersten Objektes nID2 NUM ID des zweiten Objektes nKillOpt NUM 1 … Das erste Objekt wird gelöscht 2 … Das zweite Objekt wird gelöscht 3 … Beide Objekte werden gelöscht --- #### ForceIntoBox Erzeugt ein neues Objekt, das sich aus der geometrischen Schnittmenge der beiden Ausgangsobjekte ergibt. Diese Methode sollte anstatt von ObjIntersection verwendet werden! Aufruf RUN public\lib3D.FORCEINTOBOX(nNewId, nId1, nId2, nKillOpt) Parameter nNewID NUM Liefert den ID-Wert des neu entstandenen Objektes nID1 NUM ID des ersten Objektes nID2 NUM ID des zweiten Objektes nKillOpt NUM 1 … Das erste Objekt wird gelöscht 2 … Das zweite Objekt wird gelöscht 3 … Beide Objekte werden gelöscht --- #### Difference Erzeugt ein neues Objekt, das sich aus der geometrischen Differenz der beiden Ausgangsobjekte ergibt. Vom Objekt obj1 wird das Objekt obj2 geometrisch abgezogen. (siehe auch GroupDifference!). Aufruf RUN public\lib3D.DIFFERENCE(nNewId, nId1, nId2, nKillOpt) Parameter nNewID NUM Liefert den ID-Wert des neu entstandenen Objektes nID1 NUM ID des Objektes von dem etwas abgezogen wird nID2 NUM ID des Abzugobjektes nKillOpt NUM 1 … Das erste Objekt wird gelöscht 2 … Das zweite Objekt wird gelöscht 3 … Beide Objekte werden gelöscht --- #### GroupDifference Erzeugt ein neues Objekt, das sich aus der geometrischen Differenz der beiden Ausgangsobjekte ergibt. Vom Objekt obj1 wird das Objekt obj2 geometrisch abgezogen. (siehe auch Difference!). Aufruf RUN public\lib3D.GROUPDIFFERENCE(nNewId, nId1, nId2, nKillOpt) Parameter nNewID NUM Liefert den ID-Wert des neu entstandenen Objektes nID1 NUM ID des Objektes von dem etwas abgezogen wird nID2 NUM ID des Abzuggruppenobjektes nKillOpt NUM 1 … Das erste Objekt wird gelöscht 2 … Das zweite Objekt wird gelöscht 3 … Beide Objekte werden gelöscht --- #### CutObject Schneidet ein Objekt in zwei Teile. Die Schnittebene wird durch einen Punkt und einen Normalvektor bestimmt. Aufruf RUN public\lib3D.CUTOBJECT(nId1, nId2, 0, 0, 1000, 1, 0, 0, 1) Parameter nID1 NUM ID des Objektes, welche geschnitten wird. nID2 NUM ID die zurückgegeben wird – siehe nCutOpt nX NUM X-Koordinate des Schnittpunktes nY NUM Y-Koordinate des Schnittpunktes nZ NUM Z-Koordinate des Schnittpunktes nNormX NUM X-Koordinate des Normalvektors auf die Schnittebene (-1, 0 oder 1) nNormY NUM Y-Koordinate des Normalvektors auf die Schnittebene (-1, 0 oder 1) nNormZ NUM Z-Koordinate des Normalvektors auf die Schnittebene (-1, 0 oder 1) nCutOpt NUM 1 … Das abgeschnittene Objekt wird gelöscht 2 … Das geschnittene Objekt wird gelöscht 3 … Keines der Objekte wird gelöscht, es entstehen 2 neue Objekte. --- ### METHODEN ZUR OBJEKTMANIPULATION #### KillObject Löscht ein Objekt aus dem Szenario. Aufruf RUN public\lib3D.KILLOBJECT(nId) Parameter nID NUM ID eines Objektes --- #### KillAllObjects Löscht alle Objekte des Szenarios. Aufruf RUN public\lib3D.KILLALLOBJECTS --- #### DeleteGroupObj Diese Methode löscht ein Gruppenelement sowie deren Elemente. Aufruf RUN public\lib3D.DELETEGROUPOBJ(nId) Parameter nID NUM ID eines Objektes --- #### SetElementMaterial Weist einem Objekt ein Material zu, welches im "MATERIAL.COL"-File hinterlegt wurde. Aufruf RUN public\lib3D.SETELEMENTMATERIAL(nId, "RAL5014", "moveit") Parameter nID NUM ID eines Objektes sMaterial STRING Name des Materials bzw. der Textur im Materialeditor sCatalogname STRING Name eines anderen Kataloges, welche unter dem Ordner PATH + "OBJ\" existieren muss! --- #### SetElementName Weist einem Objekt einen neuen Namen zu. Aufruf RUN public\lib3D.SETELEMENTNAME(nId, "Objektname") Parameter nID NUM ID eines Objektes sName STRING Neuer Name für das Objekt --- #### SetModifiedElementMaterial Objekt ein Material zuweisen, welches im "MATERIAL.COL"-File hinterlegt wurde, wobei die Textur modifiziert werden kann Aufruf RUN public\lib3D.SETMODIFIEDELEMENTMATERIAL(nId, "RAL5014", "Rotate90") Parameter nID NUM ID eines Objektes sMaterial STRING Name des Materials bzw. der Textur im Materialeditor pModification STRING "", Textur wird nicht verändert "Rotate90", Rotiert die Textur um 90 Grad "VerticalMirror", Spiegelt die Textur vertikal "HorizontalMirror", Spiegelt die Textur horizontal sCatalogname STRING Name eines anderen Kataloges, welche unter dem Ordner PATH + "OBJ\" existieren muss! --- #### ScaleTo Ein wird in drei Achsen auf die angegebenen Längen skaliert. Bei Eingabe von 0 bleibt das Originalmaß erhalten. Aufruf RUN public\lib3D.SCALETO(nId, nX, nY, nZ) Parameter nID NUM ID eines Objektes nX NUM x-Maß auf welches das Objekt skaliert wird nY NUM y-Maß auf welches das Objekt skaliert wird nZ NUM z-Maß auf welches das Objekt skaliert wird --- #### ScaleBy Ein Objekt wird in drei Achsen um drei Faktoren skaliert. Ist pX bzw. pY bzw. pZ gleich 1. so bedeutet dies keine Skalierung auf den jeweiligen Achsen Aufruf RUN public\lib3D.SCALEBY(nId, nX, nY, nZ) Parameter nID NUM ID eines Objektes nX NUM x-Maß auf welches das Objekt skaliert wird nY NUM y-Maß auf welches das Objekt skaliert wird nZ NUM z-Maß auf welches das Objekt skaliert wird --- #### RotateTo Ein Objekt wird um einen Rotationspunkt und um eine Achse an einem absoluten Winkel rotiert. Aufruf RUN public\lib3D.ROTATETO(nId,1, nX, nY, nZ, nWinkel) Parameter nID NUM ID eines Objektes nAxis NUM Die Achse um die rotiert werden soll 1 … x-Achse, 2 … y-Achse, 3 … z-Achse nX NUM x-Koordinate des Rotationspunktes nY NUM y-Koordinate des Rotationspunktes nZ NUM z-Koordinate des Rotationspunktes nWinkel NUM Winkel in Grad! --- #### RotateBy Ein Objekt wird um einen Rotationspunkt und um eine Achse an einem relativen Winkel rotiert. Aufruf RUN public\lib3D.ROTATEBY(nId,1, nX, nY, nZ, nWinkel) Parameter nID NUM ID eines Objektes nAxis NUM Die Achse um die rotiert werden soll 1 … x-Achse, 2 … y-Achse, 3 … z-Achse nX NUM x-Koordinate des Rotationspunktes nY NUM y-Koordinate des Rotationspunktes nZ NUM z-Koordinate des Rotationspunktes nWinkel NUM Winkel in Grad! --- #### TranslateTo Ein Objekt wird absolut an die angegebene Stelle an nX, nY und nZ verschoben. Aufruf RUN public\lib3D.TRANSLATETO(nId, nX, nY, nZ) Parameter nID NUM ID eines Objektes nX NUM x-Koordinate wohin das Objekt verschoben werden soll nY NUM y-Koordinate wohin das Objekt verschoben werden soll nZ NUM z-Koordinate wohin das Objekt verschoben werden soll --- #### TranslateBy Ein Objekt wird relativ vom Ausgangspunkt um nX, nY und nZ verschoben. Aufruf RUN public\lib3D.TRANSLATEBY(nId, nX, nY, nZ) Parameter nID NUM ID eines Objektes nX NUM Wert um wieviel in x-Richtung verschoben werden soll nY NUM Wert um wieviel in y-Richtung verschoben werden soll nZ NUM Wert um wieviel in z-Richtung verschoben werden soll --- #### TranslateByLst Ein Objekt wird relativ vom Ausgangspunkt um die Zahlentripleliste {nX, nY, nZ} verschoben. Aufruf RUN public\lib3D.TRANSLATEBYLST(nId, {nX, nY, nZ}) Parameter nID NUM ID eines Objektes {nX, nY, nZ} LIST Liste die die Verschiebungsmaße X,Y,Z enthält --- #### Smooth Glättet runde Objekte wie Kugeln oder Zylinder. Aufruf RUN public\lib3D.SMOOTH(nId, 30) Parameter nID NUM ID des zu glättenden Objektes Glättungswinkel NUM Glättungswinkel in Grad, empfohlen werden 20° - 30° Grad! --- #### UnSmooth Mit UnSmooth() wird die Glättung wieder zurückgesetzt. Aufruf RUN public\lib3D.UnSmooth(nId) Parameter nID NUM ID des Objektes dem bereits Glättung widerfahren ist. --- #### Beautify Löscht alle Linien in der 3D Darstellung, wo der Winkel kleiner als der Grenzwinkel ist Aufruf RUN public\lib3D.BEAUTIFY(nId, 30) Parameter nID NUM ID des Objektes wo die Hilfslinien gelöscht werden sollen. nDegrees NUM Grenzwinkel, sollte zwischen 20 und 30 liegen --- #### SetElementLayer Weist einem Objekt einen Layer zu Aufruf RUN public\lib3D.SETELEMENTLAYER(nId, 2) Parameter nID NUM ID des Objektes dem Layer zugeordnet werden soll nLayer NUM Der Layer der dem Objekt zugeordnet werden soll --- #### SetGroupLayer Weist einem Gruppenobjekt einen Layer zu Aufruf RUN public\lib3D.SETGROUPLAYER(nId, 2) Parameter nID NUM ID des Gruppenobjektes dem Layer zugeordnet werden soll nLayer NUM Der Layer der dem Gruppenobjekt zugeordnet werden soll --- #### SetVisibility Mit dieser Methode kann die Sichtbarkeit eines Objekts verändert werden. Aufruf RUN public\lib3D.SETVISIBILITY(nID, TRUE) Parameter nID NUM ID des Objektes welches sichtbar oder unsichtbar werden soll bVisibility BOOL True … Sichtbar, False … Unsichtbar --- ### METHODEN DES OBJECTVIEWER’S #### SetGraphicViewId Mit dieser Methode setzt man die Grafiksicht. Aufruf RUN public\lib3D.SetGraphicViewId(3) Parameter pnViewId NUM Grafiksichtcode --- #### SetView Mit diese Methode legt man fest, von wo man auf das Objekt schaut. Sollte nicht mehr verwendet werden. Bitte public\lib3D.SetGraphicViewId anstelle von SetView verwenden. Aufruf RUN public\lib3D.SETVIEW(237, 33, 161) !Schrägriss RUN public\lib3D.SETVIEW( 90, 180, 0) !Innenansicht RUN public\lib3D.SETVIEW( 90, 0, 0) !Außenansicht RUN public\lib3D.SETVIEW(180, 0, 180) !Ansicht von oben RUN public\lib3D.SETVIEW(180, 180, 0) !Ansicht von unten RUN public\lib3D.SETVIEW( 90, 90, 0) !Ansicht von rechts RUN public\lib3D.SETVIEW( 90, -90, 0) !Ansicht von links Parameter nX NUM Gradangabe für x-Achse nY NUM Gradangabe für y-Achse nZ NUM Gradangabe für z-Achse --- #### Rendermode Mit diese Methode legt man die Darstellung der Objekte des Objektviewers fest. Sollte man nicht mehr verwenden. Bitte den Rendermode nur in der Grafiksicht hinterlegen. Aufruf RUN public\lib3D.RENDERMODE(1) Parameter nModus NUM 0 … Wireframe Linien (Wird nicht mehr verwendet!) 1 … Schattierte Darstellung 2 … Schattierte Darstellung inkl. Kantenverstärkung 3 … Verbesserte Darstellung mit Farbflächen 4 … Verbesserte Darstellung mit Farbflächen inklusive Kantenverstärkung --- #### DrawImage Erzeugt ein bzw. mehrere Bild(er) in der 3D-Ansicht. Bereiche im Bild die die Farbe (Rot:0 Grün: 255 Blau:0) haben, werden transparent dargestellt. Mittels dem optionalen Parameter nLayer kann man die Reihenfolge/Ansicht des Bildes steuern. Aufruf RUN public\lib3D.DRAWIMAGE(nID_OV, sImagePath, 0, 0, 100, 100) !Ohne Layer RUN public\lib3D.DRAWIMAGE(nID_OV, sImagePath, 0, 0, 100, 100, 2) !Mit Layer Parameter nID NUM ID des Image-Objektes, welche mit KillImage gelöscht werden kann. Wenn die Prozedur erfolgreich durchgeführt werden konnte, wird ein Positive Zahl zurückgegeben, anderfalls -1. sImagePath STRING Vollständiger Pfad mit Dateinamen mit Endung xPos NUM X-Koordinate der linken unteren Ecke der Bitmap in mm yPos NUM Y-Koordinate der linken unteren Ecke der Bitmap in mm nWidth NUM Gewünschte Breite der Bitmap in mm nHeight NUM Gewünschte Höhe der Bitmap in mm nAngle NUM Winkel, um den die Bitmap gedreht werden soll. Derzeit werden folgende Winkel unterstützt: 0, 90, 180 und 270 Grad. nLayer NUM Optional, weist dem erzeugtem Bild diesen Layer zu --- #### KillImage Löscht ein Image-Objekt. Aufruf RUN public\lib3D.KILLIMAGE(nID) Parameter nID NUM ID des Image-Objektes welches gelöscht werden soll, wir hier 0 angegeben, so werden alle Image-Objekte gelöscht. --- #### GetRealBitmapSize Ermittelt die Bitmapgröße im mm. Damit die Ermittlung funktioniert, muss die Größe in der Bitmap richtig gesetzt sein (Größe = Pixelanzahl / DPI) und der DPI-Wert sollte immer ganzzahlig sein Aufruf RUN public\lib3D.GETREALBITMAPSIZE(PATH+"OBJ\Images\G.JPG", nH, nB) Parameter sImage STRING Vollständiger Pfad mit Dateinamen und Endung nH NUM Rückgabewert der Höhe in mm nB NUM Rückgabewert der Breite in mm --- #### Viewmode Mit diese Methode legt man den Anzeigemodus das Objektviewers fest. Sollte nicht mehr verwendet werden. Bitte ViewMode nur in der Grafiksicht hinterlegen. Aufruf RUN public\lib3D.VIEWMODE(1) Parameter nModus NUM 1 … Orthogonal (mathematisch korrekt) 2 … Perspektive (geschönt) --- #### ResetZoom Mit diese Methode sieht man wieder alle Objekte auf dem ObjectViewer, d.h. alle Verkleinerungen oder Vergrößerungen der Grafikanzeige sind nicht mehr aktiv. Aufruf RUN public\lib3D.RESETZOOM --- #### EnableOriginAxis Ein- bzw. Ausblenden des Koordinatenursprungs Aufruf RUN public\lib3D.ENABLEORIGINAXIS(false) Parameter bShowAxes BOOLTrue … Koordinatenachsen anzeigen, False … nicht anzeigen --- #### EnableRotation Rotation ein- bzw. ausschalten Aufruf RUN public\lib3D.ENABLEROTATION(false) Parameter bRotation BOOLTrue … Rotation möglich, False … keine Rotation möglich --- #### EnableRotationAxis Rotationsachsen ein- bzw. ausblenden Aufruf RUN public\lib3D.ENABLEROTATIONAXIS(false) Parameter bShowRotAxis BOOL True … Rotationsachsen anzeigen, False … nicht anzeigen --- #### Add3DLine Fügt der Szenerie eine 3D-Linie hinzu. Aufruf RUN public\lib3D.Add3DLine(nID, 0, 0, 0, 100, 0, 0) Parameter pnID_ObjectViewer NUM '3DLine-Objekt-ID' (welche mit public\lib3D.Remove3DLine bzw. public\lib3D.ClearAll3DLines gelöscht werden kann) pnPositionFromX NUM X-Koordinate des ersten Punktes der 3D-Linie pnPositionFromY NUM Y-Koordinate des ersten Punktes der 3D-Linie pnPositionFromZ NUM Z-Koordinate des ersten Punktes der 3D-Linie pnPositionToX NUM X-Koordinate des zweiten Punktes der 3D-Linie pnPositionToY NUM Y-Koordinate des zweiten Punktes der 3D-Linie pnPositionToZ NUM Z-Koordinate des zweiten Punktes der 3D-Linie pnColor NUM Farbcode (optional) pnWidth NUM Die Breite der Linie entspricht der Definition der Linienbreite in OpenGL (optional) pnStyle NUM Linientypen (optional) / 1:Durchzogen / 2: strichliert / 3: punktiert / 4: strichpunktiert pnLayer NUM Angabe des Layers (optional) --- #### Remove3DLine Löscht die angegebene 3D-Linie. Aufruf RUN public\lib3D.Remove3DLine(nID) Parameter pnID_ObjectViewer NUM '3DLine-Objekt-ID' (welche mit public\lib3D.Add3DLine erzeugt wurde) --- #### ClearAll3DLines Löscht alle angegebene 3D-Linien, welche mit public\lib3D.Add3DLine erzeugt wurden. Aufruf RUN public\lib3D.ClearAll3DLines --- ### METHODEN UM OBJEKTINFORMATION ABZUFRAGEN #### GetElementName Liefert den Namen eines Objektes zurück. Aufruf RUN public\lib3D.GetElementName(nId, sName) Parameter nID NUM ID eines Objektes sName STRING Der Name des Objektes, sofern vorhanden, ansonsten ““ --- #### GetElementSize Ermittelt die räumliche Größe eines Objekts. Ist bei geladenen Objekten interessant wie z.B. bei Türgriffen oder ähnlichen Objekten, welche man nicht selber erzeugt hat. Aufruf RUN public\lib3D.GetElementSize(nId, nSizeX, nSizeY, nSizeZ) Parameter nID NUM ID eines Objektes nSizeX NUM Rückgabe X-Maß des Objektes nSizeY NUM Rückgabe Y-Maß des Objektes nSizeZ NUM Rückgabe Z-Maß des Objektes --- #### GetElementPosition Ermittelt die absolute Position eines Objektes Aufruf RUN public\lib3D.GETELEMENTPOSITION(nId, nPosX, nPosY, nPosZ) Parameter nID NUM ID eines Objektes nPosX NUM x-Koordinate der Absolutposition nPosY NUM y-Koordinate der Absolutposition nPosZ NUM z-Koordinate der Absolutposition --- #### GetObjectCenter Bestimmt den absoluten-Mittelpunkt eines Objekts. Aufruf RUN public\lib3D.GETOBJECTCENTER(nId, nX, nY, nZ) Parameter nID NUM ID des Objektes dessen Mittelpunkt ermittelt werden soll nX NUM X-Koordinate des Mittelpunktes des Objektes nY NUM Y-Koordinate des Mittelpunktes des Objektes nZ NUM Z-Koordinate des Mittelpunktes des Objektes --- #### IsObjectID Stellt fest, ob die angegebene ID gültig ist bzw. ob die ID zu einem Objekt gehört. Aufruf RUN public\lib3D.ISOBJECTID(nID, bOK) Parameter nID NUM ID eines Objektes bOK BOOL True … ID ist gültig, False … ID ist ungültig (kein Objekt) --- #### GetFather Diese Methode liefert die ID des Vaterobjektes zurück. Mit Ausnahme des Wurzelobjektes besitzt jedes Objekt immer ein Vaterobjekt. Aufruf RUN public\lib3D.GETFATHER(nID, nIDFather) Parameter nID NUM ID eines Objektes nIDFather NUM Liefert die ID des Vaterobjektes zurück --- ### METHODEN FÜR CATCHPOINTS / PICKPOINTS #### AddCatchPoint Weist einem Objekt einem Catchpoint zu. Ein CatchPoint ist ein Punkt an dem andere CatchPoints einrasten können, wobei die Ausrichtung des anderen Objektes keine Rolle spielt. Aufruf RUN public\lib3D.ADDCATCHPOINT(nID, "Name", "*", 0, 0, 0) Parameter nID NUM ID des Objekts, wo ein Catchpoint angefügt werden sollte sName STRING Name des CatchPoints. Nur CatchPoints mit identischem Namen können an diesem CatchPoint einrasten. Eine Ausnahme bildet der Name "". An so einem CatchPoint kann jeder andere einrasten sMaske STRING Vergleichsmaske. Von verschiebenden Catchpoints wird der Name genommen und mit der Maske eines potentiellen CatchPoints verglichen. Nur dann, wenn dies eine Überein-stimmung ergibt, kann ein Catch zustande kommen, falls geometrisch die Möglichkeit besteht. Es ist auch erlaubt in der Maske auch Wildcards zu verwenden. Ein Zeichen '*' fungiert als Wildcard und stimmt mit beliebig vielen Zeichen des zu vergleichenden Namens überein. Es können beliebig viele '*' in beliebiger Anordnung verwendet werden. Wenn es eine Möglichkeit gibt, die '*' durch andere Zeichen zu ersetzen so dass der Name entsteht, so wird das als Übereinstimmung gewertet pX NUM X-Position des CatchPoints in Bezug auf den Objektursprung pY NUM Y-Position des CatchPoints in Bezug auf den Objektursprung pZ NUM Z-Position des CatchPoints in Bezug auf den Objektursprung --- #### AddCatchPointAxis Identisch zu AddCatchPoint, mit folgenden Unterschieden: Nur andere CatchPointAxis können an dieser Stelle einrasten. Es wird zusätzlich noch eine Achse angegeben. Das einrastende Objekt wird mit seiner CatchPointAxis Achse so ausgerichtet, das beide Achsen in Übereinstimmung kommen. Die Rotation um diese Achse ist jedoch unspezifizert! Aufruf RUN public\lib3D.ADDCATCHPOINTAXIS(nID,"Name","*", 0, 0, 0, 0, 1, 0) Parameter nID NUM ID des Objekts, wo ein Catchpoint angefügt werden sollte sName STRING Name der CatchPointaxis sMaske STRING Vergleichsmaske (siehe AddCatchPoint) pX NUM X-Position des CatchPoints in Bezug auf den Objektursprung pY NUM Y-Position des CatchPoints in Bezug auf den Objektursprung pZ NUM Z-Position des CatchPoints in Bezug auf den Objektursprung pRefX NUM X-Referenzvektor der Achse (-1, 0 oder 1) pRefY NUM Y-Referenzvektor der Achse (-1, 0 oder 1) pRefZ NUM Z-Referenzvektor der Achse (-1, 0 oder 1) --- #### AddCatchPointOrientation Ähnlich wie AddCatchPoint, aber nur andere CatchPointOrientation können an der angegebenen Position einrasten. Das einrastende Objekt wird so ausgerichtet, das die beiden angegebenen Achsen (XAxis. und YAxis.) übereinander zu liegen kommen. Das einrastende Objekt ist damit in seiner Einrastposition und Einrastorientierung vollständig festgelegt. XAxis und YAxis sind Vektoren, die aufeinander senkrecht stehen sollten. Ist dies nicht der Fall, so wird die XAxis als fix angenommen und YAxis entsprechend nachgerechnet! Aufruf RUN public\lib3D.ADDCATCHPOINTORIENTATION(nID, "Name", "*", 0, 0, 0, 0, 1, 0, 0, 1, 0) Parameter nID NUM ID des Objekts, wo ein Catchpoint angefügt werden sollte sName STRING Name der CatchPointOrientation sMaske STRING Vergleichsmaske (siehe AddCatchPoint) pX NUM X-Position des CatchPoints in Bezug auf den Objektursprung pY NUM Y-Position des CatchPoints in Bezug auf den Objektursprung pZ NUM Z-Position des CatchPoints in Bezug auf den Objektursprung pXRefX NUM X-Referenzvektor der X-Achse (-1, 0 oder 1) pXRefY NUM Y-Referenzvektor der X-Achse (-1, 0 oder 1) pXRefZ NUM Z-Referenzvektor der X-Achse (-1, 0 oder 1) pYRefX NUM X-Referenzvektor der Y-Achse (-1, 0 oder 1) pYRefY NUM Y-Referenzvektor der Y-Achse (-1, 0 oder 1) pYRefZ NUM Z-Referenzvektor der Y-Achse (-1, 0 oder 1) --- #### AddCatchLine Erzeugt eine CatchLine. Eine Catchline ist eine Linie an der andere CatchPoints einrasten können. CatchLines sind rein passive Objekte, an ihnen kann etwas einrasten, sie selbst können jedoch nirgends wo einrasten Aufruf RUN public\lib3D.ADDCATCHLINE(nID, "Name", "*", 0, 0, 0, 100, 0, 0) Parameter nID NUM ID des Objekts, wo ein CatchLine angefügt werden sollte sName STRING Name der CatchLine sMaske STRING Vergleichsmaske (siehe AddCatchPoint) fromX NUM X-Position des Startpunkts der CatchLine in Bezug auf den Objektursprung fromY NUM Y-Position des Startpunkts der CatchLine in Bezug auf den Objektursprung fromZ NUM Z-Position des Startpunkts der CatchLine in Bezug auf den Objektursprung toX NUM X-Position des Endpunkts der CatchLine in Bezug auf den Objektursprung toY NUM Y-Position des Endpunkts der CatchLine in Bezug auf den Objektursprung toZ NUM Z-Position des Endpunkts der CatchLine in Bezug auf den Objektursprung --- #### AddCatchLineAxis Ähnlich wie AddCatchLine, aber nur andere CatchPointAxis können an dieser Stelle einrasten. Es wird zusätzlich noch eine Achse angegeben. Das einrastende Objekt wird mit seiner CatchLineAxis Achse so ausgerichtet, das beide Achsen in Übereinstimmung kommen. Die Rotation um diese Achse ist jedoch unspezifiziert Aufruf RUN public\lib3D.ADDCATCHLINEAXIS(nID, "Name" , "*", 0, 0, 0, 100, 0, 0, 0, 1, 0) Parameter nID NUM ID des Objekts, wo ein CatchLineAxis angefügt werden sollte sName STRING Name der CatchLineAxis sMaske STRING Vergleichsmaske (siehe AddCatchPoint) fromX NUM X-Position des Startpunkts der CatchLine in Bezug auf den Objektursprung fromY NUM Y-Position des Startpunkts der CatchLine in Bezug auf den Objektursprung fromZ NUM Z-Position des Startpunkts der CatchLine in Bezug auf den Objektursprung toX NUM X-Position des Endpunkts der CatchLine in Bezug auf den Objektursprung toY NUM Y-Position des Endpunkts der CatchLine in Bezug auf den Objektursprung toZ NUM Z-Position des Endpunkts der CatchLine in Bezug auf den Objektursprung pRefX NUM X-Referenzvektor der Achse (-1, 0 oder 1) pRefY NUM Y-Referenzvektor der Achse (-1, 0 oder 1) pRefZ NUM Z-Referenzvektor der Achse (-1, 0 oder 1) --- #### AddCatchLineOrientation Ähnlich wie AddCatchLine, aber nur andere CatchpointOrientation können an der angegebenen Position einrasten und die Einrastposition des Objekts ist völlig festgelegt. Aufruf RUN public\lib3D.ADDCATCHLINEORIENTATION(nID, "Name", "*", 0, 0, 0, 100, 0, 0, 0, 1, 0, 0, 1, 0) Parameter nID NUM ID des Objekts, wo ein CatchLineOrientation angefügt werden soll sName STRING Name der CatchLineOrientation sMaske STRING Vergleichsmaske (siehe AddCatchPoint) fromX NUM X-Position des Startpunkts der CatchLineOrientation in Bezug auf den Objektursprung fromY NUM Y-Position des Startpunkts der CatchLineOrientation in Bezug auf den Objektursprung fromZ NUM Z-Position des Startpunkts der CatchLineOrientation in Bezug auf den Objektursprung toX NUM X-Position des Endpunkts der CatchLineOrientation in Bezug auf den Objektursprung toY NUM Y-Position des Endpunkts der CatchLineOrientation in Bezug auf den Objektursprung toZ NUM Z-Position des Endpunkts der CatchLineOrientation in Bezug auf den Objektursprung pXRefX NUM X-Referenzvektor der X-Achse (-1, 0 oder 1) pXRefY NUM Y-Referenzvektor der X-Achse (-1, 0 oder 1) pXRefZ NUM Z-Referenzvektor der X-Achse (-1, 0 oder 1) pYRefX NUM X-Referenzvektor der Y-Achse (-1, 0 oder 1) pYRefY NUM Y-Referenzvektor der Y-Achse (-1, 0 oder 1) pYRefZ NUM Z-Referenzvektor der Y-Achse (-1, 0 oder 1) --- #### CatchAlign Mit CatchAlign kann man einen Catchpoint (Fankpunkt/Fanglinie) an einem anderen Catchpoint (Fangpunkt/Fanglinie) andocken lassen. Aufruf RUN public\lib3D.CATCHALIGN(nID1, "CP1", nID2, "CP1") Parameter nID1 NUM ID des ersten Objektes an welches das zweite Objekt angedockt werden soll sCpName1 STRING Name des Catchpoints des ersten Objektes nID2 NUM ID des zweiten Objektes welches an das erste angedockt werden soll. sCpName2 STRING Name des Catchpoints des zweiten Objektes --- #### AddAllCatchers Weist einem Objekt an all seinen Ecken und Kanten Catchpoints bzw. Catchlinien zu Aufruf RUN public\lib3D.ADDALLCATCHERS(nID, "*", "*") Parameter nID NUM ID des Objekts, wo Catchpoints und Catchlines angefügt werden sollen pMaskLines STRING Vergleichsmaske der Catchlines pMaskPoints STRING Vergleichsmaske der Catchpoints --- #### AddPickPoint Gibt dem 3D-OCX einen Pickpoint (Bemaßungspunkt) bekannt. Werden mehr als zwei Pickpoints erstellt, so wird in der Grafikanzeige die Bemaßungsfunktion aktiviert. Aufruf RUN public\lib3D.ADDPICKPOINT(nId, "Pickpoint", 0, -150, 0) Parameter nID NUM ID des Pickpoints sName STRING Name des Pickpoints posX NUM Absolute X-Koordinate posY NUM Absolute Y-Koordinate posZ NUM Absolute Z-Koordinate --- ### METHODEN FÜR OBJEKTATTRIBUTE #### CreateStrAttribute Für ein Objekt oder eine Objektgruppe wird ein neues Attribut von Typ "STRING" erzeugt. Aufruf RUN public\lib3D.CREATESTRATTRIBUTE(nId, "Attributname") Parameter nID NUM ID des Objekts, wofür das Attribut erzeugt wird sAttributname STRING Name des Attributes vom Typ String --- #### SetStrAttribute Einem Attribut von Typ "STRING" eines Objekts wird ein Wert zugewiesen. Aufruf RUN public\lib3D.SETSTRATTRIBUTE(nId, "Attributname", "Attributstring") Parameter nID NUM ID des Objekts sAttributname STRING Name des Attributes sAttributvalue STRING Wert des Attributes --- #### GetStrAttribute Liefert den Wert eines Attributs vom Typ "STRING" eines Objekts. Aufruf RUN public\lib3D.GETSTRATTRIBUTE(nId, "Attributname", sValue) Parameter nID NUM ID des Objekts sAttributname STRING Name des Attributes sValue STRING Wert des Attributes --- #### CreateDoubleAttribute Für ein Objekt oder eine Objektgruppe wird ein neues Attribut von Typ "DOUBLE" erzeugt. Aufruf RUN public\lib3D.CREATEDOUBLEATTRIBUTE(nId, "Attributname") Parameter nID NUM ID des Objekts, wofür das Attribut erzeugt wird sAttributname STRING Name des Attributes vom Typ DOUBLE --- #### SetDoubleAttribute Einem Attribut von Typ "DOUBLE" eines Objekts wird ein Wert zugewiesen. Aufruf RUN public\lib3D.SETDOUBLEATTRIBUTE(nId, "DName", dAttribD) Parameter nID NUM ID des Objekts sAttributname STRING Name des Attributes dAttribD NUM Wert des Double-Attributes --- #### GetDoubleAttribute Liefert den Wert eines Attributs vom Typ "DOUBLE" eines Objekts. Aufruf RUN public\lib3D.GETDOUBLEATTRIBUTE(nId, "Attributname", dValue) Parameter nID NUM ID des Objekts sAttributname STRING Name des Attributes dValue STRING Wert des Double-Attributes --- #### CreateLongAttribute Für ein Objekt oder eine Objektgruppe wird ein neues Attribut von Typ "LONG" erzeugt. Aufruf RUN public\lib3D.CREATELONGATTRIBUTE(nId, "Attributname") Parameter nID NUM ID des Objekts, wofür das Attribut erzeugt wird sAttributname STRING Name des Attributes vom Typ LONG --- #### SetLongAttribute Einem Attribut von Typ "LONG" eines Objekts wird ein Wert zugewiesen. Aufruf RUN public\lib3D.SETLONGATTRIBUTE(nId, "DName", lAttribD) Parameter nID NUM ID des Objekts sAttributname STRING Name des Attributes lAttribD NUM Wert des Long-Attributes --- #### GetLongAttribute Liefert den Wert eines Attributs vom Typ "LONG" eines Objekts. Aufruf RUN public\lib3D.GETLONGATTRIBUTE(nId, "Attributname", dValue) Parameter nID NUM ID des Objekts sAttributname STRING Name des Attributes lValue STRING Wert des Long-Attributes --- ### ZUSÄTZLICHE METHODEN DER LIB3D.BAS #### CreateMaterial Mit dieser Methode kann man Texturen dynamisch in der Datei material.col anlegen Aufruf RUN public\lib3D.CREATEMATERIAL(nID, "Glas1", 100, 100, "HT\Glas\Glas1.JPG") Parameter nID NUM ID des erzeugten Materials sMaterialName STRING Name des Materials, welcher später mit SetElementMaterial aufgerufen werden kann. nSizeB NUM Bildbreite - Größe der Textur im Realmaß (mm) nSizeH NUM Bildhöhe - Größe der Textur im Realmaß (mm) sTextureFile STRING Angabe des Pfades mit Dateiname und Endung zur Textur ausgehend von \MasterData\iss_\OBJ\ z.B.: "IMG\Glas1.JPG" Enthält diese Angabe einen Leerstring, so bedeutet dies, das diesem Material keine Textur zugeordnet ist. nMappingMode NUM 0 … Linear 1 … zylindrisch 2 … sphärisch nProjection NUM 1 … entlang der X-Achse 2 … entlang der Y-Achse 3 … entlang der Z-Achse nScaleToFit NUM 0 … pnSizeBreite und pnSizeBreite sind gültig (Standard) 1 … pnSizeBreite und pnSizeBreite sind ungültig. Die Textur wird so auf das Objekt projiziert, das sie genauso groß wie die umhüllende Box des Objektes ist. bUsePixelMask BOOL FALSE … Keine Pixelmask TRUE … das Pixel in der linken unteren Ecke dient als Maskenfarbe. Alle Pixel des Bildes, welche die gleiche Farbe aufweisen, werden dadurch dann durchsichtig gerendert. --- #### SaveScenery Exportiert die aktuelle Szenerie als BMP, JPG oder PNG. Aufruf RUN public\lib3D.SAVESCENERY(sFName, "BMP", 1000, 1000, false) Parameter sFName STRING Vollständiger Name der Datei (Pfad + Name + Endung) sExtension STRING Endung der Datei, "BMP", "JPG" oder "PNG" nWidth NUM Breite in Pixel, 0 bedeutet Originalgröße nHeight NUM Höhe in Pixel, 0 bedeutet Originalgröße bCrop BOOL False … Die Größe der Grafik entspricht exakt nWidth und nHeight True … Die Größe der Grafik wird auf die reale Größe gestutzt --- #### DeleteTextureCoordinates Löscht die Texturkoordinaten für extrudierte Objekte. Um eine Textur auf ein Objekt zulegen gibt es prinzipiell zwei Möglichkeiten: 1) Die Textur steuert wie sie aufgetragen werden soll 2) Das Objekt steuert wie die Textur aufzubringen ist Die Variante 1 ist im Allgemeinen einfacher zu benutzen und erfordert vom Programmierer und Datenersteller auch weniger Aufwand. Im einfachsten Fall erfolgt die Projektion in der Art eines Diaprojektors, der sein Bild aus einer bestimmten Koordinatenachse auf das Objekt wirft. Die Variante 2 ist dagegen komplizierter. Hier trägt die Geometrie selbst die Information, welcher Punkt der Textur auf welchem Raumpunkt der Geometrie zu liegen kommen soll. Diese Information nennt man die Texturkoordinaten. Standardmethoden des Kernels wie Box, Cylinder, Cone, Torus oder dergleichen enthalten keine Texturkoordinaten im Gegensatz zu extrudierten Objekten. Diese verwenden Textur-koordinaten um Texturen größenrichtig aufzubringen. Eine Verwendung einer Standardprojektion ist im Allgemeinen hier nicht zielführend. Jedoch kann es in bestimmten Fällen durchaus sinnvoll sein auch bei extrudierten Objekten oder bei zugeladenen Objekten die Texturkoordinaten enthalten, diese zu entfernen und auf eine Standardprojektion nach Variante 1 zurückzuschalten. Aufruf RUN public\lib3D. DELETETEXTURECOORDINATES (nId) Parameter nID NUM ID des Objekts --- #### DrawArrow Erzeugt einen Pfeil mit RotExtrusion, ist jedoch besser public\GraphProcs.CreateSymbolOutline zu verwenden, da diese Methode mehr Möglichkeiten bietet. Aufruf RUN public\lib3D.DRAWARROW(nId, 200, 50) Parameter nID NUM ID des Objekts nLength NUM Länge des Pfeiles nDM NUM Durchmesser des Pfeiles nLayer NUM Optional, Layer des Objekts --- #### DrawArrowSpezial Erzeugt einen Pfeil mit RotExtrusion, jedoch mit mehr Einstellungsmöglichkeiten als DrawArrow Aufruf RUN public\lib3D.DRAWARROWSPEZIAL(nId, "R", 300, 100, 50, 20) Parameter nID NUM ID des Objekts sDirection STRING Richtung, „L“ Pfeil schaut nach links, „R“ Pfeil schaut nach rechts nTotalLength NUM Gesamtlänge nHeadLength NUM Pfeilspitzenlänge nHeadHeight NUM Pfeilspitzendurchmesser nArrowHeight NUM Durchmesser nLayer NUM Optional, Layer des Objekts --- #### pSPLIT Splittet eine 2D-Outline in zwei Teile, der Unterschied zu Split() ist das bei vertikalerTeilung immer die linke gesplittete 2D-Outline und bei einer horizontalen Teilung immer die untere gesplittete 2D-Outline als erstes zurückgegeben wird. Es muss stammdatenseitig sichergestellt sein, das sich nie die Splittgerade mit einem Streckenzug deckt. Aufruf RUN public\lib3D.PSPLIT(lstlstSplit, lOutline, segGerade) !Ergebnis: lstlstSplit[1] -> linke 2D-Outline ! lstlstSplit[2] -> rechte 2D-Outline Parameter lstlstSplit LIST Liste die Outlines enthält lOutline LIST Das Profil (Outline) welche geteilt werden soll segGerade SEGMENT Streckenzug der die Teilungsgerade definiert --- #### SetMouseMode Mit der Methode kann man den Mauszeiger verändern. Wird der Vollständigkeit halber erwähnt, sollte aber nicht verwendet werden. Aufruf RUN public\lib3D.SETMOUSEMODE(nMode) Parameter nMode NUM Darstellungsmodus des Mauszeiger (ready, busy, …) ---