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 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); }
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; } } }
bool CanImport(MegaShapeOSMWay way) { for (int i = 0; i < way.tags.Count; i++) { if (way.tags[i].import) { return(true); } } return(false); }
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; }
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(); }