public BEPUikJoint(BEPUikBone connectionA, BEPUikBone connectionB, String name, SimObject instance)
     : base(name)
 {
     this.connectionA          = connectionA;
     this.connectionB          = connectionB;
     connectionAPositionOffset = instance.Translation - connectionA.Owner.Translation;
 }
Exemple #2
0
 public BEPUikDragControl(BEPUikBone bone, BEPUikScene scene, BEPUikDragControlDefinition definition, SimObjectBase instance)
     : base(scene, definition.Name)
 {
     this.bone                      = bone;
     dragControl                    = new DragControl();
     dragControl.TargetBone         = bone.IkBone;
     dragControl.LinearMotor.Offset = (instance.Translation - bone.Owner.Translation).toBepuVec3();
     dragControl.MaximumForce       = definition.MaximumForce;
 }
Exemple #3
0
        internal override void createProduct(SimObjectBase instance, BEPUikScene scene)
        {
            BEPUikBone bone;

            if (LocalRotQuat.HasValue)
            {
                bone = new BEPUikBoneLocalRot(this, instance, scene);
            }
            else
            {
                bone = new BEPUikBone(this, instance, scene);
            }
            instance.addElement(bone);
        }
Exemple #4
0
 public BEPUikTwistLimit(BEPUikBone connectionA, BEPUikBone connectionB, BEPUikTwistLimitDefinition definition, String name, SimObject instance)
     : base(connectionA, connectionB, name, instance)
 {
     limit = new IKTwistLimit(connectionA.IkBone, connectionB.IkBone, definition.AxisA.toBepuVec3(), definition.AxisB.toBepuVec3(), definition.MaximumAngle);
     if (definition.MeasurementAxisA.HasValue)
     {
         limit.MeasurementAxisA = definition.MeasurementAxisA.Value.toBepuVec3();
     }
     if (definition.MeasurementAxisB.HasValue)
     {
         limit.MeasurementAxisB = definition.MeasurementAxisB.Value.toBepuVec3();
     }
     setupLimit(definition);
 }
        internal void addBone(BEPUikBone bone)
        {
            BEPUikSolver solver;

            if (namedSolvers.TryGetValue(bone.SolverName, out solver))
            {
                solver.addBone(bone);
            }
            else
            {
                SimObjectErrorManager.AddAndLogError(new SimObjectError()
                {
                    Subsystem   = BEPUikInterface.PluginName,
                    ElementName = bone.Name,
                    Type        = bone.GetType().Name,
                    SimObject   = bone.Owner.Name,
                    Message     = String.Format("Cannot find an IKSolver named '{0}' Bone not added to scene.", bone.SolverName)
                });
            }
        }
        internal override void createProduct(SimObjectBase instance, BEPUikScene scene)
        {
            BEPUikBone connectionA = null;
            BEPUikBone connectionB = null;

            SimObject other = instance.getOtherSimObject(ConnectionASimObjectName);

            if (other == null)
            {
                throw new BEPUikBlacklistException("Cannot find ConnectionA SimObject named '{0}'", ConnectionASimObjectName);
            }

            connectionA = other.getElement(ConnectionABoneName) as BEPUikBone;
            if (connectionA == null)
            {
                throw new BEPUikBlacklistException("Cannot find ConnectionA bone named '{0}' in '{1}'", ConnectionABoneName, ConnectionASimObjectName);
            }

            other = instance.getOtherSimObject(ConnectionBSimObjectName);
            if (other == null)
            {
                throw new BEPUikBlacklistException("Cannot find ConnectionB SimObject named '{0}'", ConnectionBSimObjectName);
            }

            connectionB = other.getElement(ConnectionBBoneName) as BEPUikBone;
            if (connectionB == null)
            {
                throw new BEPUikBlacklistException("Cannot find ConnectionB bone named '{0}' in '{1}'", ConnectionBBoneName, ConnectionBSimObjectName);
            }

            SimElement element = createConstraint(connectionA, connectionB, instance);

            if (element != null)
            {
                instance.addElement(element);
            }
        }
Exemple #7
0
 internal void addBone(BEPUikBone bone)
 {
     bones.Add(bone);
     solveBones.Add(bone.IkBone);
 }
 public BEPUikPointOnLineJoint(BEPUikBone connectionA, BEPUikBone connectionB, BEPUikPointOnLineJointDefinition definition, String name, SimObject instance)
     : base(connectionA, connectionB, name, instance)
 {
     joint = new IKPointOnLineJoint(connectionA.IkBone, connectionB.IkBone, instance.Translation.toBepuVec3(), definition.LineDirection.toBepuVec3(), instance.Translation.toBepuVec3());
     setupJoint(definition);
 }
 public BEPUikBallSocketJoint(BEPUikBone connectionA, BEPUikBone connectionB, Vector3 anchor, BEPUikBallSocketJointDefinition definition, String name, SimObject instance)
     : base(connectionA, connectionB, name, instance)
 {
     joint = new IKBallSocketJoint(connectionA.IkBone, connectionB.IkBone, anchor.toBepuVec3());
     setupJoint(definition);
 }
 protected override SimElement createConstraint(BEPUikBone connectionA, BEPUikBone connectionB, SimObjectBase instance)
 {
     return(new BEPUikSwivelHingeJoint(connectionA, connectionB, this, Name, instance));
 }
Exemple #11
0
 protected override SimElement createConstraint(BEPUikBone connectionA, BEPUikBone connectionB, SimObjectBase instance)
 {
     return(new BEPUikDistanceLimit(connectionA, connectionB, instance.Translation, this, Name, instance));
 }
Exemple #12
0
 public BEPUikRevoluteJoint(BEPUikBone connectionA, BEPUikBone connectionB, BEPUikRevoluteJointDefinition definition, String name, SimObject instance)
     : base(connectionA, connectionB, name, instance)
 {
     joint = new IKRevoluteJoint(connectionA.IkBone, connectionB.IkBone, definition.WorldFreeAxis.toBepuVec3());
     setupJoint(definition);
 }
Exemple #13
0
 public BEPUikSwingLimit(BEPUikBone connectionA, BEPUikBone connectionB, BEPUikSwingLimitDefinition definition, String name, SimObject instance)
     : base(connectionA, connectionB, name, instance)
 {
     limit = new IKSwingLimit(connectionA.IkBone, connectionB.IkBone, definition.AxisA.toBepuVec3(), definition.AxisB.toBepuVec3(), definition.MaximumAngle);
     setupLimit(definition);
 }
 protected abstract SimElement createConstraint(BEPUikBone connectionA, BEPUikBone connectionB, SimObjectBase instance);
Exemple #15
0
 internal void removeBone(BEPUikBone bone)
 {
     bones.Remove(bone);
     solveBones.Remove(bone.IkBone);
 }
Exemple #16
0
 public BEPUikSwivelHingeJoint(BEPUikBone connectionA, BEPUikBone connectionB, BEPUikSwivelHingeJointDefinition definition, String name, SimObject instance)
     : base(connectionA, connectionB, name, instance)
 {
     joint = new IKSwivelHingeJoint(connectionA.IkBone, connectionB.IkBone, definition.WorldHingeAxis.toBepuVec3(), definition.WorldTwistAxis.toBepuVec3());
     setupJoint(definition);
 }
 public BEPUikAngularJoint(BEPUikBone connectionA, BEPUikBone connectionB, BEPUikAngularJointDefinition definition, String name, SimObject instance)
     : base(connectionA, connectionB, name, instance)
 {
     joint = new IKAngularJoint(connectionA.IkBone, connectionB.IkBone);
     setupJoint(definition);
 }
Exemple #18
0
 public BEPUikDistanceJoint(BEPUikBone connectionA, BEPUikBone connectionB, BEPUikDistanceJointDefinition definition, String name, SimObject instance)
     : base(connectionA, connectionB, name, instance)
 {
     joint = new IKDistanceJoint(connectionA.IkBone, connectionB.IkBone, connectionA.Owner.Translation.toBepuVec3(), connectionB.Owner.Translation.toBepuVec3());
     setupJoint(definition);
 }
Exemple #19
0
 public BEPUikLimit(BEPUikBone connectionA, BEPUikBone connectionB, String name, SimObject instance)
     : base(connectionA, connectionB, name, instance)
 {
 }
 public BEPUikDistanceLimit(BEPUikBone connectionA, BEPUikBone connectionB, Vector3 anchor, BEPUikDistanceLimitDefinition definition, String name, SimObject instance)
     : base(connectionA, connectionB, name, instance)
 {
     limit = new IKDistanceLimit(connectionA.IkBone, connectionB.IkBone, anchor.toBepuVec3(), anchor.toBepuVec3(), definition.MinimumDistance, definition.MaximumDistance);
     setupLimit(definition);
 }