private static Material CreateMaterial(this Link.Visual.Material urdfMaterial) { if (MaterialsCreated.ContainsKey(urdfMaterial.name)) { return(MaterialsCreated[urdfMaterial.name]); } if (urdfMaterial.name == "") { urdfMaterial.name = GenerateMaterialName(urdfMaterial); } //var material = AssetDatabase.LoadAssetAtPath<Material>(UrdfAssetPathHandler.GetMaterialAssetPath(urdfMaterial.name)); var all = Resources.LoadAll("", typeof(Material)); var material = all.FirstOrDefault(x => x.name == urdfMaterial.name); if (material != null) //material already exists { MaterialsCreated[urdfMaterial.name] = material as Material; return(material as Material); } else { return(new Material(Shader.Find("Specular"))); } }
private static Material CreateMaterial(this Link.Visual.Material urdfMaterial) { if (urdfMaterial.name == "") { urdfMaterial.name = GenerateMaterialName(urdfMaterial); } var material = AssetDatabase.LoadAssetAtPath <Material>(UrdfAssetPathHandler.GetMaterialAssetPath(urdfMaterial.name)); if (material != null) //material already exists { return(material); } material = InitializeMaterial(); if (urdfMaterial.color != null) { material.color = CreateColor(urdfMaterial.color); } else if (urdfMaterial.texture != null) { material.mainTexture = LoadTexture(urdfMaterial.texture.filename); } AssetDatabase.CreateAsset(material, UrdfAssetPathHandler.GetMaterialAssetPath(urdfMaterial.name)); return(material); }
public static Link.Visual ExportVisualData(this UrdfVisual urdfVisual) { UrdfGeometry.CheckForUrdfCompatibility(urdfVisual.transform, urdfVisual.geometryType); Link.Geometry geometry = UrdfGeometry.ExportGeometryData(urdfVisual.geometryType, urdfVisual.transform); Link.Visual.Material material = null; if ((geometry.mesh != null)) { material = UrdfMaterial.ExportMaterialData(urdfVisual.GetComponentInChildren <MeshRenderer>().sharedMaterial); } string visualName = urdfVisual.name == "unnamed" ? null : urdfVisual.name; return(new Link.Visual(geometry, visualName, UrdfOrigin.ExportOriginData(urdfVisual.transform), material)); }
public static Link.Visual ExportVisualData(this UrdfVisual urdfVisual) { UrdfGeometry.CheckForUrdfCompatibility(urdfVisual.transform, urdfVisual.GeometryType); Link.Geometry geometry = UrdfGeometry.ExportGeometryData(urdfVisual.GeometryType, urdfVisual.transform); Link.Visual.Material material = null; if (!(geometry.mesh != null && geometry.mesh.filename.ToLower().EndsWith(".dae"))) //Collada files contain their own materials { material = UrdfMaterial.ExportMaterialData(urdfVisual.GetComponentInChildren <MeshRenderer>().sharedMaterial); } string visualName = urdfVisual.name == "unnamed" ? null : urdfVisual.name; return(new Link.Visual(geometry, visualName, UrdfOrigin.ExportOriginData(urdfVisual.transform), material)); }
private SpatialMaterial CreateMaterial(Link.Visual.Material baseMat) { if (baseMat == null) { return(null); } SpatialMaterial temp = new SpatialMaterial(); var matColor = new Godot.Color(); matColor.r = (float)baseMat.color.rgba[0]; matColor.g = (float)baseMat.color.rgba[1]; matColor.b = (float)baseMat.color.rgba[2]; matColor.a = (float)baseMat.color.rgba[3]; temp.AlbedoColor = matColor; return(temp); }
public static void SetUrdfMaterial(GameObject gameObject, Link.Visual.Material urdfMaterial) { if (urdfMaterial != null) { var material = CreateMaterial(urdfMaterial); SetMaterial(gameObject, material); } else { //If the URDF material is not defined, and the renderer is missing //a material, assign the default material. Renderer renderer = gameObject.GetComponentInChildren <Renderer>(); if (renderer != null && renderer.sharedMaterial == null) { var defaultMaterial = AssetDatabase.LoadAssetAtPath <Material>(UrdfAssetPathHandler.GetMaterialAssetPath(DefaultMaterialName)); SetMaterial(gameObject, defaultMaterial); } } }
public static void SetUrdfMaterial(GameObject gameObject, Link.Visual.Material urdfMaterial) { if (urdfMaterial != null) { var material = CreateMaterial(urdfMaterial); SetMaterial(gameObject, material); } else { //If the URDF material is not defined, and the renderer is missing //a material, assign the default material. Renderer renderer = gameObject.GetComponentInChildren <Renderer>(); if (renderer != null && renderer.sharedMaterial == null) { var defaultMaterial = new Material(Shader.Find("Specular")); SetMaterial(gameObject, defaultMaterial); } } }
private static string GenerateMaterialName(Link.Visual.Material urdfMaterial) { var materialName = ""; if (urdfMaterial.color != null) { materialName = "rgba-"; for (var i = 0; i < urdfMaterial.color.rgba.Length; i++) { materialName += urdfMaterial.color.rgba[i]; if (i != urdfMaterial.color.rgba.Length - 1) { materialName += "-"; } } } else if (urdfMaterial.texture != null) { materialName = "texture-" + Path.GetFileName(urdfMaterial.texture.filename); } return(materialName); }
/// <summary> /// Compares material information of two visuals /// </summary> /// <param name="source">First visual's material information to be compared</param> /// <param name="exported">Second visuals's material information to be compared</param> /// <param name="indent">Indent level in the log file</param> /// <returns></returns> private bool CompareMaterial(Link.Visual.Material source, Link.Visual.Material exported, int indent) { bool materialNameEqual = source.name == exported.name; linkLog.AppendLine(String.Format("{0}Name Equal:{1,6}", Indent(indent), materialNameEqual)); 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 (!materialNameEqual) { return(false); } if (source.color != null && exported.color != null) { for (int i = 0; i < 3; i++) { if (source.color.rgba[i] != exported.color.rgba[i]) { linkLog.AppendLine(String.Format("{0}Colors Equal: {1,6}", Indent(indent), "False")); linkLog.AppendLine(String.Format("{0}RGB Source: {1,5:F3} {2,5:F3} {3,5:F3} ", Indent(indent), source.color.rgba[0], source.color.rgba[1], source.color.rgba[2])); linkLog.AppendLine(String.Format("{0}RGB Exported: {1,5:F3} {2,5:F3} {3,5:F3}", Indent(indent), exported.color.rgba[0], exported.color.rgba[1], exported.color.rgba[2])); return(false); } } linkLog.AppendLine(String.Format("{0}Colors Equal: {1,6}", Indent(indent), "True")); linkLog.AppendLine(String.Format("{0}RGB :{1,5:F3} {2,5:F3} {3,5:F3} ", Indent(indent), source.color.rgba[0], source.color.rgba[1], source.color.rgba[2])); } else if (source.color == null && exported.color == null) { linkLog.AppendLine(String.Format("{0} Color nullity equality:{1,6}", Indent(indent), "True")); } else { linkLog.AppendLine(String.Format("{0} Color nullity equality:{1,6}", Indent(indent), "False")); return(false); } if (source.texture != null && exported.texture != null) { bool textureNameEqual = (source.texture.filename != exported.texture.filename); linkLog.AppendLine(String.Format("{0}Name Equal: {1,6}", Indent(indent), textureNameEqual)); linkLog.AppendLine(String.Format("{0}Name: Source:{1,12}", Indent(indent), source.texture.filename)); linkLog.AppendLine(String.Format("{0}Exported:{1,12}", Indent(indent), exported.texture.filename)); if (!textureNameEqual) { return(false); } } else if (source.texture == null && source.texture == null) { linkLog.AppendLine(String.Format("{0}Texture nullity equality:{1,6}", Indent(indent), "True")); } else { linkLog.AppendLine(String.Format("{0}Texture nullity equality:{1,6}", Indent(indent), "False")); return(false); } return(true); }
private static void Main(string[] args) { string newRobotAssetPath = Path.Combine(Directory.GetCurrentDirectory(), "..", "..", "TestResults"); Directory.CreateDirectory(newRobotAssetPath); string exportPath = Path.Combine(newRobotAssetPath, "testing_export.urdf"); Robot robot = new Robot(exportPath, "TestRobot"); //Test material library Link.Visual.Material material = new Link.Visual.Material("blue", new Link.Visual.Material.Color(new double[] { 0, 0, 1, 1 })); robot.materials.Add(material); //Test link Link link = new Link("test_link_1", new Link.Inertial( 111.0, new Origin(new double[] { 0, 1, 2 }, new double[] { 0, 1, 2 }), new Link.Inertial.Inertia(0.01, 0.02, 0.03, 0.04, 0.05, 0.06) )); link.visuals.Add(new Link.Visual( new Link.Geometry(new Link.Geometry.Box(new double[] { 4, 1, 2 })), null, new Origin(new double[] { 0, 0, 0 }, new double[] { 0, 1, 1 }), new Link.Visual.Material("blue")) ); link.collisions.Add(new Link.Collision( new Link.Geometry(new Link.Geometry.Box(new double[] { 4, 1, 2 }))) ); robot.links.Add(link); //Test second link robot.links.Add(new Link("test_link_2")); //Test joint Joint joint = new Joint( "test_joint_1", "fixed", "test_link_1", "test_link_2", new Origin(new double[] { 0, 1, 2 }, new double[] { 0, 1, 2 }), new Joint.Axis(new[] { 0.1, 0.2, 0.3 }), new Joint.Calibration(0.1), new Joint.Dynamics(0.4, 0.000001), new Joint.Limit(0, 0, 3, 10), new Joint.Mimic("test_joint_1"), new Joint.SafetyController(-10, 10, 0, 2) ); robot.joints.Add(joint); //Test plugin Plugin plugin = new Plugin("<hello>\n\tWORLD!\n</hello>"); robot.plugins.Add(plugin); //Test export to URDF robot.WriteToUrdf(); //Output file to console Console.WriteLine("Test URDF was written to " + exportPath + "\n"); if (File.Exists(exportPath)) { using (TextReader tr = new StreamReader(exportPath)) { string line; while ((line = tr.ReadLine()) != null) { Console.WriteLine(line); } } } Console.WriteLine("\nPress any key to close..."); Console.ReadKey(true); }