public override DataTemplate SelectTemplate(object item, DependencyObject container) { if (container == null) { return(null); } FrameworkElement element = container as FrameworkElement; if (element == null) { return(null); } if (item == null) { return(element.TryFindResource("DT_Empty") as DataTemplate); } ParameterStructure.Component.Component component = item as ParameterStructure.Component.Component; ParameterStructure.Component.EmptyComponentSlot compslot = new EmptyComponentSlot { SlotType = 0, SlotName = string.Empty, SlotDescr = string.Empty }; if (item is ParameterStructure.Component.EmptyComponentSlot) { compslot = (ParameterStructure.Component.EmptyComponentSlot)item; } ParameterStructure.Parameter.Parameter parameter = item as ParameterStructure.Parameter.Parameter; ParameterStructure.Parameter.Calculation calc = item as ParameterStructure.Parameter.Calculation; ParameterStructure.Geometry.GeometricRelationship geom_rel = item as ParameterStructure.Geometry.GeometricRelationship; ParameterStructure.Geometry.HierarchicalContainer hcontainer = item as ParameterStructure.Geometry.HierarchicalContainer; if (component != null) { if (component.IsHidden) { return(element.TryFindResource("ComponentInListHidden") as DataTemplate); } else { return(element.TryFindResource("ComponentWInstancesWoControlsInList") as DataTemplate); } } else if (!(string.IsNullOrEmpty(compslot.SlotName))) { if (compslot.IsLarge) { return(element.TryFindResource("ComponentSlotInParamList") as DataTemplate); } else { return(element.TryFindResource("ComponentSlotInList") as DataTemplate); } } else if (parameter != null) { return(element.TryFindResource("ParamInListMapping") as DataTemplate); } else if (calc != null) { return(element.TryFindResource("CalcInListMapping") as DataTemplate); } else if (geom_rel != null) { return(element.TryFindResource("GeomRelationshipInMappingTree") as DataTemplate); } else if (hcontainer != null) { return(element.TryFindResource("HierarchicalContainerInList") as DataTemplate); } else { return(null); } }
public static void UpdateComponentFromMessage(Component _comp, ComponentMessage _cmsg, ComponentManagerType _user, bool _add_missing_params) { if (_comp == null || _cmsg == null) { return; } if (_cmsg.CompID > -1 && _comp.ID != _cmsg.CompID) { return; } // 1. TRANSFER THE GEOMETRIC RELATIONSHIPS // extract the main geometric relationship type (even for multiple relationships, there should only be ONE type) List <InterProcCommunication.Specific.GeometricRelationship> geom_rels = new List <InterProcCommunication.Specific.GeometricRelationship>(_cmsg.GeomRelationships); if (geom_rels.Count == 0) { // ... Houston, we have a problem!!! // This should not happen! } else { // combine the incoming relationships with processing info Dictionary <InterProcCommunication.Specific.GeometricRelationship, bool> geom_rels_processing = new Dictionary <GeometricRelationship, bool>(); foreach (InterProcCommunication.Specific.GeometricRelationship gr in geom_rels) { geom_rels_processing.Add(gr, false); } // combine the old relationships with updating info (is used to remove obsolete relationships) List <bool> old_geom_rels_updating = Enumerable.Repeat(false, _comp.R2GInstances.Count).ToList(); // update the existing geometric relationship(s) for (int i = 0; i < _comp.R2GInstances.Count; i++) { InterProcCommunication.Specific.GeometricRelationship gr_corresponding = geom_rels.FirstOrDefault(x => x.GrID == _comp.R2GInstances[i].ID); if (gr_corresponding != null) { ParameterStructure.Geometry.Relation2GeomType gr_type = ParameterStructure.Geometry.GeometryUtils.StringToRelationship2Geometry(InterProcCommunication.Specific.GeometryUtils.Relationship2GeometryToString(gr_corresponding.GrState.Type)); _comp.R2GInstances[i].Name = gr_corresponding.GrName; _comp.R2GInstances[i].State = new ParameterStructure.Geometry.Relation2GeomState { IsRealized = gr_corresponding.GrState.IsRealized, Type = gr_type }; _comp.R2GInstances[i].GeomIDs = gr_corresponding.GrIds; _comp.R2GInstances[i].GeomCS = gr_corresponding.GrUCS; _comp.R2GInstances[i].TRm_WC2LC = gr_corresponding.GrTrWC2LC; _comp.R2GInstances[i].TRm_LC2WC = gr_corresponding.GrTrLC2WC; // instance info cannot change, except for the path _comp.R2GInstances[i].InstancePath = new List <System.Windows.Media.Media3D.Point3D>(gr_corresponding.InstPath); geom_rels_processing[gr_corresponding] = true; old_geom_rels_updating[i] = true; } } // add new relationships List <ParameterStructure.Geometry.GeometricRelationship> to_be_added = new List <ParameterStructure.Geometry.GeometricRelationship>(); foreach (var entry in geom_rels_processing) { if (entry.Value) { continue; // skip processed } ParameterStructure.Geometry.Relation2GeomType type = ParameterStructure.Geometry.GeometryUtils.StringToRelationship2Geometry(InterProcCommunication.Specific.GeometryUtils.Relationship2GeometryToString(entry.Key.GrState.Type)); ParameterStructure.Geometry.Relation2GeomState state = new ParameterStructure.Geometry.Relation2GeomState { Type = type, IsRealized = entry.Key.GrState.IsRealized }; ParameterStructure.Geometry.GeometricRelationship new_gr = new ParameterStructure.Geometry.GeometricRelationship(entry.Key.GrName, state, entry.Key.GrIds, entry.Key.GrUCS, entry.Key.GrTrWC2LC, entry.Key.GrTrLC2WC); new_gr.InstancePath = new List <System.Windows.Media.Media3D.Point3D>(entry.Key.InstPath); // added 06.09.2017 to_be_added.Add(new_gr); } // communicate to component (performs the deleletion of the relationships that were not updated) _comp.UpdateGeometricRelationships(old_geom_rels_updating, to_be_added, _user); } // 2. TRANSFER THE PARAMETERS Dictionary <string, double> p_dict = Comp2GeomCommunication.GetReservedParamDictionary(geom_rels[0].GrState.Type); foreach (var entry in p_dict) { // retrieve value double val = _cmsg[entry.Key]; if (double.IsNaN(val)) { continue; } // transfer to component _comp.SetParameterValue(entry.Key, val, _user, _add_missing_params); } }