LitDev 1.2.24.0 DE
http://litdev.uk/LitDev.De.html Extension API

LD3DView LDArray LDBits LDBlueTooth LDCall
LDChart LDClient LDClipboard LDColours LDCommPort
LDController LDControls LDCursors LDDataBase LDDateTime
LDDebug LDDialogs LDDictionary LDEffect LDEmail
LDEncryption LDEvents LDFastArray LDFastShapes LDFigures
LDFile LDFocus LDftp LDGeography LDGraph
LDGraphicsWindow LDHashTable LDHID LDIcon LDImage
LDInline LDIOWarrior LDList LDLogic LDMath
LDMathX LDMatrix LDMusic LDNetwork LDPhysics
LDProcess LDQueue LDRegex LDResources LDScrollBars
LDSearch LDServer LDSettings LDShapes LDShell
LDSort LDSound LDSpeech LDStatistics LDStopwatch
LDText LDTextWindow LDTimer LDTranslate LDUnits
LDUtilities LDVector LDWaveForm LDWebCam LDWindows
LDxml LDZip

LD3DView
3D Visualisierung im GraphicsWindow.

Standardkoordinaten (Rechtssystem) haben folgende Richtungen und keinen Bezug zu GraphicsWindow Koordinaten:
x - Links 0 Rechts +
y - Unten 0 Oben +
z - Hinten 0 Vorne +

Weitere Details zu untergeordneten Methoden s. http://msdn.microsoft.com/library/ms747437.aspx (Übersicht 3D-Grafiken).
Einige Add...-Methoden verwenden HelixToolkit (rekompiliert und angepasst für SB, http://www.helix-toolkit.org).
S.a. 'LDVector' für algebraische Vektormethoden.

example 3D-samples\*.sb

http://blogs.msdn.microsoft.com/smallbasic/2016/06/19/3d-visualisation/
http://docs.microsoft.com/dotnet/framework/wpf/graphics-multimedia/3-d-graphics-overview
http://msdn.microsoft.com/library/system.windows.media.media3d.aspx
http://msdn.microsoft.com/library/system.windows.controls.viewport3d.aspx
http://csharphelper.com/blog/2014/10/understand-three-dimensional-drawing-with-wpf-xaml-and-c
http://paulbourke.net
https://ebooks-it.org/0735623945-ebook.htm (3DProgramming For Windows.chm)

'Demo
view = LD3DView.AddView(gw,gh, "")
LDControls.AllowDrop(view)
LD3DView.AutoControl("","", 10,0)
...


AddAmbientLight AddArrow AddBackImage
AddCone AddCube AddDirectionalLight
AddGeometry AddIcosahedron AddImage
AddPipe AddPointLight AddPyramid
AddRectangle AddRevolute AddSphere
AddSpotLight AddTube AddView
AnimateRotation AnimateRotation2 AnimateTranslation
AutoControl AutoControl2 BoundingBox
CameraProperties CloneObject Freeze
GetCameraDirection GetCameraPosition GetCameraUpDirection
GetPosition HitTest LastRotationCompleted
LastTranslationCompleted LoadModel ModifyObject
MoveCamera QueuedRotationCompleted QueuedTranslationCompleted
ResetCamera ResetMaterial ReverseNormals
RotateGeometry RotateGeometry2 RotateGeometry3
RotationCompleted ScaleGeometry SetBackMaterial
SetBillBoard SetCentre SpecularExponent
SwapUpDirection TranslateGeometry TranslationCompleted

AddAmbientLight(shapeName,colour)
Fügt eine umgebende Lichtquelle hinzu, für gleichmäßige Beleuchtung aller Objekte aus allen Richtungen. Oft mit Farbe geringer Helligkeit zB. (Light)Gray, "#404040". Ungeeignet für spiegelnde Materialien "S" (Intern: Light#).
shapeName Der Name der 3DView Shape.
colour Die Lichtfarbe (zB. "#808040").
returns Der 3DView Lichtname.
example Reflektierter Farbwert = Material Farbwert * Licht Farbwert / 255

AddArrow(shapeName,length,diameter,arrowLength,arrowDiameter,divisions,colour,materialType)
Fügt ein Pfeil/Vektor Geometrieobjekt hinzu, aufwärts gerichtet (+y, stehend auf x,z Ebene) beginnend an 0,0,0 (Intern: Geometry#).
shapeName Der Name der 3DView Shape.
length Die Gesamtlänge des Pfeils (<0 Richtungsumkehr).
diameter Der Schaftdurchmesser des Pfeils.
arrowLength Die Länge der Pfeilspitze (Standard: 0, <0 Richtungsumkehr).
arrowDiameter Der untere Durchmesser der Pfeilspitze (Standard: diameter, Zylinder).
divisions Die Anzahl radialer Teilbereiche+1 für den Pfeil (>2, Standard: 18, nicht "").
colour Die Farbe oder ein Gradientpinsel (Brush) für das Objekt.
materialType Der Materialtyp:
"E" Emissiv, konstante Helligkeit
"D" Diffus, beeinflusst durch Licht
"S" Spiegelnd, zusätzliche Glanzpunkte
"" Ohne, keine Anzeige

returns Der Name des Geometrieobjekts in der 3DView.
example vY = AddArrow(view, 8,0.1, 1,0.2, 18, "Lime","E")
TranslateGeometry(view, vY, 0,-4,0) 'y-Achse/Vektor

AddArrow(view, 10,0.1, "","", 18, "Red","D") 'Stab
AddArrow(view, 10,1, 10,1, 3, "Red","D") '2D-Kegel/Dreieck
AddArrow(view, 10,10, 10,10, 4, "Red","D") 'Tetraeder
AddArrow(view, 10,1, 10,"", 18, "Red","D") '2D-Kreis
AddArrow(view, -1,1, 10,"", 18, "Red","D") 'Rohr,Zylindermantel
AddArrow(view, 1,1, 10,"", 18, "Red","D") 'Vollzylinder


AddBackImage(shapeName,geometryName,textures,imageName,materialType)
Setzt/Ändert ein Bild/Farbe/Brush für die Rückseite auf einem Geometrieobjekt (Rückseite zur Auswärtsnormalen). S.a. 'SetBackMaterial' bzw. 'AddImage'.
Eine geometrische 'Ansicht' kann verschiedene Segmentbilder in einem Bild beinhalten.

shapeName Der Name der 3DView Shape.
geometryName Der Name des Geometrieobjekts, zB. model[1].
textures Eine Leerzeichen- oder Doppelpunkt- begrenzte Liste von 2D Texturvektoren für jeden Gitterpunkt (points).
Für jeden Gitterpunkt 2 Werte u,v [0,1] welche die x,y Abbildung des Bildes zum Knoten bestimmen (zB. "0 1:1 1:1 0:0 0" für Gesamtbild auf 4eck).
Kann "" (Standard) sein, wenn die Textur zuvor bereits gesetzt wurde.

imageName Das im Geometrieobjekt zu ladende Bild (Rückgabewert von ImageList.LoadImage, lokale oder Netzwerk- Bilddatei), bzw. eine Farbe oder Gradientpinsel (Brush).
materialType Der Materialtyp:
"E" Emissiv, konstante Helligkeit
"D" Diffus, beeinflusst vom Licht
"S" Spiegelnd, zusätzliche Glanzpunkte
"" Ohne, keine Anzeige

example s. AddImage

AddCone(shapeName,baseRadius,topRadius,height,divisions,colour,materialType)
Fügt ein solides Kegel(stumpf) Geometrieobjekt hinzu, aufrecht (+y, stehend auf x,z Ebene) mit der Basis zentriert in 0,0,0 (Intern: Geometry#).
Info: Ein Zylinder entspricht einem Konus mit baseRadius = topRadius.

shapeName Der Name der 3DView Shape.
baseRadius Der Radius der Grundfläche.
topRadius Der obere Radius:
< 0 Verdrehung um y
= 0 Kegel (Standard)
> 0 Kegelstumpf
= baseRadius Zylinder

height Die Höhe des Konus (<0 Richtungsumkehr).
divisions Die Anzahl radialer Teilbereiche+1 für den Konus (>2, Standard: 0).
colour Die Farbe oder ein Gradientpinsel (Brush) für das Objekt.
materialType Der Materialtyp:
"E" Emissiv, konstante Helligkeit
"D" Diffus, beeinflusst durch Licht
"S" Spiegelnd, zusätzliche Glanzpunkte

returns Der Name des Geometrieobjekts in der 3DView.
example AddCone(view, 1,0(0.5/1), 2, 3, "Red","D") 'Dreieck(Trapez/Quadrat)

AddCube(shapeName,sideLength,colour,materialType)
Fügt ein Würfel Geometrieobjekt hinzu, zentriert in 0,0,0 (Intern: Geometry#).
shapeName Der Name der 3DView Shape.
sideLength Die Kantenlänge für den Würfel (<0 Normalenumkehr).
colour Die Farbe oder ein Gradientpinsel (Brush) für das Objekt.
materialType Der Materialtyp:
"E" Emissiv, konstante Helligkeit
"D" Diffus, beeinflusst durch Licht
"S" Spiegelnd, zusätzliche Glanzpunkte
"" Ohne, keine Anzeige

returns Der Name des Geometrieobjekts in der 3DView.
example Euler Polygonsatz E-K+F = 2
Ecken-Kanten+Flächen = 8-12+6 = 2


AddDirectionalLight(shapeName,colour,xDir,yDir,zDir)
Fügt eine gerichtete Lichtquelle hinzu, zur Beleuchtung durch weit entfernte Lichtquelle aus einer Richtung zB. Sonnenlicht (Intern: Light#).
shapeName Der Name der 3DView Shape.
colour Die Lichtfarbe (zB. "#FFFF80", "#C0C0C0" bzw. "Silver").
xDir Der x-Richtungsvektor [-1,1] entlang dem der Lichteffekt wirkt (Standard: 0).
yDir Der y-Richtungsvektor [-1,1] entlang dem der Lichteffekt wirkt (Standard: 0).
zDir Der z-Richtungsvektor [-1,1] entlang dem der Lichteffekt wirkt (Standard: -1).
returns Der 3DView Lichtname.

AddGeometry(shapeName,points,indices,normals,colour,materialType)
Fügt ein math. Geometrieobjekt hinzu. Position und Dimension entsprechend 'points' Definition. (Intern: Geometry#).
s. http://sol.gfxile.net/sphere/index.html (Sphere Mesh Creation).

shapeName Der Name der 3DView Shape.
points Eine Leerzeichen- oder Doppelpunkt- begrenzte Liste aller Gitter-/Eckpunkt-Koordinaten (zB. "x0:y0:z0 x1:y1:z1 ..").
indices Eine Leerzeichen- oder Doppelpunkt- begrenzte Liste von Eckpunkt-Indizes für jedes Dreieck (ab 0, im Gegenuhrzeigersinn je Außenfläche).
normals Optionale Leerzeichen- oder Doppelpunkt- begrenzte Liste von Auswärtsnormalen für jeden Gitterpunkt (points) oder "".
colour Die Farbe oder ein Gradientpinsel (Brush) für das Objekt.
materialType Der Materialtyp:
"E" Emissiv, konstante Helligkeit
"D" Diffus, beeinflusst vom Licht
"S" Spiegelnd, zusätzliche Glanzpunkte
"" Ohne, keine Anzeige

returns Der Name des neuen Geometrieobjekts in der 3DView bei Erfolg, sonst "" und Fehlermeldung.
example 'Tetraeder
'Kante 2, zentriert im Ursprung
pts= "1:0:-.707 -1:0:-.707 0:1:.707 0:-1:.707"
'Kante 1, Basis zentriert im Ursprung
pts= "0:.82:0 0:0:.58 .5:0:-.29 -.5:0:-.29"
'schräg liegend
pts= "1:1:1 1:-1:-1 -1:1:-1 -1:-1:1"
'pts= "1:1:-1 -1:-1:-1 -1:1:1 1:-1:1"
idcs= "0:1:2 0:2:3 0:3:1 1:3:2"
'Pyramide Höhe h, Basislänge 2*s
pts= "0:h:0 -s:0:-s -s:0:s s:0:s s:0:-s"
idcs= "0:1:2 0:2:3 0:3:4 0:4:1 1:3:2 1:4:3"


AddIcosahedron(shapeName,radius,colour,materialType)
Fügt ein regelmäßiges Ikosaeder (20Flächner) Geometrieobjekt hinzu, zentriert in 0,0,0 (Intern: Geometry#).
shapeName Der Name der 3DView Shape.
radius Der Radius des Ikosaeder (Umkugelradius).
colour Die Farbe oder ein Gradientpinsel (Brush) für das Objekt.
materialType Der Materialtyp:
"E" Emissiv, konstante Helligkeit
"D" Diffus, beeinflusst durch Licht
"S" Spiegelnd, zusätzliche Glanzpunkte
"" Ohne, keine Anzeige

returns Der Name des Geometrieobjekts in der 3DView.
example Euler Polygonsatz E-K+F = 2
Ecken-Kanten+Flächen = 12-30+20 = 2


AddImage(shapeName,geometryName,textures,imageName,materialType)
Setzt/Ändert ein Bild/Farbe/Brush auf einem Geometrieobjekt (Seite der Auswärtsnormalen). S.a. 'ResetMaterial' bzw. 'AddBackImage'.
Eine 'geometrische Ansicht' kann verschiedene Segmentbilder in einem Bild beinhalten.
s.a. LDControls.AllowDrop

shapeName Der Name der 3DView Shape.
geometryName Der Name des Geometrieobjekts, zB. model[1].
textures Eine Leerzeichen- oder Doppelpunkt- begrenzte Liste von 2D Texturvektoren für jeden Gitterpunkt (points).
Für jeden Gitterpunkt 2 Werte u,v [0,1] welche die x,y Abbildung des Bildes zum Knoten bestimmen (zB. "0 1:1 1:1 0:0 0" für Gesamtbild auf 4eck).
Kann "" (Standard) sein, wenn die Textur bereits gesetzt ist.
'Bild/Brush Basiskoordinaten u,v:
0,0 1,0 +-> u(x)
0,1 1,1 |
v v(y)

imageName Das im Geometrieobjekt zu ladende Bild (Rückgabewert von ImageList.LoadImage, lokale oder Netzwerk- Bilddatei), bzw. eine Farbe oder Gradientpinsel (Brush).
materialType Der Materialtyp:
"E" Emissiv, konstante Helligkeit
"D" Diffus, beeinflusst vom Licht
"S" Spiegelnd, zusätzliche Glanzpunkte
"" Ohne, keine Anzeige

example http://paulbourke.net/texturelibrary
http://paulbourke.net/miscellaneous/cubemaps
http://archivetextures.net
http://www.reinerstilesets.de
http://sftextures.com

'Vollbild auf 4eck (Breite w, Höhe h, y Pos)
pt4= "-w:y:h w:y:h w:y:-h -w:y:-h"
pt6= "-w:y:h w:y:h w:y:-h -w:y:h w:y:-h -w:y:-h"
ptN= LDText.Replace(ptN, "w",w/2)
ptN= LDText.Replace(ptN, "h",h/2)
ptN= LDText.Replace(ptN, "y",y)
id4= "0:1:2 3:4:5"
id6= "0:1:2 0:2:3"
tx4= "0:1 1:1 1:0 0:0"
tx6= "0:1 1:1 1:0 0:1 1:0 0:0"
rec= AddGeometry(view, ptN,idN,"", col,"D")
LD3DView.AddImage(view, rec,txN, img,"D")

0:1 1:1 1:0 0:0 'Strd (tx4)
1:1 1:0 0:0 0:1 '90° reRo
1:0 0:0 0:1 1:1 '180° Ro
0:0 0:1 1:1 1:0 '270° reRo = 90° liRo
1:1 0:1 0:0 1:0 'flipY
0:1 0:0 1:0 1:1 'flipY 90° reRo
0:0 1:0 1:1 0:1 'flipY 180° Ro = flipX
1:0 1:1 0:1 0:0 'flipY 270° reRo = flipY 90° liRo


AddPipe(shapeName,length,innerDiameter,outerDiameter,divisions,colour,materialType)
Fügt ein (Hohl)Zylinder/Rohr Geometrieobjekt hinzu, aufrecht (+y, stehend auf x,z Ebene) mit der Basis zentriert in 0,0,0 (Intern: Geometry#).
shapeName Der Name der 3DView Shape.
length Die Länge des Rohres/Prismas (<0 Richtungsumkehr).
innerDiameter Der innere Rohrdurchmesser (0 Vollzylinder/-prisma).
outerDiameter Der äußere Rohrdurchmesser:
= innerD. Mantel
< innerD. umgestülpt

divisions Die Anzahl radialer Teilbereiche+1 für das Rohr (>2, Standard: 0).
colour Die Farbe oder ein Gradientpinsel (Brush) für das Objekt.
materialType Der Materialtyp:
"E" Emissiv, konstante Helligkeit
"D" Diffus, beeinflusst durch Licht
"S" Spiegelnd, zusätzliche Glanzpunkte
"" Ohne, keine Anzeige

returns Der Name des Geometrieobjekts in der 3DView.

AddPointLight(shapeName,colour,xPos,yPos,zPos,range)
Fügt eine ungerichtete Punktlichtquelle hinzu, begrenzte Reichweite, Intensität nimmt mit Entfernung ab (Intern: Light#).
shapeName Der Name der 3DView Shape.
colour Die Lichtfarbe.
xPos Die x-Position des Lichtes.
yPos Die y-Position des Lichtes.
zPos Die z-Position des Lichtes.
range Der Lichtwirkungsbereich in alle Richtungen (Entfernung bis zu welcher der Lichteffekt wirkt).
returns Der 3DView Lichtname.

AddPyramid(shapeName,sideLength,height,colour,materialType)
Fügt ein Pyramide Geometrieobjekt hinzu, aufrecht (+y, stehend auf x,z Ebene) mit der Basis zentriert in 0,0,0 (Intern: Geometry#).
shapeName Der Name der 3DView Shape.
sideLength Die Kantenlänge der quadratischen Basis.
height Die Höhe (<0 weist nach -y, umgekehrte Normalen).
colour Die Farbe oder ein Gradientpinsel (Brush) für das Objekt.
materialType Der Materialtyp:
"E" Emissiv, konstante Helligkeit
"D" Diffus, beeinflusst durch Licht
"S" Spiegelnd, zusätzliche Glanzpunkte
"" Ohne, keine Anzeige

returns Der Name des Geometrieobjekts in der 3DView.

AddRectangle(shapeName,width,height,colour,materialType)
Fügt ein Rechteck (einseitige Ebene) Geometrieobjekt hinzu, zentriert in 0,0,0, liegt in x,y Ebene mit Höhe z=0, Normale in +z Richtung (Intern: Geometry#).
shapeName Der Name der 3DView Shape.
width Die Breite des Rechtecks (entlang x).
height Die Höhe des Rechtecks (entlang y).
colour Die Farbe oder ein Gradientpinsel (Brush) für das Objekt (nur Seite der Auswärtsnormalen, Gegenseite wirkt transparent).
materialType Der Materialtyp:
"E" Emissiv, konstante Helligkeit
"D" Diffus, beeinflusst durch Licht
"S" Spiegelnd, zusätzliche Glanzpunkte
"" Ohne, keine Anzeige

returns Der Name des Geometrieobjekts in der 3DView.
example AddRectangle(view, 2,2, "Red","D")
'Alternativ 2 Dreiecke:
pts = "-1:-1:0 1:-1:0 1:1:0 -1:1:0"
idcs = "0:1:3 1:2:3"
AddGeometry(view, pts,idcs,"", "Red","D")


AddRevolute(shapeName,path,divisions,colour,materialType)
Fügt ein Revolute Geometrieobjekt hinzu. Dies ist eine (offene/geschlossene) Oberfläche beginnend an 0,0,0 und aufwärts gerichtet.
Die Form ist definiert durch eine Punktemenge (y,z), wobei y die vertikale Distanz entlang der Oberfläche ab 0 beschreibt, z ist der Mantelradius.

shapeName Der Name der 3DView Shape.
path Eine Leerzeichen- oder Doppelpunkt- begrenzte Liste von 2D Punktkoordinaten zur Beschreibung der Revolutenform, zB. "y1:r1 y2:r2 ..." (y Höhe, r Umkreisradius).
divisions Die Anzahl radialer Teilbereiche+1 (>2, zB. 3 Fläche, Standard: 10, beeinflusst Anzahl der Dreiecke und Glattheit).
colour Die Farbe oder ein Gradientpinsel (Brush) für das Objekt.
materialType Der Materialtyp:
"E" Emissiv, konstante Helligkeit
"D" Diffus, beeinflusst durch Licht
"S" Spiegelnd, zusätzliche Glanzpunkte
"" Ohne, keine Anzeige

returns Der Name des Geometrieobjekts in der 3DView.
example '3-stöckiger Baum
pfad = "0:0 0:0.5 1:0.5 1:3 3:1 3:2.5 5:1 5:2 8:0"
'Regelm. n-Prisma/-(Doppel)Pyramide
pfad= "0:0 0:r h:r h:0"
pfad= "0:0 0:r h:0" 'Pyram
pfad= "0:0 h:r H:0" 'DoPyr
pfad= "-1:0 0:1 1:0" 'Oktaeder
AddRevolute(view, pfad,n+1, "Red","D")
'Pentagon
AddRevolute(view, "0 0:0 1:0 0", 6, "Red","D")


AddSphere(shapeName,radius,divisions,colour,materialType)
Fügt ein Kugel Geometrieobjekt zentriert in 0,0,0 hinzu (Intern: Geometry#).
shapeName Der Name der 3DView Shape.
radius Der Kugelradius (<0 Normalenumkehr).
divisions Die Anzahl der Raumbereiche (>1, Standard: 10, beeinflusst Anzahl der Dreiecke und Glattheit, zB. 2 zeigt Oktaeder).
colour Die Farbe oder ein Gradientpinsel (Brush) für das Objekt.
materialType Der Materialtyp:
"E" Emissiv, konstante Helligkeit
"D" Diffus, beeinflusst durch Licht
"S" Spiegelnd, zusätzliche Glanzpunkte
"" Ohne, keine Anzeige

returns Der Name des Geometrieobjekts in der 3DView.

AddSpotLight(shapeName,colour,xPos,yPos,zPos,xDir,yDir,zDir,angle,range)
Fügt eine gerichtete Punktlichtquelle hinzu, begrenzter Lichtkegel und Reichweite, Intensität nimmt mit Entfernung ab (Intern: Light#).
shapeName Der Name der 3DView Shape.
colour Die Lichtfarbe.
xPos Die x-Position des Lichtes.
yPos Die y-Position des Lichtes.
zPos Die z-Position des Lichtes.
xDir Der x-Richtungsvektor [-1,1] der Lichtprojektion (Standard: 0).
yDir Der y-Richtungsvektor [-1,1] der Lichtprojektion (Standard: 0).
zDir Der z-Richtungsvektor [-1,1] der Lichtprojektion (Standard: -1).
angle Der Lichtkegel des Strahls [Grad].
range Der Lichtwirkungsbereich (Entfernung bis zu welcher der Lichteffekt wirkt).
returns Der 3DView Lichtname.

AddTube(shapeName,path,diameter,divisions,colour,materialType)
Fügt ein rohr-/schlauchförmiges Geometrieobjekt hinzu (Intern: Geometry#).
shapeName Der Name der 3DView Shape.
path Eine Leerzeichen- oder Doppelpunkt- begrenzte Liste von 3D Punktkoordinaten, zB. "x1:y1:z1 x2:y2:z2 ...".
diameter Der Rohr-/Schlauchdurchmesser.
divisions Die Anzahl radialer Rohrbereiche (>1, Standard: 10, beeinflusst Anzahl der Dreiecke und Glattheit).
colour Die Farbe oder ein Gradientpinsel (Brush) für das Objekt.
materialType Der Materialtyp:
"E" Emissiv, konstante Helligkeit
"D" Diffus, beeinflusst durch Licht
"S" Spiegelnd, zusätzliche Glanzpunkte
"" Ohne, keine Anzeige

returns Der Name des Geometrieobjekts in der 3DView.

AddView(width,height,performance)
Fügt eine 3DView Shape im GraphicsWindow hinzu, worin 3D Geometrieobjekte eingebunden und animiert werden können (Intern: View3D#).
width Die Breite der 3DView Shape.
height Die Höhe der 3DView Shape.
performance Vorzug von Schnelligkeit über Qualität? "True" oder "False" (Standard, 3DView fixiert auf definierte Breite/Höhe).
"True" entfernt visuelles Clipping (-> Größenänderung mit GW), 'HitTest' (nicht verwendet) und Antialias (nicht benötigt).
"False" zum Ablegen+Laden einer Bild-/3DModelldatei (s. LDControls.AllowDrop, -.FileDropped).

returns Der Name der 3DView Shape.

AnimateRotation(shapeName,geometryName,xDir,yDir,zDir,startAngle,endAngle,duration,repeats)
Setzt ein Geometrieobjekt auf animierte 3D-Rotation um einen Achsenvektor (asynchron, s. 'RotationCompleted' Ereignis).
Verwendet die zweite Rotation "R2". Die erste ist weiterhin verfügbar für eine andere Achsrotation.

shapeName Der Name der 3DView Shape.
geometryName Der Name des zu drehenden Geometrieobjekts, zB. model[1].
xDir Der x-Richtungsvektor [-1,1] der Drehachse.
yDir Der y-Richtungsvektor [-1,1] der Drehachse.
zDir Der z-Richtungsvektor [-1,1] der Drehachse.
startAngle Der Startwinkel [Grad] vom Grundzustand (Standard: 0).
endAngle Der Endwinkel [Grad] vom Grundzustand, zB. 359 (Standard: 0).
duration Die Dauer [sec] für einen Rotationszyklus start-/endAngle (0 beendet, max. 214.7).
duration = 60/umin [s] bzw.
umin = 60/duration [1/min]
loopDelay = duration/360 [s/°]

repeats Die Anzahl der Rotationszyklen, zB. 0.5 für Halbdrehung (<=0 für stetig).

AnimateRotation2(shapeName,geometryName,xDir,yDir,zDir,startAngle,endAngle,duration,repeats)
Setzt ein Geometrieobjekt auf animierte 3D-Rotation um einen Achsenvektor (asynchron, s. 'RotationCompleted' Ereignis).
Verwendet die dritte Rotation "R3". Die erste ist weiterhin verfügbar für eine andere Achsrotation.

shapeName Der Name der 3DView Shape.
geometryName Der Name des zu drehenden Geometrieobjekts, zB. model[1].
xDir Der x-Richtungsvektor [-1,1] der Drehachse.
yDir Der y-Richtungsvektor [-1,1] der Drehachse.
zDir Der z-Richtungsvektor [-1,1] der Drehachse.
startAngle Der Startwinkel [Grad] vom Grundzustand (Standard: 0).
endAngle Der Endwinkel [Grad] vom Grundzustand, zB. 359 (Standard: 0).
duration Die Dauer [sec] für einen Rotationszyklus start-/endAngle (0 beendet, max. 214.7).
duration = 60/umin [s] bzw.
umin = 60/duration [1/min]
loopDelay = duration/360 [s/°]

repeats Die Anzahl der Rotationszyklen, zB. 0.5 für Halbdrehung (<=0 für stetig).

AnimateTranslation(shapeName,geometryName,x,y,z,duration)
Setzt ein Geometrieobjekt auf animierte geradlinige 3D-Bewegung (asynchron, s. 'TranslationCompleted' Ereignis).
shapeName Der Name der 3DView Shape.
geometryName Der Name des zu bewegenden Geometrieobjekts, zB. model[1].
x Die x-Koordinate des Zielpunktes.
y Die y-Koordinate des Zielpunktes.
z Die z-Koordinate des Zielpunktes.
duration Die Dauer [sec] der Animation (0 beendet).

AutoControl(pitchRoll,shift,keyDistance,speed)
Setzt automatische Steuerung für die Kamera.
Dieser Modus ist zur allg. Kamerasteuerung, hauptsächlich zum Bewegen (Überflug) in einer 3D Szene.
Vor-|Rückwärtsbewegung per Mausrad (+Umsch/Strg Taste für 5x schneller/langsamer).
L|R Gieren (Yaw) und Auf|Ab Neigen (Pitch) Kamerabewegung mit L-Maus.
L|R Gieren mit A,D oder Links,Rechts Taste.
Vor-|Rückwärtsbewegung mit W,S oder Auf,Ab Taste.
Rollen (Drehen) Kamerabewegung mit R-Maus.
L-Doppelklick auf Objekt zur Zentrierung/Auswahl (Zentrum für Rotation R1).
R-Doppelklick zum Zurücksetzen der Aufwärts-Richtung zu y (yUp=1).
L|R Gieren (Yaw) und Auf|Ab Neigen (Pitch) Szenenbewegung mit Umsch+LMaus nach Objektwahl (worum die Szene dedreht wird).
X,Y,Z Taste setzt diese Ansichts-/Aufwärts-Richtung (Blick nach 0,0,0); +Umsch in die Gegenrichtung.

pitchRoll Auf|Ab Neigen und Rollen Bewegung erlauben? "True" oder "False" (Standard).
shift Umsch/Strg Tasten zur Maussteuerung erlauben? "True" oder "False" (Standard).
keyDistance Kameraabstand und Tastensteuerung:
>0 Kameraabstand zum Ursprung bei X,Y,Z Taste (Init: 0,0,10)
=0 blockt X,Y,Z Tasten (Standard, "")
<0 blockt auch A,D,W,S und Pfeiltasten

speed Vor/Zurück Schrittfaktor für W,Up,Rad↓ bzw. S,Down,Rad↑:
>0 zB. 0.833=1/1.2=5/6 für dStep=1
=0 blockt W,S, Up,Down, Mausrad (Standard)
<0 Gegenrichtung


AutoControl2(keyDistance,speed)
Setzt automatische Steuerung für die Kamera.
Dieser Modus ist eher für Drehen und Ansicht einer 3D Szene (Inspektion), als zum Bewegen durch die Szene.
Rein|Raus Zoom per Mausrad (+Umsch/Strg Taste für 5x schneller/langsamer).
L|R Schwenk mit A,D oder Links,Rechts Taste. Auf|Ab Schwenk mit W,S oder Auf,Ab Taste.
L-Doppelklick auf Objekt zur Zentrierung/Auswahl (Zentrum für Rotation R1).
R-Doppelklick zum Zurücksetzen der Aufwärts-Richtung zu y (yUp=1).
L|R Gieren (Yaw) und Auf|Ab Neigen (Pitch) Szenenbewegung mit LMaus nach Objektwahl (worum die Szene dedreht wird).
Rollen (Drehen) Szenenbewegung mit R-Maus.
X,Y,Z Taste setzt diese Ansichts-/Aufwärts-Richtung (Blick Richtung gewählten Zentrums); +Umsch in die Gegenrichtung.

keyDistance Kameraabstand und Tastensteuerung:
>0 Kameraabstand zum Ursprung bei X,Y,Z Taste (Init: 0,0,10)
=0 blockt X,Y,Z Tasten (Standard, "")
<0 blockt auch A,D,W,S und Pfeiltasten

speed Vor/Zurück Schrittfaktor für A,D,W,S, Pfeiltasten, Mausrad:
>0 zB. 0.833=1/1.2=5/6 für dStep=1
=0 blockt A,D,W,S, Pfeiltasten, Mausrad (Standard)
<0 Gegenrichtung


BoundingBox(shapeName,geometryName)
Ermittelt Abmessungen und Position des umgebenden Hüllkörpers für ein einzelnes Geometrieobjekt (s. GetPosition).
Dies sind die aktuellen Werte/Koordinaten (nach allen Transformationen).

shapeName Der Name der 3DView Shape.
geometryName Der Name des Geometrieobjekts.
returns Ein 6-element. Array (ab 1) folgender Dimensionen/Position bei Erfolg, sonst "FAILED":

dimX = box[1] (Breite)
dimY = box[2] (Höhe)
dimZ = box[3] (Tiefe)
minX = box[4]
minY = box[5]
minZ = box[6]


CameraProperties(shapeName,nearDistance,farDistance,angle)
Setzt den horiz. Blickwinkel der Kamera, sowie Clippingabstände (Distanz vordere/hintere Clippingebene).
Fundamentale Eigenschaften für perspektivische Kamerasicht.

shapeName Der Name der 3DView Shape.
nearDistance Der vordere Clippingabstand (kann nahes Objekt verbessern zB. Maueraufprall Erkennung).
Bei -angle ist 0.001 (Standard: 0.125, sonst >=0.001).

farDistance Der hintere Clippingabstand (kann Leistung verbessern).
Bei -angle ist unendlich (Standard, sonst >= nearDistance).

angle Der Sichtkegel der Kamera [Grad]. Beeinflusst den perspektivischen Fluchtpunkt (Standard: 60).
Falls negativ, wird eine orthographische Kamera (Parallelprojektion mit Sichtbreite -angle) verwendet (statt perspektivische Zentralprojektion).


CloneObject(shapeName,geometryName)
Erstellt eine komplette Kopie eines einzelnen Geometrieobjekts mit all seinen Eigenschaften, wie Farbe, Materal, MapImage, Pos/Drehung (Animation nicht) usw. (Intern: Geometry#+1).
shapeName Der Name der 3DView Shape.
geometryName Der Name des zu kopierenden Geometrieobjekts, zB. model[1].
returns Der Name des neuen kopierten Geometrieobjekts in der 3DView bei Erfolg, sonst "".

Freeze(shapeName,geometryName)
Einfrieren eines Geometrieobjekts zur kleinen Leistungsverbesserung. Dieses kann danach in keiner Weise modifiziert werden.
shapeName Der Name der 3DView Shape.
geometryName Der Name des einzufrierenden Geometrieobjekts, zB. model[1].
returns Nichts (Fehlermeldung bei Mißerfolg)

GetCameraDirection(shapeName)
Ermittelt die Blickrichtung der Kamera (Richtungsvektor) als Array der Komponenten "1=xDir;2=yDir;3=zDir;".
xDir*xDir + yDir*yDir + zDir*zDir = 1 (Einheitsvektor)

shapeName Der Name der 3DView Shape.
returns Ein 3-element. Array mit dem Richtungsvektor der Kamerasicht (Standard: "1=0;2=0;3=-1;").

GetCameraPosition(shapeName)
Ermittelt die Kameraposition als Array der Koordinaten "1=xPos;2=yPos;3=zPos;".
shapeName Der Name der 3DView Shape.
returns Ein 3-element. Array mit den Positionskoordinaten der Kamera (Standard: "1=0;2=0;3=10;").
example 'Radius zum Ursprung (0,0,0)
P = LD3DView.GetCameraPosition(view)
r = Math.SquareRoot(P[1]*P[1] + P[2]*P[2] + P[3]*P[3])

'Abstand 2er Punkte (Vektorlänge)
a = Math.SquareRoot(dx*dx + dy*dy + dz*dz)

'Koord. von P2 ab P,r,dir (Vektorverschiebung)
x2 = P[1] + r * dir[1]
y2 = P[2] + r * dir[2]
z2 = P[3] + r * dir[3]


GetCameraUpDirection(shapeName)
Ermittelt den Aufwärts-Richtungsvektor in der Szenenprojektion als Array der Komponenten "1=xUp;2=yUp;3=zUp;".
xUp*xUp + yUp*yUp + zUp*zUp = 1 (Einheitsvektor)

shapeName Der Name der 3DView Shape.
returns Ein 3-element. Array mit dem Aufwärts Richtungsvektor der 3DView (Standard: "1=0;2=1;3=0;").

GetPosition(shapeName,geometryName)
Ermittelt die transformierte (aktuelle) Zentrumsposition für ein bestehendes Geometrieobjekt (s. BoundingBox).
shapeName Der Name der 3DView Shape.
geometryName Der Name des Geometrieobjekts.
returns Ein 3-element. Array (ab 1) der transformierten Position bei Erfolg, sonst "FAILED":

centX = pos[1]
centY = pos[2]
centZ = pos[3]


HitTest(shapeName,x,y)
Ermittelt ein Auftreffen auf ein Geometrieobjekt in der 3DView. s. LD3DView.AddView(w,h, "").
Ein negativer Wert für eine Koordinate bezieht sich auf die Mitte der 3DView (Kameraansicht).

shapeName Der Name der 3DView Shape.
x Die x-Koordinate im GraphicsWindow (innerhalb der 3DView).
y Die y-Koordinate im GraphicsWindow (innerhalb der 3DView).
returns Ein 2-element. Array mit dem Name des Zielobjekts und seiner Entfernung (zB. "1=Geometry#;2=dist;") oder "" für keinen Treffer.
example 3D-samples\LD3DView.sb, LD3DMazeGame.sb

LastRotationCompleted
Ermittelt den Name des Geometrieobjekts welches zuletzt eine animierte Volldrehung beendete.

LastTranslationCompleted
Ermittelt den Name des Geometrieobjekts welches zuletzt eine animierte Vollbewegung beendete.

LoadModel(shapeName,fileName)
Lädt ein geometrisches Modell von einer Datei und fügt dieses an 0,0,0 in der 3DView hinzu (Intern: Geometry#+1).
Unterstützte Formate: 3ds, lwo, obj, (obj.gz ->)objz, off, stl. Position und Dimension entsprechend vorgegebener Geometrieeigenschaften.

shapeName Der Name der 3DView Shape.
fileName Der volle Pfad der zu ladenden Modelldatei.
Oft sind auch (gleichnamige) Bilddateien usw. im selben Ordner erforderlich.

returns Ein Array mit den Namen der hinzugefügten Geometrieobjekte bzw. Teilobjekte.
example 3D-samples\LD3DViewImport.sb
http://archive3d.net
http://archibase.co
http://free3d.com
http://leopoly.com
http://tf3dm.com
http://yobi3d.com


ModifyObject(shapeName,geometryName,action)
Durchführen einer Aktion an einem Geometrie- oder Lichtobjekt.
shapeName Der Name der 3DView Shape.
geometryName Der Name des Geometrie- oder Lichtobjekts, zB. model[1].
action Die durchzuführende Aktion:
"H" Verbergen
"S" Anzeigen
"X" Entfernen


MoveCamera(shapeName,yaw,pitch,roll,move)
Ändert die Blickrichtung und Position der Kamera relativ zur aktuellen Ausrichtung/Position.
Winkelangaben im Bereich [0,-/+180] oder [0,-/+360], zB. 10|-350 bzw. -10|350.

shapeName Der Name der 3DView Shape.
yaw Die Links/Rechts ↔ Schwenkung [Grad] ab aktueller Ausrichtung (Gierung, Standard: 0).
+ Kamera rechts, Szene links
- Kamera links, Szene rechts

pitch Die Rauf/Runter ↕ Neigung [Grad] ab aktueller Ausrichtung (Standard: 0).
+ Kamera rauf, Szene runter
- Kamera runter, Szene rauf

roll Die Verdrehung in Blickrichtung [Grad] ab aktueller Ausrichtung (Standard: 0).
+ Kamera/Szene im/gegen Uhrzeigersinn
- Kamera/Szene gegen/im Uhrzeigersinn

move Die Vor-/Rückwärts Bewegung [Pxl] in Kamerakoordinaten (entlang Blickrichtung) ab aktueller Position.
+ Kamera vorwärts
- Kamera rückwärts


QueuedRotationCompleted
Ermittelt die Anzahl der aktuell abgeschlossenen animierten Volldrehungen.

QueuedTranslationCompleted
Ermittelt die Anzahl der aktuell abgeschlossenen animierten Vollbewegungen.

ResetCamera(shapeName,xPos,yPos,zPos,xDir,yDir,zDir,xUp,yUp,zUp)
Setzt die Position und Blickrichtung der Kamera, sowie (optional) die Aufwärtsrichtung der Ansicht.
Standard: Position in (0,0,10), zentrierte Ansicht entlang -z Achse abwärts, +y oben und +x rechts.
Mindestens ein Dir Vektor muß <>0 sein, alle anderen Pos/Dir Werte können dann "" sein.

shapeName Der Name der 3DView Shape.
xPos Die x-Position der Kamera (Standard: 0).
yPos Die y-Position der Kamera (Standard: 0).
zPos Die z-Position der Kamera (Standard: 10).
xDir Der x-Richtungsvektor [-1,1] der Kamerasicht (-/+ Links/Rechts, Standard: 0).
yDir Der y-Richtungsvektor [-1,1] der Kamerasicht (-/+ Runter/Rauf, Standard: 0).
zDir Der z-Richtungsvektor [-1,1] der Kamerasicht (-/+ Rein/Raus, Standard: -1).
xUp Optionaler x-Richtungsvektor [-1,1], definiert Aufwärts-Richtung der Szenenprojektion (Standard: 0).
yUp Optionaler y-Richtungsvektor [-1,1], definiert Aufwärts-Richtung der Szenenprojektion (Standard: 1).
zUp Optionaler z-Richtungsvektor [-1,1], definiert Aufwärts-Richtung der Szenenprojektion (Standard: 0).
example 'Z-Taste (Standard Ansicht):
ResetCamera(view, 0,0,10, 0,0,-1, 0,1,0)
ResetCamera(view, "","",10, "","",-1, "",1,"")
'Umsch+Z:
ResetCamera(view, 0,0,-10, 0,0,1, 0,1,0)
'X-Taste:
ResetCamera(view, 10,0,0, -1,0,0, 0,1,0)
'Umsch+X:
ResetCamera(view, -10,0,0, 1,0,0, 0,1,0)
'Y-Taste:
ResetCamera(view, 0,10,0, 0,-1,0, 0,0,1)
'Umsch+Y:
ResetCamera(view, 0,-10,0, 0,1,0, 0,0,1)


ResetMaterial(shapeName,geometryName,colour,materialType)
(Er)Setzt das Material/Farbe für ein bestehendes Geometrieobjekt. S.a. 'AddImage' bzw. 'SetBackMaterial'.
shapeName Der Name der 3DView Shape.
geometryName Der Name des Geometrieobjekts.
colour Die neue Farbe oder ein Gradientpinsel (Brush) für das Objekt (nur Seite der Auswärtsnormalen).
materialType Der neue Materialtyp:
"E" Emissiv, konstante Helligkeit
"D" Diffus, beeinflusst durch Licht
"S" Spiegelnd, zusätzliche Glanzpunkte
"" Ohne, keine Anzeige


ReverseNormals(shapeName,geometryName)
Umkehren aller Auswärtsnormalen (1/Gitterpunkt) für ein Geometrieobjekt.
Macht zB. die Innenoberfläche eines Körpers sichtbar anstatt der Außenoberfläche (zB. SkyDome).
Normalen zeigen in Richtung der maximalen Lichtreflexion.

shapeName Der Name der 3DView Shape.
geometryName Der Name des Geometrieobjekts dessen Normalen umgekehrt werden.

RotateGeometry(shapeName,geometryName,x,y,z,angle)
Rotiert ein Geometrieobjekt um dessen Zentrum (erste Rotation "R1", relativ ab Originalposition).
shapeName Der Name der 3DView Shape.
geometryName Der Name des Geometrieobjekts, zB. model[1].
x Der x-Richtungsvektor [-1,1] der Drehachse.
y Der y-Richtungsvektor [-1,1] der Drehachse.
z Der z-Richtungsvektor [-1,1] der Drehachse.
angle Der Drehwinkel vom Grundzustand [Grad] ab Originalposition.
Blick entlang +/- Drehachse -> im/gegen Uhrzeigersinn


RotateGeometry2(shapeName,geometryName,x,y,z,angle)
Rotiert ein Geometrieobjekt um dessen Zentrum (zweite Rotation "R2", relativ ab aktueller Position).
shapeName Der Name der 3DView Shape.
geometryName Der Name des Geometrieobjekts, zB. model[1].
x Der x-Richtungsvektor [-1,1] der Drehachse.
y Der y-Richtungsvektor [-1,1] der Drehachse.
z Der z-Richtungsvektor [-1,1] der Drehachse.
angle Der Drehwinkel [Grad] ab aktueller Position.
Blick entlang +/- Drehachse -> im/gegen Uhrzeigersinn


RotateGeometry3(shapeName,geometryName,x,y,z,angle)
Rotiert ein Geometrieobjekt um dessen Zentrum (dritte Rotation "R3", relativ ab aktueller Position).
shapeName Der Name der 3DView Shape.
geometryName Der Name des Geometrieobjekts, zB. model[1].
x Der x-Richtungsvektor [-1,1] der Drehachse.
y Der y-Richtungsvektor [-1,1] der Drehachse.
z Der y-Richtungsvektor [-1,1] der Drehachse.
angle Der Drehwinkel [Grad] ab aktueller Position.
Blick entlang +/- Drehachse -> im/gegen Uhrzeigersinn


RotationCompleted
Ereignisaufruf bei Beendigung einer Drehanimation (AnimateRotation(2), für 'repeats' >0).

ScaleGeometry(shapeName,geometryName,scaleX,scaleY,scaleZ)
Skaliert (zoomt) ein Geometrieobjekt an dessen Zentrum. s. SetCentre(..,"S")
shapeName Der Name der 3DView Shape.
geometryName Der Name des Geometrieobjekts, zB. model[1].
scaleX Der x-Skalierungsfaktor (Standard: 1).
scaleY Der y-Skalierungsfaktor (Standard: 1).
scaleZ Der z-Skalierungsfaktor (Standard: 1).

SetBackMaterial(shapeName,geometryName,colour,materialType)
(Er)Setzt das Material/Farbe der Rückseite für ein bestehendes Geometrieobjekt. S.a. 'AddBackImage' bzw. 'ResetMaterial'.
shapeName Der Name der 3DView Shape.
geometryName Der Name des Geometrieobjekts.
colour Die neue Farbe oder ein Gradientpinsel (Brush) für das Objekt (nur Rückseite zur Auswärtsnormalen).
materialType Der neue Materialtyp:
"E" Emissiv, konstante Helligkeit
"D" Diffus, beeinflusst durch Licht
"S" Spiegelnd, zusätzliche Glanzpunkte
"" Ohne, keine Anzeige


SetBillBoard(shapeName,geometryName)
Setzt ein Geometrieobjekt auf kontinuierliche Rotation zur Kameraverfolgung.
Verwendet die zweite und dritte Rotation "R2R3".

shapeName Der Name der 3DView Shape.
geometryName Der Name des Geometrieobjekts in der 3DView.

SetCentre(shapeName,geometryName,x,y,z,options)
Setzt das Zentrum von Rotate- und ScaleGeometry Transformationen für ein Geometrieobjekt.
Standardmäßig ist dies das Zentrum des Hüllkörpers für das Geometrieobjekt (meist 0,0,0).
Das Zentrum wird mittels der Koordinaten bei Erstellung des Geometrieobjekts definiert und kann auch außerhalb des Geometrieobjekts liegen.
Ist ein Koordinatenwert auf "" gesetzt, wird dafür der Standardwert für das Zentrum verwendet.

shapeName Der Name der 3DView Shape.
geometryName Der Name des zu transformierenden Geometrieobjekts.
x Die x-Koordinate des Zentrums.
y Die y-Koordinate des Zentrums.
z Die z-Koordinate des Zentrums.
options Optionen zur Steuerung der Zentrierung (auch Mehrfachwerte, zB. "R1R2R3" zum Setzen für alle drei Rotationen):
"R1" RotateGeometry
"R2" RotateGeometry2, AnimateRotation
"R3" RotateGeometry3, AnimateRotation2
"S" ScaleGeometry


SpecularExponent
Ermittelt oder setzt den Spiegelungsexponent bei Verwendung von spiegelndem Material "S" für Geometrieobjekte (Standard: 5).
Dieser Exponent definiert den rel. Anteil der Glanzkomponente des Beleuchtungsmodells für ein Material.
Ist zu setzen bevor ein neues Geometrieobjekt mit dieser Eigenschaft erstellt wird, danach unveränderbar.


SwapUpDirection(shapeName,geometryName)
Rotiert (Wechselt) die y<->z Richtungen für ein Geometrieobjekt (zB. der Reihe nach: y,z,-y,-z, .., entspricht 4x 90° Linksdrehung(en) um +x-Achse).
Hilfreich für Geometrieobjekte, die nach zUp=1 Regel erstellt wurden. Konvertiert diese zur yUp=1 Richtung (wie in LD3DView verwendet).
Direkt nach Erstellung/Laden anwenden, da skalierte Objekte dabei auf Originalgröße zurückgesetzt werden.

shapeName Der Name der 3DView Shape.
geometryName Der Name des Geometrieobjekts.
example http://de.wikipedia.org/wiki/Rechtssystem_(Mathematik)
ang = ang - 90
RotateGeometry(view, geo, 1,0,0, ang) 'SwapUpDirection(view, geo)

Bildstoß (für Kugel) verläüft an 0,[y,-y],-z


TranslateGeometry(shapeName,geometryName,dX,dY,dZ)
Verschiebt ein Geometrieobjekt geradlinig an dessen Zentrum, relativ ab Originalposition.
shapeName Der Name der 3DView Shape.
geometryName Der Name des Geometrieobjekts, zB. model[1].
dX Der Versatz in x-Richtung ab Originalposition.
dY Der Versatz in y-Richtung ab Originalposition.
dZ Der Versatz in z-Richtung ab Originalposition.

TranslationCompleted
Ereignisaufruf bei Beendigung einer geradlinigen Bewegungsanimation (AnimateTranslation).