// TODO /// <summary> /// <para>CreateVisualGeometry</para> /// Parses a ROS link and creates a MeshInstance for the visual /// geometry specified in that link. /// </summary> /// <param name="visuals">List of visuals stored in the Urdf link.</param> /// <returns> /// <para> /// A mesh containing the accurate visual geometry of the link if no error. /// <para> /// <para> /// Null if there was an error. /// </para></returns> public Godot.Mesh CreateVisualGeometry(List <Link.Visual> visuals) { // The union of the geometries defined in the list define // the end visual of the link, but for now we will just use // the first one if (visuals.Count < 1) { return(null); } Link.Visual workingVis = visuals[0]; // Create the material if it exists SpatialMaterial linkMat = CreateMaterial(workingVis.material); // Create the meshs if (workingVis.geometry.box != null) { return(CreateBox(workingVis.geometry.box, linkMat)); } if (workingVis.geometry.cylinder != null) { return(CreateCylinder(workingVis.geometry.cylinder, linkMat)); } if (workingVis.geometry.sphere != null) { return(CreateSphere(workingVis.geometry.sphere, linkMat)); } if (workingVis.geometry.mesh != null) { return(CreateMesh(workingVis.geometry.mesh).Mesh); } return(null); }
public void _Reads_Visual_Origins() { robot.ConstructFromString(urdfString); Link sensorLink = robot.links.Find(link => link.name == "sensor_link"); Link.Visual visual = sensorLink.visuals[0]; Origin origin = visual.origin; Assert.That(origin.Xyz, Is.EqualTo(new[] { 0.1d, 0.2d, 0.3d })); Assert.That(origin.Rpy, Is.EqualTo(new[] { 0.4d, 0.5d, 0.6d })); }
public static void Create(Transform parent, Link.Visual visual) { GameObject visualObject = new GameObject(visual.name ?? "unnamed"); visualObject.transform.SetParentAndAlign(parent); UrdfVisual urdfVisual = visualObject.AddComponent <UrdfVisual>(); urdfVisual.GeometryType = UrdfGeometry.GetGeometryType(visual.geometry); UrdfGeometryVisual.Create(visualObject.transform, urdfVisual.GeometryType, visual.geometry); UrdfMaterial.SetUrdfMaterial(visualObject, visual.material); UrdfOrigin.ImportOriginData(visualObject.transform, visual.origin); }
/// <summary> /// Compares visual information of two links /// </summary> /// <param name="source">First link's visual information to be compared</param> /// <param name="exported">Second link's visual information to be compared</param> /// <param name="indent">Indent level in the log file</param> /// <returns></returns> private bool CompareVisual(Link.Visual source, Link.Visual exported, int indent) { bool visualNameEqual = (source.name == exported.name); linkLog.AppendLine(String.Format("{0}Visual Component Name : {1,6}", Indent(indent + 1), visualNameEqual)); if (!visualNameEqual) { return(false); } if (!CompareOrigin(source.origin, exported.origin, indent)) { return(false); } linkLog.AppendLine(String.Format("{0}Geometry Checks", Indent(indent))); if (!CompareGeometry(source.geometry, exported.geometry, indent + 1)) { return(false); } linkLog.AppendLine(String.Format("{0}Material Checks", Indent(indent))); if (source.material == null && exported.material == null) { linkLog.AppendLine(String.Format("{0}Material Nullity Check: {1,6}", Indent(indent), "True")); return(true); } else if (source.material != null && exported.material != null) { linkLog.AppendLine(String.Format("{0}Material Nullity Check: {1,6}", Indent(indent), "True")); if (!CompareMaterial(source.material, exported.material, indent + 1)) { return(false); } } else if ((source.material == null && exported.material.name == "Default-Material") || (exported.material == null && source.material?.name == "Default-Material")) { linkLog.AppendLine(String.Format("{0}Material Nullity Check: {1,6}", Indent(indent), "True")); return(true); } else { linkLog.AppendLine(String.Format("{0}Material Nullity Check: {1,6}", Indent(indent), "False")); return(false); } return(true); }
public static void Create(Transform parent, Link.Visual visual) { if (String.IsNullOrEmpty(visual.name)) { visual.name = visual.GenerateNonReferenceID(); } if (parent.FindChildOrCreateWithComponent <UrdfVisual>(visual.name, out GameObject visualObject, out UrdfVisual urdfVisual)) { //only create these visuals if the gameobject had to be created itself urdfVisual.GeometryType = UrdfGeometry.GetGeometryType(visual.geometry); UrdfGeometryVisual.Create(visualObject.transform, urdfVisual.GeometryType, visual.geometry); } //update these values every time UrdfMaterial.SetUrdfMaterial(visualObject, visual.material); UrdfOrigin.ImportOriginData(visualObject.transform, visual.origin); }