Exemple #1
0
        /// <summary>
        /// <para>CreateCollisionGeometry</para>
        /// Similar to CreateVisualGeometry, except it uses a links
        /// collision information to generate a Godot Shape.
        /// </summary>
        /// <param name="collisions">List of Collision information.</param>
        /// <returns></returns>
        public MeshInstance CreateCollisionGeometry(List <Link.Collision> collisions)
        {
            if (collisions.Count < 1)
            {
                return(null);
            }
            Link.Collision workingCol = collisions[0];
            MeshInstance   mshInt     = new MeshInstance();

            if (workingCol.geometry.box != null)
            {
                mshInt.Mesh = CreateBox(workingCol.geometry.box);
                return(mshInt);
            }
            if (workingCol.geometry.cylinder != null)
            {
                mshInt.Mesh = CreateCylinder(workingCol.geometry.cylinder);
                return(mshInt);
            }
            if (workingCol.geometry.sphere != null)
            {
                mshInt.Mesh = CreateSphere(workingCol.geometry.sphere);
                return(mshInt);
            }
            if (workingCol.geometry.mesh != null)
            {
                MeshInstance val = CreateMesh(workingCol.geometry.mesh);
                return(val);
            }
            return(null);
        }
Exemple #2
0
        public static void Create(Transform parent, Link.Collision collision)
        {
            GameObject collisionObject = new GameObject("unnamed");

            collisionObject.transform.SetParentAndAlign(parent);
            UrdfCollision urdfCollision = collisionObject.AddComponent <UrdfCollision>();

            urdfCollision.geometryType = UrdfGeometry.GetGeometryType(collision.geometry);
            UrdfGeometryCollision.Create(collisionObject.transform, urdfCollision.geometryType, collision.geometry);
            UrdfOrigin.ImportOriginData(collisionObject.transform, collision.origin);
        }
        public static void Create(Transform parent, Link.Collision collision)
        {
            if (String.IsNullOrEmpty(collision.name))
            {
                collision.name = collision.GenerateNonReferenceID();
            }

            if (parent.FindChildOrCreateWithComponent(collision.name, out GameObject collisionObject, out UrdfCollision urdfCollision))
            {
                urdfCollision.geometryType = UrdfGeometry.GetGeometryType(collision.geometry);

                UrdfGeometryCollision.Create(collisionObject.transform, urdfCollision.geometryType, collision.geometry);
                UrdfOrigin.ImportOriginData(collisionObject.transform, collision.origin);
            }
        }
        /// <summary>
        /// Compares colliison information of two links
        /// </summary>
        /// <param name="source">First links's collision information to be compared</param>
        /// <param name="exported">Second link's collision information to be compared</param>
        /// <param name="indent">Indent level in the log file</param>
        /// <returns></returns>
        private bool CompareCollisions(Link.Collision source, Link.Collision exported, int indent)
        {
            bool colliisonNameEqual = (source.name == exported.name);

            linkLog.AppendLine(String.Format("{0}Collision Name", Indent(indent)));
            linkLog.AppendLine(String.Format("{0}Equal: {1,6}", Indent(indent), colliisonNameEqual));
            linkLog.AppendLine(String.Format("{0}Name: Source: {1,12}", Indent(indent), source.name));
            linkLog.AppendLine(String.Format("{0}Exported: {1,12}", Indent(indent), exported.name));

            if (!colliisonNameEqual)
            {
                return(false);
            }

            if (!CompareOrigin(source.origin, exported.origin, indent))
            {
                return(false);
            }
            if (!CompareGeometry(source.geometry, exported.geometry, indent))
            {
                return(false);
            }
            return(true);
        }