Exemple #1
0
    public void ParseTag(MegaXMLNode node, MegaShapeOSMWay way)
    {
        MegaShapeOSMTag tag = null;

        for (int i = 0; i < node.values.Count; i++)
        {
            MegaXMLValue val = node.values[i];


            switch (val.name)
            {
            case "k":
                tag = FindTagK(val.value);

                if (tag == null)
                {
                    tag   = new MegaShapeOSMTag();
                    tag.k = val.value;
                    tags.Add(tag);
                }

                break;

            case "v":
                way.tags.Add(AddV(tag, val.value));
                break;
            }
        }
    }
Exemple #2
0
    public void ParseWay(MegaXMLNode node)
    {
        MegaShapeOSMWay way = new MegaShapeOSMWay();

        way.name = "";

        for (int i = 0; i < node.values.Count; i++)
        {
            MegaXMLValue val = node.values[i];

            switch (val.name)
            {
            case "id": way.id = ulong.Parse(val.value); break;
            }
        }

        foreach (MegaXMLNode n in node.children)
        {
            switch (n.tagName)
            {
            case "nd": ParseND(n, way); break;

            case "tag": ParseTag(n, way); break;
            }
        }

        osmways.Add(way);
    }
Exemple #3
0
    public void ParseND(MegaXMLNode node, MegaShapeOSMWay way)
    {
        for (int i = 0; i < node.values.Count; i++)
        {
            MegaXMLValue val = node.values[i];

            switch (val.name)
            {
            case "ref":     way.nodes.Add(ulong.Parse(val.value));  break;
            }
        }
    }
Exemple #4
0
    bool CanImport(MegaShapeOSMWay way)
    {
        for (int i = 0; i < way.tags.Count; i++)
        {
            if (way.tags[i].import)
            {
                return(true);
            }
        }

        return(false);
    }
Exemple #5
0
    string GetName(MegaShapeOSMWay way)
    {
        string name = "";

        for (int i = 0; i < way.tags.Count; i++)
        {
            if (way.tags[i].import)
            {
                if (name.Length > 0)
                {
                    name += " ";
                }

                name += way.tags[i].k;
            }
        }

        return(name);
    }
	bool CanImport(MegaShapeOSMWay way)
	{
		for ( int i = 0; i < way.tags.Count; i++ )
		{
			if ( way.tags[i].import )
				return true;
		}

		return false;
	}
	public void ParseTag(MegaXMLNode node, MegaShapeOSMWay way)
	{
		MegaShapeOSMTag tag = null;

		for ( int i = 0; i < node.values.Count; i++ )
		{
			MegaXMLValue val = node.values[i];


			switch ( val.name )
			{
				case "k":
					tag = FindTagK(val.value);

					if ( tag == null )
					{
						tag = new MegaShapeOSMTag();
						tag.k = val.value;
						tags.Add(tag);
					}

					break;

				case "v":
					way.tags.Add(AddV(tag, val.value));
					break;
			}
		}
	}
	public void ParseND(MegaXMLNode node, MegaShapeOSMWay way)
	{
		for ( int i = 0; i < node.values.Count; i++ )
		{
			MegaXMLValue val = node.values[i];

			switch ( val.name )
			{
				case "ref":	way.nodes.Add(ulong.Parse(val.value));	break;
			}
		}
	}
	public void ParseWay(MegaXMLNode node)
	{
		MegaShapeOSMWay way = new MegaShapeOSMWay();

		way.name = "";

		for ( int i = 0; i < node.values.Count; i++ )
		{
			MegaXMLValue val = node.values[i];

			switch ( val.name )
			{
				case "id": way.id = ulong.Parse(val.value); break;
			}
		}

		foreach ( MegaXMLNode n in node.children )
		{
			switch ( n.tagName )
			{
				case "nd": ParseND(n, way); break;
				case "tag": ParseTag(n, way); break;
			}
		}

		osmways.Add(way);
	}
	string GetName(MegaShapeOSMWay way)
	{
		string name = "";

		for ( int i = 0; i < way.tags.Count; i++ )
		{
			if ( way.tags[i].import )
			{
				if ( name.Length > 0 )
					name += " ";

				name += way.tags[i].k;
			}
		}

		return name;
	}
Exemple #11
0
    public void LoadXML(string sxldata, float scale, bool cspeed, string name, float smoothness, bool combine)
    {
        GameObject root = new GameObject();

        root.name = name;

        // Get bounds for imports
        AdjustPoints(scale);

        // Create a new shape object for each way
        for (int i = 0; i < osmways.Count; i++)
        {
            MegaShapeOSMWay way = osmways[i];

            if (way.nodes.Count > 1 && CanImport(way))
            {
                GameObject osmobj = new GameObject();
                osmobj.transform.position = Vector3.zero;
                osmobj.transform.parent   = root.transform;

                if (way.name.Length == 0)
                {
                    way.name = "No Name";
                }

                osmobj.name = GetName(way);                     //way.name;

                MegaShape shape = (MegaShape)osmobj.AddComponent <MegaShape>();

                shape.smoothness  = smoothness;                 //smooth;
                shape.drawHandles = false;

                MegaSpline spline = shape.splines[0];                   //NewSpline(shape);
                spline.knots.Clear();
                spline.constantSpeed = cspeed;
                spline.subdivs       = 40;

                bool closed = false;
                int  count  = way.nodes.Count;

                if (way.nodes[0] == way.nodes[count - 1])
                {
                    count--;
                    closed = true;
                }

                Vector3[] points = new Vector3[count];

                for (int j = 0; j < count; j++)
                {
                    MegaShapeOSMNode nd = FindNode(way.nodes[j]);
                    points[j] = nd.pos;
                }

                Bounds bounds = new Bounds(points[0], Vector3.zero);

                for (int k = 0; k < points.Length; k++)
                {
                    bounds.Encapsulate(points[k]);
                }

                for (int k = 0; k < points.Length; k++)
                {
                    points[k] -= bounds.center;
                }

                osmobj.transform.position = bounds.center;                      //Vector3.zero;

                shape.BuildSpline(0, points, closed);

                shape.drawTwist = true;
                shape.makeMesh  = false;
                shape.imported  = true;

                shape.CoordAdjust(scale, new Vector3(1.0f, 1.0f, 1.0f), 0);
                shape.CalcLength();                     //10);

                shape.stepdist = (shape.splines[0].length / shape.splines[0].knots.Count) / 1.0f;
            }
        }

        osmnodes.Clear();
        osmways.Clear();
        tags.Clear();
    }