Ejemplo n.º 1
0
    public void SetCurrentTool(Transform toolButton)
    {
        if (activeToolButton)
        {
            activeToolButton.GetComponent <Image>().material = buttonMaterials[0];
        }
        activeToolButton = toolButton;
        activeToolButton.GetComponent <Image>().material = buttonMaterials[1];

        switch (activeToolButton.name)
        {
        case "Brush":
            selectedTool = PaintTools.BRUSH;
            break;

        case "Eraser":
            selectedTool = PaintTools.ERASER;
            break;

        case "Circle":
            selectedTool = PaintTools.CIRCLE;
            break;

        case "Square":
            selectedTool = PaintTools.SQUARE;
            break;

        default:
            Debug.Log(activeToolButton.name + " not implemented yet");
            break;
        }
    }
Ejemplo n.º 2
0
        public void Fill(PaintTools paintTools, List <Vertex> vertices)
        {
            Dictionary <int, List <ActiveEdge> > edges = _GetEdgesTable(vertices);
            int yMin = (int)vertices.Min(v => v.Location.Y);
            int yMax = (int)vertices.Max(v => v.Location.Y);

            List <ActiveEdge> activeEdges = new List <ActiveEdge>();

            for (int y = yMax; y >= yMin; --y)
            {
                activeEdges.RemoveAll(e => e.YLast == y);
                activeEdges.ForEach(e => e.UpdateX());

                if (edges.ContainsKey(y))
                {
                    activeEdges.AddRange(edges[y]);
                }
                activeEdges.Sort((a, b) => a.CurrentX.CompareTo(b.CurrentX));

                for (int i = 0; i < activeEdges.Count; i += 2)
                {
                    _DrawSegment(paintTools, y, (int)activeEdges[i].CurrentX, (int)activeEdges[i + 1].CurrentX);
                }
            }
        }
Ejemplo n.º 3
0
 public void DrawVertices(PaintTools paintTools)
 {
     foreach (Vertex vertex in _vertices)
     {
         vertex.Draw(paintTools);
     }
 }
Ejemplo n.º 4
0
 private void _DrawVertices(PaintTools paintTools)
 {
     foreach (Vertex vertex in _vertices)
     {
         vertex.Draw(paintTools);
     }
 }
Ejemplo n.º 5
0
        // Start is called before the first frame update
        void Start()
        {
            Init();

            paintTool = PaintTools.Pencil; // <---- Tube is default

            ConfigureSubPanels();

            ConfigureCursors();

            paintLineRenderer = transform.gameObject.GetComponent <LineRenderer>();
            if (paintLineRenderer == null)
            {
                Debug.LogWarning("Expected a line renderer on the paintItem game object.");
            }
            else
            {
                paintLineRenderer.startWidth = 0.005f; paintLineRenderer.endWidth = 0.005f;
            }

            freeDraw        = new FreeDraw();
            volumeGenerator = new VolumeMeshGenerator();

            brushSize = mouthpiece.localScale.x;
            OnPaintColor(GlobalState.CurrentColor);

            SetTooltips();

            GlobalState.colorChangedEvent.AddListener(OnPaintColor);
        }
Ejemplo n.º 6
0
 public override void DrawFilling(PaintTools paintTools)
 {
     if (_filler != null)
     {
         _filler.Fill(paintTools, _vertexManager.Vertices);
     }
 }
Ejemplo n.º 7
0
 private void squareButton_Click(object sender, EventArgs e)
 {
     this.selectedTool     = PaintTools.Square;
     squareTimer.Enabled   = true;
     triangleTimer.Enabled = false;
     houseTimer.Enabled    = false;
 }
Ejemplo n.º 8
0
 public void DrawRelations(PaintTools paintTools)
 {
     for (int i = 0; i < this.NumberOfVertices; ++i)
     {
         _relations[i].Draw(paintTools, new Segment(_vertices[i].Location,
                                                    _vertices[(i + 1) % this.NumberOfVertices].Location));
     }
 }
Ejemplo n.º 9
0
 private void _DrawSegments(PaintTools paintTools)
 {
     for (int i = 0; i < this.NumberOfVertices - 1; ++i)
     {
         paintTools.Graphics.DrawLine(_pen,
                                      _vertices[i].Location,
                                      _vertices[i + 1].Location);
     }
 }
Ejemplo n.º 10
0
 public void Draw(PaintTools paintTools, Pen pen)
 {
     for (int i = 0; i < _curvePointsNumber - 1; ++i)
     {
         paintTools.Graphics.DrawLine(pen,
                                      (Point)this.GetPoint(i),
                                      (Point)this.GetPoint(i + 1));
     }
 }
Ejemplo n.º 11
0
 private void _DrawSegment(PaintTools paintTools, int y, int begX, int endX)
 {
     for (int x = begX; x <= endX; ++x)
     {
         if (paintTools.Bitmap.IsInside(x, y))
         {
             paintTools.Bitmap.SetPixel(x, y, _GetColor(x, y));
         }
     }
 }
Ejemplo n.º 12
0
        public override void Draw(PaintTools paintTools, Segment side)
        {
            base.Draw(paintTools, side);

            PointD location = _GetLocation(side);

            paintTools.Graphics.DrawString(_length.ToString(), _font,
                                           new SolidBrush(_penColor), (float)(location.X - 2 * _distanceFromMiddle - 3),
                                           (float)(location.Y - _distanceFromMiddle));
        }
Ejemplo n.º 13
0
 public void UnlockTool(PaintTools tool)
 {
     switch (tool)
     {
     case PaintTools.SQUARE:
         lockedTools[0].button.enabled = true;
         lockedTools[0].lockObj.SetActive(false);
         break;
     }
 }
Ejemplo n.º 14
0
        public override void Draw(PaintTools paintTools, Segment side)
        {
            base.Draw(paintTools, side);

            PointD location = _GetLocation(side);

            Segment verticalSegment = new Segment(new PointD(location.X, location.Y - _distanceFromMiddle),
                                                  new PointD(location.X, location.Y + _distanceFromMiddle),
                                                  _penColor);

            verticalSegment.Draw(paintTools);
        }
        public override void Draw(PaintTools paintTools)
        {
            PixelSet pixels = _rotator.GetRotated(_currentAngle);

            for (int i = 0; i < pixels.Locations.Length; ++i)
            {
                Point translatedPoint = (Point)(pixels.Locations[i] + _moveVector);
                paintTools.Bitmap.SetPixel(translatedPoint.X,
                                           translatedPoint.Y,
                                           pixels.Colors[i]);
            }
        }
Ejemplo n.º 16
0
 public PdfPCellEntity()
 {
     BackgroundHexColor = "#f5f5f5";
     FontSize           = PaintTools.PdfPxToHtmlPx(12);
     Colspan            = 1;
     Rowspan            = 1;
     BorderWidth        = 0.01f;
     Padding            = 0;
     FontStyle          = Font.NORMAL;
     PaddingTop         = 2;
     PaddingBottom      = 2;
 }
Ejemplo n.º 17
0
        public override void Draw(PaintTools paintTools, Segment side)
        {
            base.Draw(paintTools, side);

            PointD location = _GetLocation(side);

            Segment horizontalSegment = new Segment(new PointD(location.X - _distanceFromMiddle, location.Y),
                                                    new PointD(location.X + _distanceFromMiddle, location.Y),
                                                    _penColor);

            horizontalSegment.Draw(paintTools);
        }
Ejemplo n.º 18
0
        protected void _DrawPolyline(PaintTools paintTools)
        {
            for (int i = 0; i < this.NumberOfVertices - 1; ++i)
            {
                Segment side = new Segment(_vertexManager.GetVertex(i).Location,
                                           _vertexManager.GetVertex(i + 1).Location,
                                           _sideColors[i]);
                side.Draw(paintTools);
            }

            _vertexManager.DrawVertices(paintTools);
        }
Ejemplo n.º 19
0
        public override void DrawContours(PaintTools paintTools)
        {
            int    numberOfVertices = this.NumberOfVertices;
            PointD firstPoint       = _vertexManager.GetVertex(0).Location;
            PointD lastPoint        = _vertexManager.GetVertex(numberOfVertices - 1).Location;

            Segment closingSegment = new Segment(lastPoint, firstPoint,
                                                 _sideColors[numberOfVertices - 1]);

            closingSegment.Draw(paintTools);

            _DrawPolyline(paintTools);
            _vertexManager.DrawRelations(paintTools);
        }
Ejemplo n.º 20
0
 public override void DrawContours(PaintTools paintTools)
 {
     if (this.NumberOfVertices > 0)
     {
         if (_isComplete)
         {
             base.DrawContours(paintTools);
         }
         else
         {
             _DrawPolyline(paintTools);
         }
     }
 }
Ejemplo n.º 21
0
        private static GameObject Create(PaintTools what, Color color)
        {
            GameObject rootObject = new GameObject();

            rootObject.transform.parent        = SceneManager.RightHanded;
            rootObject.transform.localPosition = Vector3.zero;
            rootObject.transform.localRotation = Quaternion.identity;
            rootObject.transform.localScale    = Vector3.one;

            GameObject gobject = new GameObject();

            gobject.transform.parent = rootObject.transform;
            gobject.name             = Utils.CreateUniqueName(what == PaintTools.Volume ? "Volume" : "Paint");

            gobject.transform.localPosition = Vector3.zero;
            gobject.transform.localRotation = Quaternion.identity;
            gobject.transform.localScale    = Vector3.one;
            gobject.tag = "PhysicObject";

            Mesh mesh = new Mesh
            {
                indexFormat = UnityEngine.Rendering.IndexFormat.UInt32
            };
            MeshFilter meshFilter = gobject.AddComponent <MeshFilter>();

            meshFilter.mesh = mesh;
            MeshRenderer renderer      = gobject.AddComponent <MeshRenderer>();
            MaterialID   materialId    = color.a == 1f ? MaterialID.ObjectOpaque : MaterialID.ObjectTransparent;
            Material     paintMaterial = ResourceManager.GetMaterial(materialId);

            renderer.sharedMaterial = paintMaterial;
            renderer.material.SetColor("_BaseColor", color);
            renderer.material.SetFloat("_Opacity", color.a);

            // Update scene data for live sync
            SceneManager.AddMaterialParameters(Utils.GetMaterialName(gobject), materialId, color);

            gobject.AddComponent <MeshCollider>();

            if (what == PaintTools.Volume)
            {
                gobject.AddComponent <VolumeController>();
            }
            else
            {
                gobject.AddComponent <PaintController>();
            }

            return(gobject);
        }
Ejemplo n.º 22
0
        void OnSelectPanel(PaintTools tool)
        {
            // If changing tool TO or FROM volume, reset the volume generator.
            if (paintTool != tool && (paintTool == PaintTools.Volume || tool == PaintTools.Volume))
            {
                ResetVolume();
            }

            paintTool = tool;

            // CHECKED button
            tubeButton.Checked   = tool == PaintTools.Pencil;
            ribbonButton.Checked = tool == PaintTools.FlatPencil;
            hullButton.Checked   = tool == PaintTools.ConvexHull;
            volumeButton.Checked = tool == PaintTools.Volume;
            grassButton.Checked  = tool == PaintTools.Grass;

            // ACTIVE panel
            tubePanel.gameObject.SetActive(tool == PaintTools.Pencil);
            ribbonPanel.gameObject.SetActive(tool == PaintTools.FlatPencil);
            hullPanel.gameObject.SetActive(tool == PaintTools.ConvexHull);
            volumePanel.gameObject.SetActive(tool == PaintTools.Volume);
            grassPanel.gameObject.SetActive(tool == PaintTools.Grass); grassListPanel.gameObject.SetActive(tool == PaintTools.Grass);

            // Mouthpiece
            pencilCursor.SetActive(tool == PaintTools.Pencil);
            flatCursor.SetActive(tool == PaintTools.FlatPencil);
            convexCursor.SetActive(tool == PaintTools.ConvexHull);
            volumeCursor.SetActive(tool == PaintTools.Volume);
            grassCursor.SetActive(tool == PaintTools.Grass);

            // SubTool object activation
            grassPainter.gameObject.SetActive(tool == PaintTools.Grass); // calls OnEnable

            // Sub-Elements (put in its own function?)
            switch (tool)
            {
            case PaintTools.Volume:
            {
                volumeCreateButton.Checked = true;
                volumeEditButton.Checked   = false;
                // TODO: default values for sliders?
                // ...
            }
            break;

            default: break;
            }
        }
Ejemplo n.º 23
0
        public override void Draw(PaintTools paintTools)
        {
            BezierCurve bezierCurve   = _polyline.GetBezierCurve();
            FreeVector  tangentVector = bezierCurve.GetTangentVector(_bezierPointNumber);
            Point       curvePoint    = bezierCurve.GetPoint(_bezierPointNumber);

            float      angle           = (new FreeVector(new Point(1, 0))).GetAngleWith(tangentVector);
            PixelSet   points          = _rotator.GetRotated(angle);
            FreeVector translateVector = new FreeVector(_imageMiddle, curvePoint);

            for (int i = 0; i < points.Locations.Length; ++i)
            {
                Point translatedPoint = (Point)(points.Locations[i] + translateVector);
                paintTools.Bitmap.SetPixel(translatedPoint.X, translatedPoint.Y, points.Colors[i]);
            }
        }
Ejemplo n.º 24
0
        public static void GenerateCompressImage(string sourceImagePath, string desImagePath, int compressionRate = 100)
        {
            DirectoryInfo dirInfo = new DirectoryInfo(Path.GetDirectoryName(desImagePath));

            if (dirInfo.Exists == false)
            {
                dirInfo.Create();
            }

            if (new List <string> {
                ".PNG", ".GIF"
            }.Contains(Path.GetExtension(sourceImagePath).ToUpper()))
            {
                new FileInfo(sourceImagePath).CopyTo(desImagePath);
            }
            else
            {
                using (Bitmap imageFrom = new Bitmap(sourceImagePath))
                {
                    imageFrom.Save(desImagePath, PaintTools.GetEncoderByFormat(GetImageFormat(desImagePath)), PaintTools.GetEncoderParametersByNumber(compressionRate));
                }
            }
        }
Ejemplo n.º 25
0
        private void DoTools()
        {
            if (Event.current.rawType == EventType.KeyDown && Event.current.isKey && !isDown)
            {
                tool = curve.tool;
                KeyCode key = Event.current.keyCode;
                if (key == KeyCode.A)
                {
                    curve.tool = PaintTools.Add;
                }
                else if (key == KeyCode.D)
                {
                    curve.tool = PaintTools.Remove;
                }
                else if (key == KeyCode.I)
                {
                    curve.tool = PaintTools.Insert;
                }
                isDown = true;
                EditorUtility.SetDirty(curve);
                Event.current.Use();
            }
            else if (Event.current.rawType == EventType.KeyUp)
            {
                curve.tool = tool;
                isDown     = false;
                EditorUtility.SetDirty(curve);
                Event.current.Use();
            }
            switch (curve.tool)
            {
            case PaintTools.Add:
                EditorGUIUtility.AddCursorRect(new Rect(0, 0, Screen.width, Screen.height), MouseCursor.ArrowPlus);
                SceneView.RepaintAll();

                if (Event.current.type == EventType.MouseDown && Event.current.button == 0)
                {
                    GUIUtility.hotControl = 0;
                    Plane plane = new Plane(Camera.current.transform.forward, Vector3.zero);
                    float dist  = 0f;
                    Ray   ray   = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);
                    if (plane.Raycast(ray, out dist))
                    {
                        Vector3 newPosition = ray.GetPoint(dist);
                        curve.AddPointAt(curve.transform.InverseTransformPoint(newPosition));
                        curve.SendMessage("OnRectTransformDimensionsChange", SendMessageOptions.DontRequireReceiver);
                        EditorUtility.SetDirty(curve);
                    }
                    Event.current.Use();
                }
                break;

            case PaintTools.Insert:
                int   limit = curve.resolution + 1;
                float _res  = curve.resolution;
                if (curve.count > 1)
                {
                    for (int index = 0; index < curve.count - 1; index++)
                    {
                        BezierPoint p1           = curve[index];
                        BezierPoint p2           = curve[index + 1];
                        Vector3     lastPoint    = p1.localPosition;
                        Vector3     currentPoint = Vector3.zero;

                        for (int i = 1; i < limit; i++)
                        {
                            currentPoint = BezierCurve.GetPoint(p1, p2, i / _res);
                            if (HandleUtility.DistanceToLine(curve.transform.TransformPoint(currentPoint), curve.transform.TransformPoint(lastPoint)) < 2f && Vector2.Distance(Event.current.mousePosition, HandleUtility.WorldToGUIPoint(curve.transform.TransformPoint(p1.localPosition))) > 5f && Vector2.Distance(Event.current.mousePosition, HandleUtility.WorldToGUIPoint(curve.transform.TransformPoint(p2.localPosition))) > 5f)
                            {
                                EditorGUIUtility.AddCursorRect(new Rect(0, 0, Screen.width, Screen.height), MouseCursor.ArrowPlus);
                                SceneView.RepaintAll();
                                if (Event.current.type == EventType.MouseDown)
                                {
                                    GUIUtility.hotControl = 0;

                                    curve.AddPointAt(index + 1, HandleUtility.ClosestPointToPolyLine(lastPoint, currentPoint));
                                    curve.SendMessage("OnRectTransformDimensionsChange", SendMessageOptions.DontRequireReceiver);
                                    EditorUtility.SetDirty(curve);
                                    Event.current.Use();
                                }
                            }
                            lastPoint = currentPoint;
                        }
                    }
                }
                break;

            case PaintTools.Remove:
                if (curve.count > 2)
                {
                    for (int index = 0; index < curve.count; index++)
                    {
                        BezierPoint p        = curve[index];
                        Vector2     guiPoint = HandleUtility.WorldToGUIPoint(curve.transform.TransformPoint(p.localPosition));

                        if (Vector2.Distance(Event.current.mousePosition, guiPoint) < 5f)
                        {
                            EditorGUIUtility.AddCursorRect(new Rect(0, 0, Screen.width, Screen.height), MouseCursor.ArrowMinus);
                            SceneView.RepaintAll();
                            if (Event.current.type == EventType.MouseDown)
                            {
                                GUIUtility.hotControl = 0;
                                curve.RemovePoint(p);
                                curve.SendMessage("OnRectTransformDimensionsChange", SendMessageOptions.DontRequireReceiver);
                                EditorUtility.SetDirty(curve);
                                Event.current.Use();
                            }
                        }
                    }
                }
                break;
            }
        }
Ejemplo n.º 26
0
 public void Draw(PaintTools paintTools)
 {
     paintTools.Graphics.DrawLine(_pen, (PointF)_beg, (PointF)_end);
 }
Ejemplo n.º 27
0
 private void rubberSelectLabel_Click(object sender, EventArgs e)
 {
     this.selectedTool = PaintTools.Rubber;
 }
Ejemplo n.º 28
0
 private void lineSelectLabel_Click(object sender, EventArgs e)
 {
     this.selectedTool = PaintTools.Line;
 }
Ejemplo n.º 29
0
 private void ellipsebox_Click(object sender, EventArgs e)
 {
     this.selectedTool = PaintTools.Ellipse;;
 }
Ejemplo n.º 30
0
 private void rectanglebox_Click(object sender, EventArgs e)
 {
     this.selectedTool = PaintTools.Rectangle;
 }