Ejemplo n.º 1
0
    protected override void OnDraw(LineCanvas canvas)
    {
        var pl  = getPlane();
        var p   = GetEntity(0).CenterInPlane(null).Eval();
        var lo  = getPlane().projectVectorInto(getLabelOffset());
        var dir = (lo - p).normalized;

        float r = (float)value.exp.Eval() / 2f;



        if (showAsRadius)
        {
            var rpt  = p + dir * r;
            var rdir = lo - rpt;
            drawPointsDistance(p, p + dir * r, canvas, Camera.main, arrow0: false, arrow1: true);
            canvas.DrawLine(rpt, lo);
        }
        else
        {
            drawPointsDistance(p - dir * r, p + dir * r, canvas, Camera.main);
        }

        //drawLabel(renderer, camera, "Ø" + getValueString());
    }
Ejemplo n.º 2
0
    protected override void OnDraw(LineCanvas canvas)
    {
        var     e  = GetEntity(0);
        Vector3 p0 = e.PointOnInPlane(0.0, null).Eval();
        Vector3 p1 = e.PointOnInPlane(1.0, null).Eval();

        Vector3 t0    = e.TangentAtInPlane(0.0, null).Eval().normalized;
        Vector3 t1    = e.TangentAtInPlane(1.0, null).Eval().normalized;
        Vector3 n     = e.plane.n.normalized;
        Vector3 perp0 = Vector3.Cross(t0, n);
        Vector3 perp1 = Vector3.Cross(t1, n);
        float   pix   = getPixelSize();

        canvas.DrawLine(p0, p0 + perp0 * 25f * pix);
        canvas.DrawLine(p1, p1 + perp1 * 25f * pix);

        e.DrawParamRange(canvas, 20f * pix, 0.0, 1.0, 0.05, null);
        pos = e.OffsetAtInPlane(0.5, 30f * pix, null).Eval();

        var  ap0    = e.OffsetAtInPlane(0.0, 20f * pix, null).Eval();
        var  ap1    = e.OffsetAtInPlane(1.0, 20f * pix, null).Eval();
        bool stroke = (ap0 - ap1).magnitude < (R_ARROW_W * 2f + 1f) * pix;

        drawArrow(canvas, ap0, -e.TangentAtInPlane(0.0, null).Eval(), stroke);
        drawArrow(canvas, ap1, e.TangentAtInPlane(1.0, null).Eval(), stroke);
    }
Ejemplo n.º 3
0
    protected override void OnDraw(LineCanvas canvas)
    {
        Vector3 p0p = GetPointInPlane(0, null).Eval();
        Vector3 p1p = GetPointInPlane(1, null).Eval();

        drawPointsDistance(p0p, p1p, canvas, Camera.main, false, true, true, 0);
    }
Ejemplo n.º 4
0
 protected override void OnDraw(LineCanvas canvas)
 {
     canvas.SetStyle("entities");
     ForEachSegment((a, b) => {
         canvas.DrawLine(a, b);
     });
 }
Ejemplo n.º 5
0
        private static void WriteLine(this LineCanvas lc, MWord.Range range)
        {
            var canvas = range.Document.Shapes.AddCanvas((float)lc.Location.X, (float)lc.Location.Y, (float)lc.Size.Width, (float)lc.Size.Height, range);

            canvas.WrapFormat.Type = WdWrapType.wdWrapInline;
            foreach (var shape in lc.Shapes)
            {
                switch (shape)
                {
                case CurveCanvasShape ccs:
                    ccs.DrawShapeOnCanvas(canvas.CanvasItems);
                    break;

                case LineCanvasShape lcs:
                    lcs.DrawShapeOnCanvas(canvas.CanvasItems);
                    break;

                case TriangleCanvasShape tcs:
                    tcs.DrawShapeOnCanvas(canvas.CanvasItems);
                    break;
                }
            }
            canvas.CanvasItems.SelectAll();
            range.Application.Selection.Cut();
            canvas.Delete();
            range.PasteSpecial(DataType: WdPasteDataType.wdPasteEnhancedMetafile);
        }
Ejemplo n.º 6
0
    public void DrawTriangulation(LineCanvas canvas)
    {
        var ids      = new List <List <Id> >();
        var polygons = Sketch.GetPolygons(loops.Where(l => l.All(e => !e.isError)).ToList(), ref ids);

        MeshUtils.DrawTriangulation(polygons, canvas);
    }
Ejemplo n.º 7
0
    void drawArcExtend(LineCanvas renderer, Vector3 p0, Vector3 p1,
                       Vector3 c, Vector3 to, Vector3 vz,
                       bool dash, float step)
    {
        float   dd0        = Vector3.Dot(Vector3.Cross(p0 - c, p1 - c), vz);
        bool    greater180 = dd0 < 0;
        Vector3 c0         = Vector3.Cross(to - c, p0 - c);
        Vector3 c1         = Vector3.Cross(to - c, p1 - c);
        float   d0         = Vector3.Dot(c0, vz);
        float   d1         = Vector3.Dot(c1, vz);

        if (greater180)
        {
            if (d0 < 0f || d1 > 0f)
            {
                return;
            }
        }
        else
        {
            if (!(d1 < 0f || d0 > 0f))
            {
                return;
            }
        }

        Vector3 from = p0;

        if (length(to - p1) < length(to - p0))
        {
            from = p1;
        }
        drawArc(renderer, from, to, c, vz, dash, step);
    }
Ejemplo n.º 8
0
    protected override void OnDraw(LineCanvas canvas)
    {
        var c0  = GetEntity(0);
        var c1  = GetEntity(1);
        var c0c = c0.CenterInPlane(null).Eval();
        var c1c = c1.CenterInPlane(null).Eval();
        var c0r = (float)c0.Radius().Eval();
        var c1r = (float)c1.Radius().Eval();
        var dir = (c0c - c1c).normalized;

        if (option == Option.FirstInside)
        {
            dir = -dir;
        }

        if (isCentersCoincident(c0, c1))
        {
            dir = c0c - getLabelOffset();
            if (length(dir) < EPSILON)
            {
                dir = sketch.plane.u;
            }
            dir = normalize(dir);
        }

        var p0   = c0c - dir * c0r;
        var dir2 = (p0 - c1c).normalized;
        var p1   = c1c + dir2 * c1r;

        drawPointsDistance(p0, p1, canvas, Camera.main, false, true, true, 0);
    }
Ejemplo n.º 9
0
 public static void DrawTriangulation(List <List <Vector3> > polygons, LineCanvas canvas)
 {
     foreach (var p in polygons)
     {
         var pv = new List <Vector3>(p);
         /*var triangles = */ Triangulation.Triangulate(pv, canvas);
     }
 }
Ejemplo n.º 10
0
    void DrawStroke(LineCanvas canvas, LineEntity line)
    {
        Vector3 dir  = (line.p1.GetPosition() - line.p0.GetPosition()).normalized;
        Vector3 perp = Vector3.Cross(dir, Vector3.forward);
        Vector3 pos  = (line.p1.GetPosition() + line.p0.GetPosition()) / 2f;

        canvas.DrawLine(pos + perp, pos - perp);
    }
Ejemplo n.º 11
0
    void drawTangentCross(LineCanvas renderer, Vector3 pos, Vector3 dir, Vector3 pn, float pix)
    {
        float   size = 10f * pix;
        Vector3 perp = Vector3.Cross(dir, pn);

        renderer.DrawLine(pos - perp * size, pos + perp * size);
        renderer.DrawLine(pos - dir * size, pos + dir * size);
    }
Ejemplo n.º 12
0
 public SketchFeatureBase()
 {
     sketch         = new Sketch();
     sketch.feature = this;
     sketch.is3d    = true;
     canvas         = GameObject.Instantiate(EntityConfig.instance.lineCanvas);
     go             = new GameObject(GetType().Name);
     canvas.parent  = go;
 }
Ejemplo n.º 13
0
 public void DrawConstraints(LineCanvas canvas)
 {
     canvas.ClearStyle("constraints");
     canvas.SetStyle("constraints");
     foreach (var c in sketch.constraintList)
     {
         c.Draw(canvas);
     }
 }
Ejemplo n.º 14
0
	protected override void OnDraw(LineCanvas canvas) {
		
		var lip0 = lineP0Pos;
		var lip1 = lineP1Pos;
		var p0 = pointPos;

		drawCameraCircle(canvas, Camera.main, p0, R_CIRLE_R * getPixelSize()); 
		drawLineExtendInPlane(sketch.plane, canvas, lip0, lip1, p0, 6f * getPixelSize());
	}
Ejemplo n.º 15
0
 void DrawStroke(LineCanvas canvas, ValueConstraint c, int rpt)
 {
     ref_points[rpt] = c.pos;
     if (rpt == 0)
     {
         Vector3 up = c.GetBasis().GetColumn(1);
         pos = c.pos + up.normalized * getPixelSize() * 30f;
     }
 }
Ejemplo n.º 16
0
    protected override void OnDraw(LineCanvas canvas)
    {
        DrawStroke(canvas, GetEntity(0), 0);
        DrawStroke(canvas, GetEntity(1), 1);

        if (DetailEditor.instance.hovered == this)
        {
            DrawReferenceLink(canvas, Camera.main);
        }
    }
Ejemplo n.º 17
0
    protected override void OnDraw(LineCanvas canvas)
    {
        DrawStroke(canvas, GetConstraint(0) as ValueConstraint, 0);
        DrawStroke(canvas, GetConstraint(1) as ValueConstraint, 1);

        if (DetailEditor.instance.hovered == this)
        {
            DrawReferenceLink(canvas, Camera.main);
        }
    }
Ejemplo n.º 18
0
    void DrawStroke(LineCanvas canvas, Vector3 p0, Vector3 p1, int rpt)
    {
        float   len  = (p1 - p0).magnitude;
        float   size = Mathf.Min(len, 20f * getPixelSize());
        Vector3 dir  = (p1 - p0).normalized * size / 2f;
        Vector3 pos  = (p1 + p0) / 2f;

        ref_points[rpt] = sketch.plane.ToPlane(pos);
        canvas.DrawLine(pos + dir, pos - dir);
    }
Ejemplo n.º 19
0
    protected override void OnUpdateDirty()
    {
        GameObject.Destroy(go);
        go     = new GameObject("ImportMeshFeature");
        canvas = GameObject.Instantiate(EntityConfig.instance.lineCanvas, go.transform);
        canvas.SetStyle("entities");
        //foreach(var edge in edges) {
        //			canvas.DrawLine(edge.a, edge.b);
        //}
        //meshCheck.drawErrors(canvas);

        /*
         *
         * var vertices = mesh.vertices;
         * var triangles = mesh.GetTriangles(0);
         * var edges = new HashSet<KeyValuePair<Vector3, Vector3>>();
         * var antiEdges = new HashSet<KeyValuePair<Vector3, Vector3>>();
         * var tris = new Dictionary<KeyValuePair<Vector3, Vector3>, int>();
         * for(int i = 0; i < triangles.Length / 3; i++) {
         *      for(int j = 0; j < 3; j++) {
         *              var edge = new KeyValuePair<Vector3, Vector3>(
         *                      Snap(vertices[triangles[i * 3 + j]], vertices),
         *                      Snap(vertices[triangles[i * 3 + (j + 1) % 3]], vertices)
         *              );
         *              if(edge.Key == edge.Value) continue;
         *              tris[edge] =  i * 3 + j;
         *              if(edges.Contains(edge)) continue;
         *              if(antiEdges.Contains(edge)) continue;
         *              var antiEdge = new KeyValuePair<Vector3, Vector3>(edge.Value, edge.Key);
         *              edges.Add(edge);
         *              antiEdges.Add(antiEdge);
         *      }
         * }
         *
         * foreach(var edge in edges) {
         *      var anti = new KeyValuePair<Vector3, Vector3>(edge.Value, edge.Key);
         *      if(tris.ContainsKey(edge) && tris.ContainsKey(anti)) {
         *              var tri0 = tris[edge];
         *              var edg0 = tri0 % 3;
         *              tri0 -= edg0;
         *              var n0 = CalculateNormal(tri0, edg0, vertices, triangles);
         *
         *              var tri1 = tris[anti];
         *              var edg1 = tri1 % 3;
         *              tri1 -= edg1;
         *              var n1 = CalculateNormal(tri1, edg1, vertices, triangles);
         *
         *              if((n0 - n1).magnitude < 1e-4) continue;
         *      } else continue;
         *      canvas.DrawLine(edge.Key, edge.Value);
         * }
         */
        go.SetActive(visible);
    }
Ejemplo n.º 20
0
    void DrawStroke(LineCanvas canvas, IEntity line, int rpt)
    {
        var     p0   = line.GetPointAtInPlane(0, null).Eval();
        var     p1   = line.GetPointAtInPlane(1, null).Eval();
        Vector3 dir  = (p1 - p0).normalized;
        Vector3 perp = Vector3.Cross(dir, Vector3.forward) * 5f * getPixelSize();
        Vector3 pos  = (p1 + p0) / 2f;

        ref_points[rpt] = pos;
        canvas.DrawLine(pos + perp, pos - perp);
    }
Ejemplo n.º 21
0
    protected override void OnDraw(LineCanvas canvas)
    {
        var point  = GetEntity(0);
        var circle = GetEntity(1);
        var pPos   = point.GetPointAtInPlane(0, null).Eval();
        var cCen   = circle.CenterInPlane(null).Eval();
        var cRad   = (float)circle.Radius().Eval();
        var dir    = (pPos - cCen).normalized;

        drawPointsDistance(pPos, cCen + dir * cRad, canvas, Camera.main, false, true, true, 0);
    }
Ejemplo n.º 22
0
 public static void DrawExtend(this IEntity e, LineCanvas canvas, double t, double step)
 {
     if (t < 0.0)
     {
         e.DrawParamRange(canvas, 0.0, t, 0.0, step, null);
     }
     else
     if (t > 1.0)
     {
         e.DrawParamRange(canvas, 0.0, 1.0, t, step, null);
     }
 }
Ejemplo n.º 23
0
    public static List <Vector3> Triangulate(List <Vector3> points, LineCanvas canvas = null)
    {
        List <Vector3> result    = new List <Vector3>();
        bool           processed = true;

        while (points.Count > 2 && processed)
        {
            processed = false;
            for (int i = 0; i < points.Count; i++)
            {
                var a = points[(i - 1 + points.Count) % points.Count];
                var b = points[i];
                var c = points[(i + 1) % points.Count];

                if (IsConvex(a, b, c))
                {
                    bool contains = false;
                    for (int j = 0; j < points.Count; j++)
                    {
                        if (j == i || j == i - 1 || j == i + 1)
                        {
                            continue;
                        }
                        if (!TriangleContains2d(a, b, c, points[j]))
                        {
                            continue;
                        }
                        contains = true;
                        break;
                    }
                    if (!contains)
                    {
                        if (canvas)
                        {
                            canvas.DrawLine(a, b);
                            canvas.DrawLine(b, c);
                            canvas.DrawLine(c, a);
                        }
                        result.Add(a);
                        result.Add(b);
                        result.Add(c);
                        points.RemoveAt(i--);
                        processed = true;
                        if (points.Count < 3)
                        {
                            break;
                        }
                    }
                }
            }
        }
        return(result);
    }
Ejemplo n.º 24
0
    protected override void OnDraw(LineCanvas canvas)
    {
        var l0 = GetEntityOfType(IEntityType.Line, 0);
        var l1 = GetEntityOfType(IEntityType.Line, 1);

        DrawStroke(canvas, l0, 0);
        DrawStroke(canvas, l1, 1);
        if (DetailEditor.instance.hovered == this)
        {
            DrawReferenceLink(canvas, Camera.main);
        }
    }
Ejemplo n.º 25
0
    void DrawStroke(LineCanvas canvas, IEntity pt0, IEntity pt1, int rpt)
    {
        var     p0   = pt0.GetPointAtInPlane(0, null).Eval();
        var     p1   = pt1.GetPointAtInPlane(0, null).Eval();
        float   len  = (p1 - p0).magnitude;
        float   size = Mathf.Min(len, 20f * getPixelSize());
        Vector3 dir  = (p1 - p0).normalized * size / 2f;
        Vector3 pos  = (p1 + p0) / 2f;

        ref_points[rpt] = sketch.plane.ToPlane(pos);
        canvas.DrawLine(pos + dir, pos - dir);
    }
Ejemplo n.º 26
0
    protected void drawCameraCircle(LineCanvas renderer, Camera camera, Vector3 pos, float size, int num_segments = 32)
    {
        float   angle = 2f * Mathf.PI / (float)num_segments;
        Vector3 r0    = camera.transform.right * size;

        for (int i = 0; i < num_segments; i++)
        {
            Vector3 r1 = rotatedAbout(r0, camera.transform.forward, angle);
            renderer.DrawLine(pos + r0, pos + r1);
            r0 = r1;
        }
    }
Ejemplo n.º 27
0
    protected void drawBasis(LineCanvas canvas)
    {
        var     basis = GetBasis();
        var     pix   = getPixelSize();
        Vector3 vx    = basis.GetColumn(0);
        Vector3 vy    = basis.GetColumn(1);
        //Vector3 vz = basis.GetColumn(2);
        Vector3 p = basis.GetColumn(3);

        canvas.DrawLine(p, p + vx * 10f * pix);
        canvas.DrawLine(p, p + vy * 10f * pix);
    }
Ejemplo n.º 28
0
 public void DrawConstraints(LineCanvas canvas)
 {
     canvas.ClearStyle("constraints");
     canvas.SetStyle("constraints");
     foreach (var c in sketch.constraintList)
     {
         if (!c.isVisible)
         {
             continue;
         }
         c.Draw(canvas);
     }
 }
Ejemplo n.º 29
0
    protected override void OnDraw(LineCanvas canvas)
    {
        var pl  = getPlane();
        var p   = pl.FromPlane(circle.center.pos);
        var lo  = getLabelOffset();
        var dir = (lo - p).normalized;

        float r = (float)value.exp.Eval() / 2f;

        drawPointsDistance(p - dir * r, p + dir * r, canvas, Camera.main, false);

        //drawLabel(renderer, camera, "Ø" + getValueString());
    }
Ejemplo n.º 30
0
    void DrawStroke(LineCanvas canvas, IEntity e, int rpt)
    {
        Vector3 dir  = e.TangentAtInPlane(0.5, null).Eval();
        Vector3 perp = Vector3.Cross(dir, Camera.main.transform.forward).normalized * 5f * getPixelSize();
        Vector3 pos  = e.PointOnInPlane(0.5, null).Eval();

        ref_points[rpt] = sketch.plane.ToPlane(pos);
        if (rpt == 0)
        {
            this.pos = e.OffsetAtInPlane(0.5, 20f * getPixelSize(), null).Eval();
        }
        canvas.DrawLine(pos + perp, pos - perp);
    }