// handles determining color of elementGeometry3Ds when any property is set false // as the state of other properties must be checked to determine the correct color / material. private static void OnPointOrLinePropertySetFalse(DependencyObject obj) { if (!(obj is GeometryModel3D && obj.GetType() != typeof(BillboardTextModel3D))) { return; } //point or line case GeometryModel3D geom = obj as GeometryModel3D; if (geom is DynamoPointGeometryModel3D || geom is DynamoLineGeometryModel3D) { //if selection is not enabled determine if we should reset colors or set transparent colors if (!GetShowSelected(geom)) { if (GetIsolationMode(geom)) { SetAlpha(geom, HelixWatch3DViewModel.ptAndLineIsolatedTransparencyColor.Alpha, true); } else if (GetIsFrozen(geom)) { SetAlpha(geom, HelixWatch3DViewModel.FrozenMaterial.DiffuseColor.Alpha, true); } //all attached props are false, lets reset colors else { RequestResetColorsForDynamoGeometryModel?.Invoke(geom.Tag as string); } } } }
private static void ShowSelectedPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args) { if (!(obj is GeometryModel3D && obj.GetType() != typeof(BillboardTextModel3D))) { return; } var geom = (GeometryModel3D)obj; var meshGeom = geom as DynamoGeometryModel3D; if (meshGeom != null) { HandleMeshPropertyChange(meshGeom, args); } //implementation for lines and points else if (geom is DynamoPointGeometryModel3D || geom is DynamoLineGeometryModel3D) { if ((bool)args.NewValue) { //if the item is both selected and isolation mode is on, then we should color the item as normal OR as frozen. if (GetIsolationMode(geom)) { //selected, isolated, and frozen. if (GetIsFrozen(geom)) { SetAlpha(geom, HelixWatch3DViewModel.FrozenMaterial.DiffuseColor.Alpha, true); } //selected and isolated, so we just reset the colors. else { //reset the colors RequestResetColorsForDynamoGeometryModel?.Invoke(geom.Tag as string); } } //only selected. else { //TODO cache this and update after helix 2.11 is released SetAllColors(geom, HelixWatch3DViewModel.SelectedMaterial.DiffuseColor); } } else { OnPointOrLinePropertySetFalse(geom); } } }
/// <summary> /// Sets alpha channel of existing colors to given value, optionally attempts to reset all colors /// first to original colors from renderpackages. /// </summary> /// <param name="geom">Geometry to modify.</param> /// <param name="alpha">Alpha value to set on geometry. Float between 0 and 1.0.</param> /// <param name="resetColorsFirst">If true, colors are reset to those stored in the original render packages, before having alpha modified /// one may want to use this to reset colors from a selected state (blue) back to the original colors before freezing the geo for example. </param> private static void SetAlpha(GeometryModel3D geom, float alpha, bool resetColorsFirst) { if (resetColorsFirst) { //reset colors if handled RequestResetColorsForDynamoGeometryModel?.Invoke(geom.Tag as string); } //then modify alpha var newColors = new Color4Collection(geom.Geometry.Colors.Select(col => { col.Alpha = alpha; return(col); })); geom.Geometry.Colors = newColors; }