示例#1
0
        public static RigidNode_Base ExportSkeleton(IProgress <ProgressUpdate> progress)
        {
            // If no components
            if (RobotExporterAddInServer.Instance.OpenAssemblyDocument.ComponentDefinition.Occurrences.OfType <ComponentOccurrence>().ToList().Count == 0)
            {
                return(null);
            }

            //Getting Rigid Body Info...
            progress?.Report(new ProgressUpdate("Getting physics info...", 1, 4));
            var rigidGetOptions = RobotExporterAddInServer.Instance.Application.TransientObjects.CreateNameValueMap();

            rigidGetOptions.Add("DoubleBearing", false);
            var asmDocument     = RobotExporterAddInServer.Instance.OpenAssemblyDocument;
            var rawRigidResults = asmDocument.ComponentDefinition.RigidBodyAnalysis(rigidGetOptions);
            var rigidResults    = new CustomRigidResults(rawRigidResults);

            try
            {
                RigidBodyCleaner.CleanGroundedBodies(rigidResults);
            }
            catch (NoGroundException)
            {
                WinFormsUtils.ShowErrorDialog("Please ground a part in your assembly to export your robot.", "No Ground");
                return(null);
            }

            //Building Model...
            progress?.Report(new ProgressUpdate("Building model...", 2, 4));

            var skeletonBase = RigidBodyCleaner.BuildAndCleanDijkstra(rigidResults);

            //Cleaning Up...
            progress?.Report(new ProgressUpdate("Cleaning up...", 3, 4));
            var nodes = new List <RigidNode_Base>();

            skeletonBase.ListAllNodes(nodes);
            foreach (var node in nodes)
            {
                node.ModelFileName = ((RigidNode)node).group.ToString();
                node.ModelFullID   = node.GetModelID();
            }

            progress?.Report(new ProgressUpdate("Done", 4, 4));
            return(skeletonBase);
        }