Exemplo n.º 1
0
        // 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);
                    }
                }
            }
        }
Exemplo n.º 2
0
        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);
                }
            }
        }
Exemplo n.º 3
0
        /// <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;
        }