void Start() { // Prepare the vector path, add it to the vector scene. m_Path = new Shape() { Contours = new BezierContour[] { new BezierContour() { Segments = new BezierPathSegment[2] }, new BezierContour() { Segments = new BezierPathSegment[2] } }, PathProps = new PathProperties() { Stroke = new Stroke() { Color = Color.white, HalfThickness = 0.1f } } }; m_Scene = new Scene() { Root = new SceneNode() { Shapes = new List <Shape> { //m_Path } } }; m_Options = new VectorUtils.TessellationOptions() { StepDistance = 1000.0f, MaxCordDeviation = 0.05f, MaxTanAngleDeviation = 0.05f, SamplingStepSize = 0.01f }; // Instantiate a new mesh, it will be filled with data in Update() m_Mesh = new Mesh(); GetComponent <MeshFilter>().mesh = m_Mesh; // ======================================================================= string path = string.Format(@"D:\WriteByHand\svgs\{0}.svg", 20986); string svg = SVGHelper.readSVG(path); SVGParser.SceneInfo scene_info = SVGParser.ImportSVG(new StringReader(svg)); Scene scene = scene_info.Scene; SceneNode word = scene.Root.Children[1]; // 前半為背景(無 Clipper),後半為寫字筆劃(有 Clipper) List <SceneNode> bg_and_stroke = word.Children; int double_stroke_number = bg_and_stroke.Count; int stroke_number = double_stroke_number / 2; // 筆劃第一筆 SceneNode test_node = bg_and_stroke[stroke_number]; List <Shape> test_shapes = test_node.Shapes; SceneNode test_clipper_node = (test_node.Clipper == null) ? null : test_node.Clipper; List <Shape> test_clippers = new List <Shape>(); if (test_clipper_node != null) { test_clippers = test_clipper_node.Children[0].Shapes; if (test_clippers != null) { print("test_clippers len:" + test_clippers.Count); Shape test_clipper_shape = test_clippers[0]; } else { print("test_clippers is null"); } } else { print("test_clipper_node is null"); } Shape test_stroke = test_shapes[0]; BezierContour[] bezierContours = test_stroke.Contours; BezierPathSegment[] bezierPathSegments = bezierContours[0].Segments; BezierPathSegment point1 = bezierPathSegments[0]; BezierPathSegment point2 = bezierPathSegments[bezierPathSegments.Length - 1]; #region Word scene // 遮罩嘗試 display_scene = new Scene() { Root = new SceneNode() { Children = new List <SceneNode>() { #region One stroke new SceneNode() { Shapes = new List <Shape>() { #region Piece of stroke new Shape() { Contours = new BezierContour[] { new BezierContour() { Segments = new BezierPathSegment[] { point1, point2 } }, //new BezierContour() { // Segments = new BezierPathSegment[2] //} }, PathProps = new PathProperties() { Stroke = new Stroke() { Color = Color.white, HalfThickness = 10f } } } #endregion Piece of stroke end }, Clipper = new SceneNode() { Shapes = new List <Shape>() { #region Piece of clipper test_clippers[0] #endregion Piece of clipper end } } } #endregion One stroke end } } }; #endregion Word scene end StartCoroutine(nextStroke(bg_and_stroke)); }
// Start is called before the first frame update void Start() { string path = string.Format(@"D:\WriteByHand\svgs\{0}.svg", 20986); string svg = SVGHelper.readSVG(path); SVGParser.SceneInfo scene_info = SVGParser.ImportSVG(new StringReader(svg)); scene = scene_info.Scene; // svg 本體 SceneNode node = scene.Root; List <SceneNode> layer1 = node.Children; // node0:背景米字;node1:字的筆劃 SceneNode node0 = layer1[0], node1 = layer1[1]; // 背景米字 //List<SceneNode> layer2 = node0.Children; //print("layer2:" + layer2.Count); // 字的筆劃 List <SceneNode> layer3 = node1.Children; //print("layer3:" + layer3.Count); //int n = 0; //foreach (SceneNode scene_node in layer3) //{ // print(string.Format("=== Node {0} ===", ++n)); // List<Shape> shapes = scene_node.Shapes; // length = 1 // Shape shape = shapes[0]; // length = 1 // BezierContour[] contours = shape.Contours; // length = 1 // BezierPathSegment[] segments = contours[0].Segments; // 每一筆劃的區段數量不同 // int num = 0; // foreach(BezierPathSegment bezierPathSegment in segments) // { // print(string.Format("= segment {0} =", ++num)); // print(bezierPathSegment.P0); // print(bezierPathSegment.P1); // print(bezierPathSegment.P2); // break; // } // SceneNode clipper = (scene_node.Clipper == null) ? null : scene_node.Clipper; // if(clipper != null) // { // List<SceneNode> clippers = clipper.Children; // length = 1 // SceneNode mask = clippers[0]; // List<Shape> m_shapes = mask.Shapes; // length = 1 // Shape m_shape = m_shapes[0]; // BezierContour[] m_contours = m_shape.Contours; // length = 1 // //print("m_contours len:" + m_contours.Length); // BezierPathSegment[] m_segments = m_contours[0].Segments; // 每一筆劃的區段數量不同 // //print("m_segments len:" + m_segments.Length); // int number = 0; // foreach (BezierPathSegment m_bezierPathSegment in m_segments) // { // print(string.Format("= clipper segment {0} =", ++number)); // print(m_bezierPathSegment.P0); // print(m_bezierPathSegment.P1); // print(m_bezierPathSegment.P2); // break; // } // } // else // { // print("clipper is null"); // } //} n_scene = new Scene() { Root = new SceneNode() { // node.Children 正常的字 // node1.Children 上下相反的字 //Children = node.Children Children = new List <SceneNode>() { new SceneNode() { Children = node1.Children } } } }; //foreach (SceneNode sceneNode in layer3) //{ // n_scene.Root.Children.Add(sceneNode); //} sceneDisplay(n_scene, render); //StartCoroutine(nextStroke(layer3)); }