📄 oxnewtonstaticobjects.pas
字号:
{******************************************************************************}
procedure TOXNewtonStaCone.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCone last change by Dave Gravel. //
{******************************************************************************}
procedure TOXNewtonStaCone.UpdateTransformation;
begin
if FActived then
oxPSetInitTransform( FBody, Self );
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCone last change by Dave Gravel. //
{******************************************************************************}
function TOXNewtonStaCone.GetGeom: PNewtonCollision;
begin
result:= FCollision;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCone last change by Dave Gravel. //
{******************************************************************************}
function TOXNewtonStaCone.GetBody: PNewtonBody;
begin
result:= FBody;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCone last change by Dave Gravel. //
{******************************************************************************}
procedure TOXNewtonStaCone.InitNewton;
begin
FManager:= TOXNewtonManager(Scene);
if FActived or ( FManager = nil ) then Exit;
FCollision:= NewtonCreateCone( FManager.World, BottomRadius, Height, nil );
FBody:= NewtonCreateBody( FManager.World, FCollision );
if FManager.WorldMatrialCustom then begin
FContactID:= FManager.WorldDefaultMaterialID;
oxSetObjectMaterial( FBody );
end;
NewtonBodySetUserData( FBody, Self );
oxPSetInitTransform( FBody, Self );
NewtonReleaseCollision( FManager.World, FCollision );
FManager.AddLog( 'Static Cone Name: '+Name, 1, ':Info Object' );
FManager.AddLog( Name + ' InitNewton.', 1, ':Info Object' );
FActived:= True;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCone last change by Dave Gravel. //
{******************************************************************************}
procedure TOXNewtonStaCone.DoProgress( const progressTime: TProgressTimes );
begin
inherited;
if FActived then begin
if Assigned( FOnStepRender ) then
FOnStepRender( progressTime.deltaTime, progressTime.newTime );
end;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCone last change by Dave Gravel. //
{******************************************************************************}
procedure TOXNewtonStaCone.BuildList( var rci: TRenderContextInfo );
begin
if FOXVisual then
oxStaConeBuildList( self, rci ) else
exit;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCone last change by Dave Gravel. //
{******************************************************************************}
destructor TOXNewtonStaCone.Destroy;
begin
if FActived and assigned( FBody ) then begin
if ( not ( csDesigning in ComponentState ) ) then
if Name = '' then FManager.AddLog( ClassName + ' destroyed.', 1, ':Info Object' )
else FManager.AddLog( Name + ' destroyed.', 1, ':Info Object' );
FActived:= False;
NewtonDestroyBody( FManager.World, FBody );
end;
inherited destroy;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel. //
{******************************************************************************}
constructor TOXNewtonStaCompound.Create( aOwner: TComponent );
begin
inherited create( aOwner );
FOrionX3D:= 100;
FActived:= False;
FObjects:= TList.Create;
FMaterialCustom:= False;
FOXVisual:= True;
FConvexHull:= False;
FContactID:= -1;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel. //
{******************************************************************************}
procedure TOXNewtonStaCompound.AddCube(obj: TCompoundCube);
begin
FObjects.Add(obj)
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel. //
{******************************************************************************}
procedure TOXNewtonStaCompound.AddSphere(obj: TCompoundSphere);
begin
FObjects.Add(obj);
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel. //
{******************************************************************************}
procedure TOXNewtonStaCompound.AddCylinder(obj: TCompoundCylinder);
begin
FObjects.Add(obj);
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel. //
{******************************************************************************}
procedure TOXNewtonStaCompound.AddCapsule(obj: TCompoundCapsule);
begin
FObjects.Add(obj);
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel. //
{******************************************************************************}
procedure TOXNewtonStaCompound.AddCone(obj: TCompoundCone);
begin
FObjects.Add(obj);
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel. //
{******************************************************************************}
procedure TOXNewtonStaCompound.AddChamferCylinder(obj: TCompoundChamferCylinder);
begin
FObjects.Add(obj);
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel. //
{******************************************************************************}
procedure TOXNewtonStaCompound.AddMesh(obj: TCompoundMesh);
begin
FObjects.Add(obj);
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel. //
{******************************************************************************}
procedure TOXNewtonStaCompound.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel. //
{******************************************************************************}
procedure TOXNewtonStaCompound.UpdateTransformation;
begin
if FActived then
oxPSetInitTransform( FBody, Self );
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel. //
{******************************************************************************}
function TOXNewtonStaCompound.GetGeom: PNewtonCollision;
begin
result:= FCollision;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel. //
{******************************************************************************}
function TOXNewtonStaCompound.GetBody: PNewtonBody;
begin
result:= FBody;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel. //
{******************************************************************************}
procedure TOXNewtonStaCompound.InitNewton;
var
i: integer;
tmpColArray: TCollisionPrimitiveArray;
mTrans: TOXMatrix;
mTriangles: TAffineVectorList;
begin
if (Count = 0) then Exit;
if (FObjects.Count = 0) then Exit;
FManager:= TOXNewtonManager(Scene);
if FActived or ( FManager = nil ) then Exit;
FManager.AddLog( Name + ' create.', 1, ':Info Object' );
SetLength(tmpColArray,FObjects.Count);
SetLength(FCollisionArray,FObjects.Count);
for i := 0 to FObjects.Count - 1 do
begin
FManager.AddLog( TGLBaseSceneObject(FObjects.Items[i]).ClassName + Name, 1, ':Info Object' );
mTrans:= oxMSetCompound(TGLBaseSceneObject(FObjects.Items[i]), self);
if (TGLBaseSceneObject(FObjects.Items[i]).ClassNameIs('TCompoundMesh')) then
begin
mTriangles:= TCompoundMesh(FObjects.Items[i]).MeshObjects.ExtractTriangles;
mTriangles.TransformAsVectors(TCompoundMesh(FObjects.Items[i]).Matrix);
mTriangles.Translate( TCompoundMesh(FObjects.Items[i]).Position.AsAffineVector );
oxObjectStaCompound( i, self, mTriangles, mTrans, FCollisionArray, tmpColArray, FObjects );
mTriangles.Free;
end else
begin
oxObjectStaCompound(i, self, nil, mTrans, FCollisionArray, tmpColArray, FObjects);
end;
end;
FCollision:= NewtonCreateCompoundCollision( Manager.World, FObjects.Count, tmpColArray );
FBody:= NewtonCreateBody( FManager.World, FCollision );
NewtonBodySetUserData( FBody, Self );
if FManager.WorldMatrialCustom then begin
FContactID:= FManager.WorldDefaultMaterialID;
oxSetObjectMaterial( FBody );
end;
oxPSetInitTransform( FBody, Self );
NewtonReleaseCollision( FManager.World, FCollision );
for i := 0 to FObjects.Count - 1 do
begin
if (TGLBaseSceneObject(FObjects.Items[i]).ClassNameIs('TCompoundCapsule')) then
TCompoundCapsule(FObjects.Items[i]).InitCaps;
if assigned(FCollisionArray[i]) then
begin
NewtonReleaseCollision( FManager.World, FCollisionArray[i] );
FCollisionArray[i]:= nil;
end;
if ConvexHull then
if assigned(tmpColArray[i]) then
begin
NewtonReleaseCollision( FManager.World, tmpColArray[i] );
tmpColArray[i]:= nil;
end;
end;
FreeAndNil(FObjects);
FManager.AddLog( 'Static Compound Name: '+Name, 1, ':Info Object' );
FManager.AddLog( Name + ' InitNewton.', 1, ':Info Object' );
FActived:= True;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel. //
{******************************************************************************}
procedure TOXNewtonStaCompound.DoProgress( const progressTime: TProgressTimes );
begin
inherited;
if FActived then begin
if Assigned( FOnStepRender ) then
FOnStepRender( progressTime.deltaTime, progressTime.newTime );
end;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel. //
{******************************************************************************}
procedure TOXNewtonStaCompound.BuildList( var rci: TRenderContextInfo );
begin
if FOXVisual then
inherited else
exit;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel. //
{******************************************************************************}
destructor TOXNewtonStaCompound.Destroy;
begin
if FActived and assigned( FBody ) then begin
if ( not ( csDesigning in ComponentState ) ) then
if Name = '' then FManager.AddLog( ClassName + ' destroyed.', 1, ':Info Object' )
else FManager.AddLog( Name + ' destroyed.', 1, ':Info Object' );
FActived:= False;
NewtonDestroyBody( FManager.World, FBody );
end;
if Assigned(FObjects) then FObjects.Free;
inherited destroy;
end;
{******************************************************************************}
{$D '[15-9-2007]: TOXNewtonManager v1.55 by Dave Gravel under MPL-1.1 license.'}
{******************************************************************************}
initialization
RegisterClasses( [ TOXNewtonStaCube, TOXNewtonStaSphere, TOXNewtonStaCylinder, TOXNewtonStaCompound,
TOXNewtonStaChamferCylinder, TOXNewtonStaCCylinder, TOXNewtonStaCone ] );
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -