Exemple #1
0
        public CyPhy.KinematicJoint CyphyJoint; // The original joint

        public KinematicJoint(CyPhy.KinematicJoint kJoint)
        {
            CyphyJoint = kJoint;
            JointType  = GetJointType(kJoint);
            Name       = kJoint.Name;
            CyPhyID    = kJoint.ID;

            // TODO: Error handling - many things can go wrong here
            if (kJoint is CyPhy.HasKinematicRotationalLimit)
            {
                foreach (var limit in (kJoint as CyPhy.HasKinematicRotationalLimit).SrcConnections.KinematicRotationalLimitCollection)
                {
                    if (limit.Attributes.LimitType == CyPhyClasses.KinematicRotationalLimit.AttributesClass.LimitType_enum.Default)
                    {
                        RotationLimitDefault = Double.Parse(limit.SrcEnds.Parameter.Attributes.Value);
                    }
                    else if (limit.Attributes.LimitType == CyPhyClasses.KinematicRotationalLimit.AttributesClass.LimitType_enum.Max)
                    {
                        RotationLimitMax = Double.Parse(limit.SrcEnds.Parameter.Attributes.Value);
                    }
                    else if (limit.Attributes.LimitType == CyPhyClasses.KinematicRotationalLimit.AttributesClass.LimitType_enum.Min)
                    {
                        RotationLimitMin = Double.Parse(limit.SrcEnds.Parameter.Attributes.Value);
                    }
                }
            }
            if (kJoint is CyPhy.HasKinematicTranslationalLimit)
            {
                foreach (var limit in (kJoint as CyPhy.HasKinematicTranslationalLimit).DstConnections.KinematicTranslationallLimitCollection)
                {
                    if (limit.Attributes.LimitType == CyPhyClasses.KinematicTranslationallLimit.AttributesClass.LimitType_enum.Default)
                    {
                        TranslationLimitDefault = Double.Parse(limit.DstEnds.Parameter.Attributes.Value);
                    }
                    else if (limit.Attributes.LimitType == CyPhyClasses.KinematicTranslationallLimit.AttributesClass.LimitType_enum.Max)
                    {
                        TranslationLimitMax = Double.Parse(limit.DstEnds.Parameter.Attributes.Value);
                    }
                    else if (limit.Attributes.LimitType == CyPhyClasses.KinematicTranslationallLimit.AttributesClass.LimitType_enum.Min)
                    {
                        TranslationLimitMin = Double.Parse(limit.DstEnds.Parameter.Attributes.Value);
                    }
                }
            }

            if (!String.IsNullOrEmpty(kJoint.Attributes.GeometricMarker))
            {
                Marker = new GeometryMarkerRep(kJoint.Attributes.GeometricMarker);
                if (kJoint.ParentContainer.ParentContainer.Kind == "Component")
                {
                    Marker.ComponentID = CyPhyClasses.Component.Cast(kJoint.ParentContainer.ParentContainer.Impl).Attributes.InstanceGUID;
                }
            }
        }
        public CyPhy.KinematicJoint CyphyJoint; // The original joint

        public KinematicJoint(CyPhy.KinematicJoint kJoint)
        {
            CyphyJoint = kJoint;
            JointType = GetJointType(kJoint);
            Name = kJoint.Name;
            CyPhyID = kJoint.ID;

            // TODO: Error handling - many things can go wrong here
            if (kJoint is CyPhy.HasKinematicRotationalLimit)
            {
                foreach (var limit in (kJoint as CyPhy.HasKinematicRotationalLimit).SrcConnections.KinematicRotationalLimitCollection)
                {
                    if (limit.Attributes.LimitType == CyPhyClasses.KinematicRotationalLimit.AttributesClass.LimitType_enum.Default)
                    {
                        RotationLimitDefault = Double.Parse(limit.SrcEnds.Parameter.Attributes.Value);
                    }
                    else if (limit.Attributes.LimitType == CyPhyClasses.KinematicRotationalLimit.AttributesClass.LimitType_enum.Max)
                    {
                        RotationLimitMax = Double.Parse(limit.SrcEnds.Parameter.Attributes.Value);
                    }
                    else if (limit.Attributes.LimitType == CyPhyClasses.KinematicRotationalLimit.AttributesClass.LimitType_enum.Min)
                    {
                        RotationLimitMin = Double.Parse(limit.SrcEnds.Parameter.Attributes.Value);
                    }
                }
            }
            if (kJoint is CyPhy.HasKinematicTranslationalLimit)
            {
                foreach (var limit in (kJoint as CyPhy.HasKinematicTranslationalLimit).DstConnections.KinematicTranslationallLimitCollection)
                {
                    if (limit.Attributes.LimitType == CyPhyClasses.KinematicTranslationallLimit.AttributesClass.LimitType_enum.Default)
                    {
                        TranslationLimitDefault = Double.Parse(limit.DstEnds.Parameter.Attributes.Value);
                    }
                    else if (limit.Attributes.LimitType == CyPhyClasses.KinematicTranslationallLimit.AttributesClass.LimitType_enum.Max)
                    {
                        TranslationLimitMax = Double.Parse(limit.DstEnds.Parameter.Attributes.Value);
                    }
                    else if (limit.Attributes.LimitType == CyPhyClasses.KinematicTranslationallLimit.AttributesClass.LimitType_enum.Min)
                    {
                        TranslationLimitMin = Double.Parse(limit.DstEnds.Parameter.Attributes.Value);
                    }
                }
            }

            if (!String.IsNullOrEmpty(kJoint.Attributes.GeometricMarker))
            {
                Marker = new GeometryMarkerRep(kJoint.Attributes.GeometricMarker);
                if (kJoint.ParentContainer.ParentContainer.Kind == "Component")
                {
                    Marker.ComponentID = CyPhyClasses.Component.Cast(kJoint.ParentContainer.ParentContainer.Impl).Attributes.InstanceGUID;
                }
            }


        }