コード例 #1
0
        private static void DrawArrow(
            GeometrySink sink,
            ReadOnlySpan <ImmutableVec2_float> bezier,
            float arrowSize)
        {
            var b1X = BiaNodeEditorHelper.Bezier(bezier[0].X, bezier[1].X, bezier[2].X, bezier[3].X, 0.5001f);
            var b1Y = BiaNodeEditorHelper.Bezier(bezier[0].Y, bezier[1].Y, bezier[2].Y, bezier[3].Y, 0.5001f);
            var b2X = BiaNodeEditorHelper.Bezier(bezier[0].X, bezier[1].X, bezier[2].X, bezier[3].X, 0.5f);
            var b2Y = BiaNodeEditorHelper.Bezier(bezier[0].Y, bezier[1].Y, bezier[2].Y, bezier[3].Y, 0.5f);

            var sx = b1X - b2X;
            var sy = b1Y - b2Y;
            var r  = MathF.Atan2(sy, sx) + MathF.PI * 0.5f;
            var m  = (MathF.Sin(r), MathF.Cos(r));

            var l1 = new ImmutableVec2_float(arrowSize / 1.732f, arrowSize / 1.732f * 2.0f);
            var l2 = new ImmutableVec2_float(-arrowSize / 1.732f, arrowSize / 1.732f * 2.0f);

            var t1X = (bezier[0].X + bezier[3].X) * 0.5f;
            var t1Y = (bezier[0].Y + bezier[3].Y) * 0.5f;

            var t2 = Rotate(m, l1);
            var t3 = Rotate(m, l2);

            sink.BeginFigure(new RawVector2(t1X, t1Y), FigureBegin.Filled);
            sink.AddLine(new RawVector2(t2.X + t1X, t2.Y + t1Y));
            sink.AddLine(new RawVector2(t3.X + t1X, t3.Y + t1Y));
            sink.EndFigure(FigureEnd.Closed);
        }
コード例 #2
0
ファイル: BiaNodeEditorHelperTest.cs プロジェクト: zxbe/Biaui
        public void Setup()
        {
            var r = new Random();

            Data = new ImmutableVec2_float[4 * 1000000];

            for (var i = 0; i != Data.Length; ++i)
            {
                Data[i] = new ImmutableVec2_float((float)r.NextDouble(), (float)r.NextDouble());
            }
        }
コード例 #3
0
        public static void MakeBezierCurve(this IBiaNodeLink self, Span <ImmutableVec2_float> result)
        {
            var item1 = self.ItemSlot1.Item ?? throw new NullReferenceException();
            var item2 = self.ItemSlot2.Item ?? throw new NullReferenceException();

            var pos1  = item1.MakeSlotPosDefault(self.InternalData().Slot1 !);
            var pos2  = item2.MakeSlotPosDefault(self.InternalData().Slot2 !);
            var pos1C = BiaNodeEditorHelper.MakeBezierControlPoint(pos1, self.InternalData().Slot1 !.Dir);
            var pos2C = BiaNodeEditorHelper.MakeBezierControlPoint(pos2, self.InternalData().Slot2 !.Dir);

            result[0] = new ImmutableVec2_float((float)pos1.X, (float)pos1.Y);
            result[1] = new ImmutableVec2_float((float)pos1C.X, (float)pos1C.Y);
            result[2] = new ImmutableVec2_float((float)pos2C.X, (float)pos2C.Y);
            result[3] = new ImmutableVec2_float((float)pos2.X, (float)pos2.Y);
        }