GizmoManipulator.kl¶
Types¶
GizmoManipulator (object)¶
バージョン 1.12.0 で追加.
The GizmoManipulator is used to propagate events to gizmos in the scene. A “Gizmo” is any InlineInstance that has a ‘GizmoHandler‘ attached as meta data.
Often only a single GizmoManipulator is registered for all visible gizmos. The GizmoManipulator then handles raycasting the visible gizmos in the scene to determine which should become the target of the manipulation
When the mouse is clicked down, the gizmos in the scene are raycast, and the hit gizmo becomes the active gizmo for the duration of the mouse action. All mouse move events are sent to the gizmo for processing. On mouse up, the gizmo is released and is no longer the active gizmo. How a gizmos handler reacts to mouse vents is completely up to the implementation of the gizmo handler.
/*
** Example: GizmoManipulator
*/
// Setup the gizmo manipulator
Ref<EventDispatcher> eventDispatcher = EventDispatcher_GetInstance();
eventDispatcher.registerManipulator(GizmoManipulator());
// activate the manipulator
eventDispatcher.pushManipulator('GizmoManipulator');
// setup the scene.
InlineDrawing drawing = OGLInlineDrawing_GetInstance();
InlineShader surfaceShader = drawing.registerShader(OGLSurfaceShader());
InlineMaterial phongMaterial = surfaceShader.getOrCreateMaterial("phong");
// create a shape
PolygonMesh gizmoMesh = PolygonMesh();
gizmoMesh.addCuboid(Xfo(), 1.0, 1.0, 1.0, true, false);
InlineShape shape = InlineMeshShape('gizmoMesh', gizmoMesh);
// The following code generates several different geometries to be used as
// gizmos, and
Integer index;
// Position Axis Gizmo X
{
InlineTransform transform = StaticInlineTransform('PositionAxisGizmoTransformX', drawing.getRoot(), Xfo(Vec3(Scalar(index)*4.0, 0.0, 0.0)));
InlineInstance instance = InlineInstance('PositionAxisGizmoX', transform, shape, phongMaterial);
instance.setInstanceUniform(InlineUniform('u_diffuseColor', Color(1.0, 0.0, 0.0)));
TransformManipulationCallback callback();
callback.addTarget(transform);// the gizmo only manipulates itself
PositionAxisGizmoHandler handler(instance, Vec3(1.0, 0.0, 0.0), callback);
index++;
}
// Position Axis Gizmo Y
{
InlineTransform transform = StaticInlineTransform('PositionAxisGizmoTransformY', drawing.getRoot(), Xfo(Vec3(Scalar(index)*4.0, 0.0, 0.0)));
InlineInstance instance = InlineInstance('PositionAxisGizmoY', transform, shape, phongMaterial);
instance.setInstanceUniform(InlineUniform('u_diffuseColor', Color(0.0, 1.0, 0.0)));
TransformManipulationCallback callback();
callback.addTarget(transform);// the gizmo only manipulates itself
PositionAxisGizmoHandler handler(instance, Vec3(0.0, 1.0, 0.0), callback);
index++;
}
// Position Axis Gizmo Z
{
InlineTransform transform = StaticInlineTransform('PositionAxisGizmoTransformZ', drawing.getRoot(), Xfo(Vec3(Scalar(index)*4.0, 0.0, 0.0)));
InlineInstance instance = InlineInstance('PositionAxisGizmoZ', transform, shape, phongMaterial);
instance.setInstanceUniform(InlineUniform('u_diffuseColor', Color(0.0, 0.0, 1.0)));
TransformManipulationCallback callback();
callback.addTarget(transform);// the gizmo only manipulates itself
PositionAxisGizmoHandler handler(instance, Vec3(0.0, 0.0, 1.0), callback);
index++;
}
// Position Planar Gizmo XY
{
InlineTransform transform = StaticInlineTransform('PositionPlanarGizmoHandlerXY', drawing.getRoot(), Xfo(Vec3(Scalar(index)*4.0, 0.0, 0.0)));
InlineInstance instance = InlineInstance('PositionAxisGizmoXY', transform, shape, phongMaterial);
instance.setInstanceUniform(InlineUniform('u_diffuseColor', Color(1.0, 1.0, 0.0)));
TransformManipulationCallback callback();
callback.addTarget(transform);// the gizmo only manipulates itself
PositionPlanarGizmoHandler handler(instance, Vec3(0.0, 1.0, 0.0), callback);
index++;
}
// Orientation Axis Gizmo X
{
InlineTransform transform = StaticInlineTransform('OrientationAxisGizmoTransformX', drawing.getRoot(), Xfo(Vec3(Scalar(index)*4.0, 0.0, 0.0)));
InlineInstance instance = InlineInstance('OrientationAxisGizmoX', transform, shape, phongMaterial);
instance.setInstanceUniform(InlineUniform('u_diffuseColor', Color(1.0, 0.0, 0.0)));
TransformManipulationCallback callback();
callback.addTarget(transform);// the gizmo only manipulates itself
OrientationAxisGizmoHandler handler(instance, Vec3(1.0, 0.0, 0.0), callback);
index++;
}
// Orientation Axis Gizmo Y
{
InlineTransform transform = StaticInlineTransform('OrientationAxisGizmoTransformY', drawing.getRoot(), Xfo(Vec3(Scalar(index)*4.0, 0.0, 0.0)));
InlineInstance instance = InlineInstance('OrientationAxisGizmoY', transform, shape, phongMaterial);
instance.setInstanceUniform(InlineUniform('u_diffuseColor', Color(0.0, 1.0, 0.0)));
TransformManipulationCallback callback();
callback.addTarget(transform);// the gizmo only manipulates itself
OrientationAxisGizmoHandler handler(instance, Vec3(0.0, 1.0, 0.0), callback);
index++;
}
// Orientation Spherical Gizmo
{
InlineTransform transform = StaticInlineTransform('OrientationSphericalGizmoTransform', drawing.getRoot(), Xfo(Vec3(Scalar(index)*4.0, 0.0, 0.0)));
InlineInstance instance = InlineInstance('OrientationSphericalGizmo', transform, shape, phongMaterial);
instance.setInstanceUniform(InlineUniform('u_diffuseColor', Color(0.7, 0.7, 0.7)));
TransformManipulationCallback callback();
callback.addTarget(transform);// the gizmo only manipulates itself
OrientationSphericalGizmoHandler handler(instance, 0.001, callback);
index++;
}
Members¶
Scalar | coneThreshold | |
GizmoHandler | activeGizmoHandler | |
GizmoHandler | mouseOverGizmoHandler | |
GizmoCollector | collector | |
InlineInstance[] | gizmos |
Methods¶
GizmoManipulator ( in GizmoManipulator other ) | |
GizmoManipulator () | |
GizmoManipulator | clone ? () |
onDisable ! () | |
onEnable ! () | |
onEvent ! ( io Event event ) |