예제 #1
0
        public void RemoveToolpaths(ToolpathSO sourceSO)
        {
            List <AnalysisViz> found;

            lock (SOToAnalysis) {
                if (SOToAnalysis.TryGetValue(sourceSO, out found))
                {
                    foreach (var analysis in found)
                    {
                        analysis.OnComputeUpdateRequired  -= OnVisualizationRequestedUpdate;
                        analysis.OnGeometryUpdateRequired -= OnVisualizationHasGeometryUpdate;
                        analysis.Disconnect();
                    }
                    SOToAnalysis.Remove(sourceSO);
                }
            }
            lock (DirtyList) {
                if (found != null)
                {
                    foreach (var analysis in found)
                    {
                        DirtyList.Remove(analysis);
                    }
                }
            }
        }
예제 #2
0
 T find_by_type <T>(SceneObject so) where T : class, AnalysisViz
 {
     lock (SOToAnalysis) {
         List <AnalysisViz> l;
         if (SOToAnalysis.TryGetValue(so, out l))
         {
             foreach (var a in l)
             {
                 if (a is T)
                 {
                     return(a as T);
                 }
             }
         }
         return(null);
     }
 }
예제 #3
0
        void add_new_so_analysis(SceneObject so, AnalysisViz analysis)
        {
            lock (SOToAnalysis) {
                List <AnalysisViz> l;
                if (SOToAnalysis.TryGetValue(so, out l) == false)
                {
                    l = new List <AnalysisViz>();
                    SOToAnalysis[so] = l;
                }
                l.Add(analysis);
            }

            analysis.OnComputeUpdateRequired  += OnVisualizationRequestedUpdate;
            analysis.OnGeometryUpdateRequired += OnVisualizationHasGeometryUpdate;

            lock (DirtyList) {
                DirtyList.Add(analysis);
                processThreadEvent.Set();
            }
        }
예제 #4
0
        public void AddMesh(DMeshSO sourceSO)
        {
            // make sure we have this SO
            lock (SOToAnalysis) {
                List <AnalysisViz> l;
                if (SOToAnalysis.TryGetValue(sourceSO, out l) == false)
                {
                    l = new List <AnalysisViz>();
                    SOToAnalysis[sourceSO] = l;
                }
            }

            if (EnableMeshBoundaries)
            {
                AnalysisViz boundaries = new MeshSOBoundaryViz(sourceSO);
                add_new_so_analysis(sourceSO, boundaries);
            }

            if (EnableCavities)
            {
                AnalysisViz interiorCavities = new MeshSOComponentsViz(sourceSO);
                add_new_so_analysis(sourceSO, interiorCavities);
            }
        }
예제 #5
0
        public void RemoveMesh(DMeshSO sourceSO)
        {
            List <AnalysisViz> found;

            lock (SOToAnalysis) {
                if (SOToAnalysis.TryGetValue(sourceSO, out found))
                {
                    foreach (var analysis in found)
                    {
                        disconnect_analysis(analysis);
                    }
                    SOToAnalysis.Remove(sourceSO);
                }
            }
            lock (DirtyList) {
                if (found != null)
                {
                    foreach (var analysis in found)
                    {
                        DirtyList.Remove(analysis);
                    }
                }
            }
        }