12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061 |
- //
- // The graphics rendering engine GLScene http://glscene.org
- //
- unit DWS.Scene;
- (*
- DelphiWebScript symbol creation for base GLScene classes.
- This unit is dependent on dws2Classes and dws2VectorGeometry.
- These components must be associated with the same compiler
- for the GLScene classes to inherit from.
- *)
- interface
- uses
- System.Classes,
- System.SysUtils,
- GLS.Scene,
- GLS.VectorGeometry,
- GLS.Coordinates,
- DWS.HelperFunc,
- dwsExprs,
- dwsSymbols,
- dwsComp,
- dwsCompStrings,
- dwsStack,
- dwsFunctions;
- type
- TdwsGLSceneUnit = class(TdwsUnitComponent)
- private
- procedure AddClassTGLCoordinates(SymbolTable: TSymbolTable);
- procedure AddClassTGLBaseSceneObject(SymbolTable: TSymbolTable);
- protected
- procedure AddUnitSymbols(SymbolTable: TSymbolTable); override;
- public
- constructor Create(AOwner: TComponent); override;
- end;
- procedure Register;
- // --------------------------------------------------------
- implementation
- // --------------------------------------------------------
- // ----------
- // ---------- Internal class method class declarations ----------
- // ----------
- type
- // --------------------------
- // -------- TGLCoordinates
- // --------------------------
- TGLCoordinatesSetXMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLCoordinatesGetXMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLCoordinatesSetYMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLCoordinatesGetYMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLCoordinatesSetZMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLCoordinatesGetZMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLCoordinatesSetWMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLCoordinatesGetWMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLCoordinatesSetVectorMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLCoordinatesSetPointMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLCoordinatesSetToZeroMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLCoordinatesSetAsVectorMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLCoordinatesGetAsVectorMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLCoordinatesGetAsStringMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLCoordinatesTranslateMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLCoordinatesAddScaledVectorMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLCoordinatesRotateMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLCoordinatesNormalizeMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLCoordinatesInvertMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLCoordinatesScaleMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLCoordinatesEqualsMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- // --------------------------
- // TGLBaseSceneObject
- // --------------------------
- TGLBaseSceneObjectSetVisibleMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectGetVisibleMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectSetMatrixMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectGetMatrixMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectAbsoluteMatrixMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectInvAbsoluteMatrixMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectSetAbsolutePositionMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectGetAbsolutePositionMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectSetAbsoluteUpMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectGetAbsoluteUpMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectSetAbsoluteDirectionMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectGetAbsoluteDirectionMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectSetPositionMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectGetPositionMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectSetDirectionMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectGetDirectionMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectSetUpMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectGetUpMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectSetScaleMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectGetScaleMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectSetPitchAngleMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectGetPitchAngleMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectSetTurnAngleMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectGetTurnAngleMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectSetRollAngleMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectGetRollAngleMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectPitchMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectTurnMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectRollMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectMoveMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- TGLBaseSceneObjectAddChildMethod = class(TInternalMethod)
- public
- procedure Execute(var ExternalObject: TObject); override;
- end;
- // ----------
- // ---------- Vector/Matrix to/from IInfo helper functions ----------
- // ----------
- function GetVectorFromInfo(Info: IInfo): TGLVector;
- begin
- Result := VectorMake(Info.Element([0]).Value, Info.Element([1]).Value,
- Info.Element([2]).Value, Info.Element([3]).Value);
- end;
- procedure SetInfoFromVector(Info: IInfo; vec: TGLVector);
- var
- i: Integer;
- begin
- for i := 0 to 3 do
- Info.Element([i]).Value := vec[i];
- end;
- function GetMatrixFromInfo(Info: IInfo): TGLMatrix;
- var
- i: Integer;
- begin
- for i := 0 to 3 do
- Result[i] := VectorMake(Info.Element([i]).Element([0]).Value,
- Info.Element([i]).Element([1]).Value, Info.Element([i]).Element([2])
- .Value, Info.Element([i]).Element([3]).Value);
- end;
- procedure SetInfoFromMatrix(Info: IInfo; mat: TGLMatrix);
- var
- i, j: Integer;
- begin
- for i := 0 to 3 do
- for j := 0 to 3 do
- Info.Element([i]).Element([j]).Value := mat[i][j];
- end;
- // ----------
- // ---------- Internal class method execute procedures ----------
- // ----------
- // TGLCoordinates internal class methods
- // TGLCoordinates.X write access
- procedure TGLCoordinatesSetXMethod.Execute(var ExternalObject: TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLCoordinates);
- TGLCoordinates(ExternalObject).X := Info['Value'];
- end;
- // TGLCoordinates.X read access
- procedure TGLCoordinatesGetXMethod.Execute(var ExternalObject: TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLCoordinates);
- Info.Result := TGLCoordinates(ExternalObject).X;
- end;
- // TGLCoordinates.Y write access
- procedure TGLCoordinatesSetYMethod.Execute(var ExternalObject: TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLCoordinates);
- TGLCoordinates(ExternalObject).Y := Info['Value'];
- end;
- // TGLCoordinates.Y read access
- procedure TGLCoordinatesGetYMethod.Execute(var ExternalObject: TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLCoordinates);
- Info.Result := TGLCoordinates(ExternalObject).Y;
- end;
- // TGLCoordinates.Z write access
- procedure TGLCoordinatesSetZMethod.Execute(var ExternalObject: TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLCoordinates);
- TGLCoordinates(ExternalObject).Z := Info['Value'];
- end;
- // TGLCoordinates.Z read access
- procedure TGLCoordinatesGetZMethod.Execute(var ExternalObject: TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLCoordinates);
- Info.Result := TGLCoordinates(ExternalObject).Z;
- end;
- // TGLCoordinates.W write access
- procedure TGLCoordinatesSetWMethod.Execute(var ExternalObject: TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLCoordinates);
- TGLCoordinates(ExternalObject).W := Info['Value'];
- end;
- // TGLCoordinates.W read access
- procedure TGLCoordinatesGetWMethod.Execute(var ExternalObject: TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLCoordinates);
- Info.Result := TGLCoordinates(ExternalObject).W;
- end;
- // TGLCoordinates.SetVector
- procedure TGLCoordinatesSetVectorMethod.Execute(var ExternalObject: TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLCoordinates);
- TGLCoordinates(ExternalObject).SetVector(Info['x'], Info['y'], Info['z'],
- Info['w']);
- end;
- // TGLCoordinates.SetPoint
- procedure TGLCoordinatesSetPointMethod.Execute(var ExternalObject: TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLCoordinates);
- TGLCoordinates(ExternalObject).SetPoint(Info['x'], Info['y'], Info['z']);
- end;
- // TGLCoordinates.AsVector write access
- procedure TGLCoordinatesSetAsVectorMethod.Execute(var ExternalObject: TObject);
- var
- v: TGLVector;
- begin
- ValidateExternalObject(ExternalObject, TGLCoordinates);
- v := GetVectorFromInfo(Info.Vars['Value']);
- TGLCoordinates(ExternalObject).AsVector := v;
- end;
- // TGLCoordinates.AsVector read access
- procedure TGLCoordinatesGetAsVectorMethod.Execute(var ExternalObject: TObject);
- var
- v: TGLVector;
- begin
- ValidateExternalObject(ExternalObject, TGLCoordinates);
- v := TGLCoordinates(ExternalObject).AsVector;
- SetInfoFromVector(Info.Vars['Result'], v);
- end;
- // TGLCoordinates.AsString read access
- procedure TGLCoordinatesGetAsStringMethod.Execute(var ExternalObject: TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLCoordinates);
- Info.Result := TGLCoordinates(ExternalObject).AsString;
- end;
- // TGLCoordinates.Translate
- procedure TGLCoordinatesTranslateMethod.Execute(var ExternalObject: TObject);
- var
- v: TGLVector;
- begin
- ValidateExternalObject(ExternalObject, TGLCoordinates);
- v := GetVectorFromInfo(Info.Vars['translationVector']);
- TGLCoordinates(ExternalObject).Translate(v);
- end;
- // TGLCoordinates.AddScaledVector
- procedure TGLCoordinatesAddScaledVectorMethod.Execute(var ExternalObject
- : TObject);
- var
- v: TGLVector;
- begin
- ValidateExternalObject(ExternalObject, TGLCoordinates);
- v := GetVectorFromInfo(Info.Vars['translationVector']);
- TGLCoordinates(ExternalObject).AddScaledVector(Info['factor'], v);
- end;
- // TGLCoordinates.Rotate
- procedure TGLCoordinatesRotateMethod.Execute(var ExternalObject: TObject);
- var
- v: TGLVector;
- begin
- ValidateExternalObject(ExternalObject, TGLCoordinates);
- v := GetVectorFromInfo(Info.Vars['anAxis']);
- TGLCoordinates(ExternalObject).Rotate(v, Info['anAngle']);
- end;
- // TGLCoordinates.Normalize
- procedure TGLCoordinatesNormalizeMethod.Execute(var ExternalObject: TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLCoordinates);
- TGLCoordinates(ExternalObject).Normalize;
- end;
- // TGLCoordinates.Invert
- procedure TGLCoordinatesInvertMethod.Execute(var ExternalObject: TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLCoordinates);
- TGLCoordinates(ExternalObject).Invert;
- end;
- // TGLCoordinates.Scale
- procedure TGLCoordinatesScaleMethod.Execute(var ExternalObject: TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLCoordinates);
- TGLCoordinates(ExternalObject).Scale(Info['factor']);
- end;
- // TGLCoordinates.Equals
- procedure TGLCoordinatesEqualsMethod.Execute(var ExternalObject: TObject);
- var
- v: TGLVector;
- begin
- ValidateExternalObject(ExternalObject, TGLCoordinates);
- v := GetVectorFromInfo(Info.Vars['aVector']);
- Info.Result := TGLCoordinates(ExternalObject).Equals(v);
- end;
- // TGLCoordinates.SetToZero
- procedure TGLCoordinatesSetToZeroMethod.Execute(var ExternalObject: TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLCoordinates);
- TGLCoordinates(ExternalObject).SetToZero;
- end;
- // TGLBaseSceneObject internal class methods
- // TGLBaseSceneObject.SetVisible
- procedure TGLBaseSceneObjectSetVisibleMethod.Execute(var ExternalObject
- : TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- TGLBaseSceneObject(ExternalObject).Visible := Info.Vars['Value'].Value;
- end;
- // TGLBaseSceneObject.GetVisible
- procedure TGLBaseSceneObjectGetVisibleMethod.Execute(var ExternalObject
- : TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- Info.Result := TGLBaseSceneObject(ExternalObject).Visible;
- end;
- // TGLBaseSceneObject.SetMatrix
- procedure TGLBaseSceneObjectSetMatrixMethod.Execute(var ExternalObject
- : TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- TGLBaseSceneObject(ExternalObject).Matrix :=
- GetMatrixFromInfo(Info.Vars['Value']);
- end;
- // TGLBaseSceneObject.GetMatrix
- procedure TGLBaseSceneObjectGetMatrixMethod.Execute(var ExternalObject
- : TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- SetInfoFromMatrix(Info.Vars['Result'],
- TGLBaseSceneObject(ExternalObject).Matrix);
- end;
- // TGLBaseSceneObject.AbsoluteMatrix
- procedure TGLBaseSceneObjectAbsoluteMatrixMethod.Execute(var ExternalObject
- : TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- SetInfoFromMatrix(Info.Vars['Result'], TGLBaseSceneObject(ExternalObject)
- .AbsoluteMatrix);
- end;
- // TGLBaseSceneObject.InvAbsoluteMatrix
- procedure TGLBaseSceneObjectInvAbsoluteMatrixMethod.Execute(var ExternalObject
- : TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- SetInfoFromMatrix(Info.Vars['Result'], TGLBaseSceneObject(ExternalObject)
- .InvAbsoluteMatrix);
- end;
- // TGLBaseSceneObject.SetAbsolutePosition
- procedure TGLBaseSceneObjectSetAbsolutePositionMethod.Execute(var ExternalObject
- : TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- TGLBaseSceneObject(ExternalObject).AbsolutePosition :=
- GetVectorFromInfo(Info.Vars['Value']);
- end;
- // TGLBaseSceneObject.GetAbsolutePosition
- procedure TGLBaseSceneObjectGetAbsolutePositionMethod.Execute(var ExternalObject
- : TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- SetInfoFromVector(Info.Vars['Result'], TGLBaseSceneObject(ExternalObject)
- .AbsolutePosition);
- end;
- // TGLBaseSceneObject.SetAbsoluteUp
- procedure TGLBaseSceneObjectSetAbsoluteUpMethod.Execute(var ExternalObject
- : TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- TGLBaseSceneObject(ExternalObject).AbsoluteUp :=
- GetVectorFromInfo(Info.Vars['Value']);
- end;
- // TGLBaseSceneObject.GetAbsoluteUp
- procedure TGLBaseSceneObjectGetAbsoluteUpMethod.Execute(var ExternalObject
- : TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- SetInfoFromVector(Info.Vars['Result'], TGLBaseSceneObject(ExternalObject)
- .AbsoluteUp);
- end;
- // TGLBaseSceneObject.SetAbsoluteDirection
- procedure TGLBaseSceneObjectSetAbsoluteDirectionMethod.Execute
- (var ExternalObject: TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- TGLBaseSceneObject(ExternalObject).AbsoluteDirection :=
- GetVectorFromInfo(Info.Vars['Value']);
- end;
- // TGLBaseSceneObject.GetAbsoluteDirection
- procedure TGLBaseSceneObjectGetAbsoluteDirectionMethod.Execute
- (var ExternalObject: TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- SetInfoFromVector(Info.Vars['Result'], TGLBaseSceneObject(ExternalObject)
- .AbsoluteDirection);
- end;
- // TGLBaseSceneObject.Position write access
- procedure TGLBaseSceneObjectSetPositionMethod.Execute(var ExternalObject
- : TObject);
- var
- Value: TGLCoordinates;
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- Value := TGLCoordinates(Info.GetExternalObjForVar('Value'));
- TGLBaseSceneObject(ExternalObject).Position := Value;
- end;
- // TGLBaseSceneObject.Position read access
- procedure TGLBaseSceneObjectGetPositionMethod.Execute(var ExternalObject
- : TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- Info.Result := Info.RegisterExternalObject(TGLBaseSceneObject(ExternalObject)
- .Position);
- end;
- // TGLBaseSceneObject.Direction write access
- procedure TGLBaseSceneObjectSetDirectionMethod.Execute(var ExternalObject
- : TObject);
- var
- Value: TGLCoordinates;
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- Value := TGLCoordinates(Info.GetExternalObjForVar('Value'));
- TGLBaseSceneObject(ExternalObject).Direction := Value;
- end;
- // TGLBaseSceneObject.Direction read access
- procedure TGLBaseSceneObjectGetDirectionMethod.Execute(var ExternalObject
- : TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- Info.Result := Info.RegisterExternalObject(TGLBaseSceneObject(ExternalObject)
- .Direction);
- end;
- // TGLBaseSceneObject.Up write access
- procedure TGLBaseSceneObjectSetUpMethod.Execute(var ExternalObject: TObject);
- var
- Value: TGLCoordinates;
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- Value := TGLCoordinates(Info.GetExternalObjForVar('Value'));
- TGLBaseSceneObject(ExternalObject).Up := Value;
- end;
- // TGLBaseSceneObject.Up read access
- procedure TGLBaseSceneObjectGetUpMethod.Execute(var ExternalObject: TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- Info.Result := Info.RegisterExternalObject
- (TGLBaseSceneObject(ExternalObject).Up);
- end;
- // TGLBaseSceneObject.Scale write access
- procedure TGLBaseSceneObjectSetScaleMethod.Execute(var ExternalObject: TObject);
- var
- Value: TGLCoordinates;
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- Value := TGLCoordinates(Info.GetExternalObjForVar('Value'));
- TGLBaseSceneObject(ExternalObject).Scale := Value;
- end;
- // TGLBaseSceneObject.Scale read access
- procedure TGLBaseSceneObjectGetScaleMethod.Execute(var ExternalObject: TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- Info.Result := Info.RegisterExternalObject
- (TGLBaseSceneObject(ExternalObject).Scale);
- end;
- // TGLBaseSceneObject.PitchAngle write access
- procedure TGLBaseSceneObjectSetPitchAngleMethod.Execute(var ExternalObject
- : TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- TGLBaseSceneObject(ExternalObject).PitchAngle := Info.Vars['Value'].Value;
- end;
- // TGLBaseSceneObject.PitchAngle read access
- procedure TGLBaseSceneObjectGetPitchAngleMethod.Execute(var ExternalObject
- : TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- Info.Result := TGLBaseSceneObject(ExternalObject).PitchAngle;
- end;
- // TGLBaseSceneObject.TurnAngle write access
- procedure TGLBaseSceneObjectSetTurnAngleMethod.Execute(var ExternalObject
- : TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- TGLBaseSceneObject(ExternalObject).TurnAngle := Info.Vars['Value'].Value;
- end;
- // TGLBaseSceneObject.TurnAngle read access
- procedure TGLBaseSceneObjectGetTurnAngleMethod.Execute(var ExternalObject
- : TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- Info.Result := TGLBaseSceneObject(ExternalObject).TurnAngle;
- end;
- // TGLBaseSceneObject.RollAngle write access
- procedure TGLBaseSceneObjectSetRollAngleMethod.Execute(var ExternalObject
- : TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- TGLBaseSceneObject(ExternalObject).RollAngle := Info.Vars['Value'].Value;
- end;
- // TGLBaseSceneObject.RollAngle read access
- procedure TGLBaseSceneObjectGetRollAngleMethod.Execute(var ExternalObject
- : TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- Info.Result := TGLBaseSceneObject(ExternalObject).RollAngle;
- end;
- // TGLBaseSceneObject.Pitch
- procedure TGLBaseSceneObjectPitchMethod.Execute(var ExternalObject: TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- TGLBaseSceneObject(ExternalObject).Pitch(Info['angle']);
- end;
- // TGLBaseSceneObject.Turn
- procedure TGLBaseSceneObjectTurnMethod.Execute(var ExternalObject: TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- TGLBaseSceneObject(ExternalObject).Turn(Info['angle']);
- end;
- // TGLBaseSceneObject.Roll
- procedure TGLBaseSceneObjectRollMethod.Execute(var ExternalObject: TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- TGLBaseSceneObject(ExternalObject).Roll(Info['angle']);
- end;
- // TGLBaseSceneObject.Move
- procedure TGLBaseSceneObjectMoveMethod.Execute(var ExternalObject: TObject);
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- TGLBaseSceneObject(ExternalObject).Move(Info['ADistance']);
- end;
- // TGLBaseSceneObject.AddChild
- procedure TGLBaseSceneObjectAddChildMethod.Execute(var ExternalObject: TObject);
- var
- AChild: TObject;
- begin
- ValidateExternalObject(ExternalObject, TGLBaseSceneObject);
- AChild := Info.GetExternalObjForVar('AChild');
- if not Assigned(AChild) then
- raise Exception.Create('AChild parameter is unassigned.');
- if not(AChild is TGLBaseSceneObject) then
- Exception.Create
- ('AChild parameter is not inheriting from TGLBaseSceneObject.');
- TGLBaseSceneObject(ExternalObject).AddChild(TGLBaseSceneObject(AChild));
- end;
- // ----------
- // ---------- Global procedures/functions ----------
- // ----------
- procedure Register;
- begin
- RegisterComponents('GLScene DWS2', [Tdws2GLSceneUnit]);
- end;
- // ----------
- // ---------- TdwsGLSceneUnit ----------
- // ----------
- constructor TdwsGLSceneUnit.Create(AOwner: TComponent);
- begin
- inherited;
- FUnitName := 'GLScene';
- with FDependencies do
- begin
- Add('Classes');
- Add('GLS.VectorGeometry');
- end;
- end;
- procedure TdwsGLSceneUnit.AddClassTGLCoordinates(SymbolTable: TSymbolTable);
- var
- ClassSym: TClassSymbol;
- begin
- ClassSym := TClassSymbol(AddClassSymbol(SymbolTable, 'TGLCoordinates',
- 'TPersistent'));
- // Methods
- if not Assigned(ClassSym.Members.FindLocal('SetX')) then
- TGLCoordinatesSetXMethod.Create(mkProcedure, [], 0, 'SetX',
- ['Value', 'Float'], '', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('GetX')) then
- TGLCoordinatesGetXMethod.Create(mkFunction, [], 0, 'GetX', [], 'Float',
- ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('SetY')) then
- TGLCoordinatesSetYMethod.Create(mkProcedure, [], 0, 'SetY',
- ['Value', 'Float'], '', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('GetY')) then
- TGLCoordinatesGetYMethod.Create(mkFunction, [], 0, 'GetY', [], 'Float',
- ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('SetZ')) then
- TGLCoordinatesSetZMethod.Create(mkProcedure, [], 0, 'SetZ',
- ['Value', 'Float'], '', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('GetZ')) then
- TGLCoordinatesGetZMethod.Create(mkFunction, [], 0, 'GetZ', [], 'Float',
- ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('SetW')) then
- TGLCoordinatesSetWMethod.Create(mkProcedure, [], 0, 'SetW',
- ['Value', 'Float'], '', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('GetW')) then
- TGLCoordinatesGetWMethod.Create(mkFunction, [], 0, 'GetW', [], 'Float',
- ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('SetVector')) then
- TGLCoordinatesSetVectorMethod.Create(mkProcedure, [], 0, 'SetVector',
- ['x', 'Float', 'y', 'Float', 'z', 'Float', 'w', 'Float'], '', ClassSym,
- SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('SetPoint')) then
- TGLCoordinatesSetPointMethod.Create(mkProcedure, [], 0, 'SetPoint',
- ['x', 'Float', 'y', 'Float', 'z', 'Float'], '', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('SetToZero')) then
- TGLCoordinatesSetToZeroMethod.Create(mkProcedure, [], 0, 'SetToZero', [],
- '', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('SetAsVector')) then
- TGLCoordinatesSetAsVectorMethod.Create(mkProcedure, [], 0, 'SetAsVector',
- ['Value', 'TGLVector'], '', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('GetAsVector')) then
- TGLCoordinatesGetAsVectorMethod.Create(mkFunction, [], 0, 'GetAsVector', [],
- 'TGLVector', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('GetAsString')) then
- TGLCoordinatesGetAsStringMethod.Create(mkFunction, [], 0, 'GetAsString', [],
- 'String', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('Translate')) then
- TGLCoordinatesTranslateMethod.Create(mkProcedure, [], 0, 'Translate',
- ['translationVector', 'TGLVector'], '', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('AddScaledVector')) then
- TGLCoordinatesAddScaledVectorMethod.Create(mkProcedure, [], 0,
- 'AddScaledVector', ['factor', 'Float', 'translationVector', 'TGLVector'],
- '', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('Rotate')) then
- TGLCoordinatesRotateMethod.Create(mkProcedure, [], 0, 'Rotate',
- ['anAxis', 'TGLVector', 'anAngle', 'Float'], '', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('Normalize')) then
- TGLCoordinatesNormalizeMethod.Create(mkProcedure, [], 0, 'Normalize', [],
- '', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('Invert')) then
- TGLCoordinatesInvertMethod.Create(mkProcedure, [], 0, 'Invert', [], '',
- ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('Scale')) then
- TGLCoordinatesScaleMethod.Create(mkProcedure, [], 0, 'Scale',
- ['factor', 'Float'], '', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('Equals')) then
- TGLCoordinatesEqualsMethod.Create(mkFunction, [], 0, 'Equals',
- ['aVector', 'TGLVector'], 'Boolean', ClassSym, SymbolTable);
- // Properties
- AddPropertyToClass('X', 'Float', 'GetX', 'SetX', '', False, ClassSym,
- SymbolTable);
- AddPropertyToClass('Y', 'Float', 'GetY', 'SetY', '', False, ClassSym,
- SymbolTable);
- AddPropertyToClass('Z', 'Float', 'GetZ', 'SetZ', '', False, ClassSym,
- SymbolTable);
- AddPropertyToClass('AsVector', 'TGLVector', 'GetAsVector', 'SetAsVector', '',
- False, ClassSym, SymbolTable);
- AddPropertyToClass('AsString', 'String', 'GetAsString', '', '', False,
- ClassSym, SymbolTable);
- end;
- procedure TdwsGLSceneUnit.AddClassTGLBaseSceneObject(SymbolTable: TSymbolTable);
- var
- ClassSym: TClassSymbol;
- begin
- ClassSym := TClassSymbol(AddClassSymbol(SymbolTable, 'TGLBaseSceneObject',
- 'TComponent'));
- // Methods
- if not Assigned(ClassSym.Members.FindLocal('SetVisible')) then
- TGLBaseSceneObjectSetVisibleMethod.Create(mkProcedure, [], 0, 'SetVisible',
- ['Value', 'Boolean'], '', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('GetVisible')) then
- TGLBaseSceneObjectGetVisibleMethod.Create(mkFunction, [], 0, 'GetVisible',
- [], 'Boolean', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('SetMatrix')) then
- TGLBaseSceneObjectSetMatrixMethod.Create(mkProcedure, [], 0, 'SetMatrix',
- ['Value', 'TGLMatrix'], '', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('GetMatrix')) then
- TGLBaseSceneObjectGetMatrixMethod.Create(mkFunction, [], 0, 'GetMatrix', [],
- 'TGLMatrix', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('AbsoluteMatrix')) then
- TGLBaseSceneObjectAbsoluteMatrixMethod.Create(mkFunction, [], 0,
- 'AbsoluteMatrix', [], 'TGLMatrix', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('InvAbsoluteMatrix')) then
- TGLBaseSceneObjectInvAbsoluteMatrixMethod.Create(mkFunction, [], 0,
- 'InvAbsoluteMatrix', [], 'TGLMatrix', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('SetAbsolutePosition')) then
- TGLBaseSceneObjectSetAbsolutePositionMethod.Create(mkProcedure, [], 0,
- 'SetAbsolutePosition', ['Value', 'TGLVector'], '', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('GetAbsolutePosition')) then
- TGLBaseSceneObjectGetAbsolutePositionMethod.Create(mkFunction, [], 0,
- 'GetAbsolutePosition', [], 'TGLVector', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('SetAbsoluteUp')) then
- TGLBaseSceneObjectSetAbsoluteUpMethod.Create(mkProcedure, [], 0,
- 'SetAbsoluteUp', ['Value', 'TGLVector'], '', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('GetAbsoluteUp')) then
- TGLBaseSceneObjectGetAbsoluteUpMethod.Create(mkFunction, [], 0,
- 'GetAbsoluteUp', [], 'TGLVector', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('SetAbsoluteDirection')) then
- TGLBaseSceneObjectSetAbsoluteDirectionMethod.Create(mkProcedure, [], 0,
- 'SetAbsoluteDirection', ['Value', 'TGLVector'], '', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('GetAbsoluteDirection')) then
- TGLBaseSceneObjectGetAbsoluteDirectionMethod.Create(mkFunction, [], 0,
- 'GetAbsoluteDirection', [], 'TGLVector', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('SetPosition')) then
- TGLBaseSceneObjectSetPositionMethod.Create(mkProcedure, [], 0,
- 'SetPosition', ['Value', 'TGLCoordinates'], '', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('GetPosition')) then
- TGLBaseSceneObjectGetPositionMethod.Create(mkFunction, [], 0, 'GetPosition',
- [], 'TGLCoordinates', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('SetDirection')) then
- TGLBaseSceneObjectSetDirectionMethod.Create(mkProcedure, [], 0,
- 'SetDirection', ['Value', 'TGLCoordinates'], '', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('GetDirection')) then
- TGLBaseSceneObjectGetDirectionMethod.Create(mkFunction, [], 0,
- 'GetDirection', [], 'TGLCoordinates', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('SetUp')) then
- TGLBaseSceneObjectSetUpMethod.Create(mkProcedure, [], 0, 'SetUp',
- ['Value', 'TGLCoordinates'], '', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('GetUp')) then
- TGLBaseSceneObjectGetUpMethod.Create(mkFunction, [], 0, 'GetUp', [],
- 'TGLCoordinates', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('SetScale')) then
- TGLBaseSceneObjectSetScaleMethod.Create(mkProcedure, [], 0, 'SetScale',
- ['Value', 'TGLCoordinates'], '', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('GetScale')) then
- TGLBaseSceneObjectGetScaleMethod.Create(mkFunction, [], 0, 'GetScale', [],
- 'TGLCoordinates', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('SetPitchAngle')) then
- TGLBaseSceneObjectSetPitchAngleMethod.Create(mkProcedure, [], 0,
- 'SetPitchAngle', ['Value', 'Float'], '', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('GetPitchAngle')) then
- TGLBaseSceneObjectGetPitchAngleMethod.Create(mkFunction, [], 0,
- 'GetPitchAngle', [], 'Float', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('SetTurnAngle')) then
- TGLBaseSceneObjectSetTurnAngleMethod.Create(mkProcedure, [], 0,
- 'SetTurnAngle', ['Value', 'Float'], '', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('GetTurnAngle')) then
- TGLBaseSceneObjectGetTurnAngleMethod.Create(mkFunction, [], 0,
- 'GetTurnAngle', [], 'Float', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('SetRollAngle')) then
- TGLBaseSceneObjectSetRollAngleMethod.Create(mkProcedure, [], 0,
- 'SetRollAngle', ['Value', 'Float'], '', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('GetRollAngle')) then
- TGLBaseSceneObjectGetRollAngleMethod.Create(mkFunction, [], 0,
- 'GetRollAngle', [], 'Float', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('Pitch')) then
- TGLBaseSceneObjectPitchMethod.Create(mkProcedure, [], 0, 'Pitch',
- ['angle', 'Float'], '', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('Turn')) then
- TGLBaseSceneObjectTurnMethod.Create(mkProcedure, [], 0, 'Turn',
- ['angle', 'Float'], '', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('Roll')) then
- TGLBaseSceneObjectRollMethod.Create(mkProcedure, [], 0, 'Roll',
- ['angle', 'Float'], '', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('Move')) then
- TGLBaseSceneObjectMoveMethod.Create(mkProcedure, [], 0, 'Move',
- ['ADistance', 'Float'], '', ClassSym, SymbolTable);
- if not Assigned(ClassSym.Members.FindLocal('AddChild')) then
- TGLBaseSceneObjectAddChildMethod.Create(mkProcedure, [], 0, 'AddChild',
- ['AChild', 'TGLBaseSceneObject'], '', ClassSym, SymbolTable);
- // Properties
- AddPropertyToClass('Visible', 'Boolean', 'GetVisible', 'SetVisible', '',
- False, ClassSym, SymbolTable);
- AddPropertyToClass('Matrix', 'TGLMatrix', 'GetMatrix', 'SetMatrix', '', False,
- ClassSym, SymbolTable);
- AddPropertyToClass('AbsolutePosition', 'TGLVector', 'GetAbsolutePosition',
- 'SetAbsolutePosition', '', False, ClassSym, SymbolTable);
- AddPropertyToClass('AbsoluteUp', 'TGLVector', 'GetAbsoluteUp', 'SetAbsoluteUp',
- '', False, ClassSym, SymbolTable);
- AddPropertyToClass('AbsoluteDirection', 'TGLVector', 'GetAbsoluteDirection',
- 'SetAbsoluteDirection', '', False, ClassSym, SymbolTable);
- AddPropertyToClass('Position', 'TGLBaseSceneObject', 'GetPosition',
- 'SetPosition', '', False, ClassSym, SymbolTable);
- AddPropertyToClass('Direction', 'TGLBaseSceneObject', 'GetDirection',
- 'SetDirection', '', False, ClassSym, SymbolTable);
- AddPropertyToClass('Up', 'TGLBaseSceneObject', 'GetUp', 'SetUp', '', False,
- ClassSym, SymbolTable);
- AddPropertyToClass('Scale', 'TGLBaseSceneObject', 'GetScale', 'SetScale', '',
- False, ClassSym, SymbolTable);
- AddPropertyToClass('PitchAngle', 'Float', 'GetPitchAngle', 'SetPitchAngle',
- '', False, ClassSym, SymbolTable);
- AddPropertyToClass('TurnAngle', 'Float', 'GetTurnAngle', 'SetTurnAngle', '',
- False, ClassSym, SymbolTable);
- AddPropertyToClass('RollAngle', 'Float', 'GetRollAngle', 'SetRollAngle', '',
- False, ClassSym, SymbolTable);
- end;
- procedure TdwsGLSceneUnit.AddUnitSymbols(SymbolTable: TSymbolTable);
- begin
- // Forward class declaration
- AddForwardDeclaration('TGLCoordinates', SymbolTable);
- AddForwardDeclaration('TGLBaseSceneObject', SymbolTable);
- // Class types
- AddClassTGLCoordinates(SymbolTable);
- AddClassTGLBaseSceneObject(SymbolTable);
- end;
- end.
|