use of artisynth.core.modelbase.MutableCompositeComponent in project artisynth_core by artisynth.
the class RigidBodyConnectorList method createAndAddConnector.
private void createAndAddConnector(Point3d origin) {
BodyConnector connector;
RigidTransform3d TCW = new RigidTransform3d();
TCW.R.set(myBodyA.getPose().R);
TCW.p.set(origin);
RigidTransform3d TCA = new RigidTransform3d();
TCA.mulInverseLeft(myBodyA.getPose(), TCW);
if (myComponentType == RevoluteJoint.class) {
RevoluteJoint joint;
if (myBodyB == null) {
joint = new RevoluteJoint(myBodyA, TCA, TCW);
} else {
RigidTransform3d TCB = new RigidTransform3d();
TCB.mulInverseLeft(myBodyB.getPose(), TCW);
joint = new RevoluteJoint(myBodyA, TCA, myBodyB, TCB);
}
connector = joint;
} else if (myComponentType == SphericalJoint.class) {
SphericalJoint joint;
if (myBodyB == null) {
joint = new SphericalJoint(myBodyA, TCA, TCW);
} else {
RigidTransform3d TCB = new RigidTransform3d();
TCB.mulInverseLeft(myBodyB.getPose(), TCW);
joint = new SphericalJoint(myBodyA, TCA, myBodyB, TCB);
}
connector = joint;
} else {
throw new InternalErrorException("Unimplemented connector type " + myComponentType);
}
connector.setName(getNameFieldValue());
setProperties(connector, getPrototypeComponent(myComponentType));
// update properties in the prototype as well ...
setProperties(myPrototype, myPrototype);
addComponent(new AddComponentsCommand("add BodyConnector", connector, (MutableCompositeComponent<?>) myModel.bodyConnectors()));
setState(State.Complete);
myMain.setSelectionMode(Main.SelectionMode.Translate);
}
Aggregations