- 13 May 2024
- 27 Minuten zu lesen
- Drucken
- DunkelLicht
- pdf
Standardprozeduren
- Aktualisiert am 13 May 2024
- 27 Minuten zu lesen
- Drucken
- DunkelLicht
- pdf
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:
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.
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
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
<ISS>\MasterData\iss_<Eigner><Stammdatenversion>\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, …)