Example #1
0
    private ArrayList vector3(Parcel3DBoundaryFace boundaryFace)
    {
        ArrayList boundaryFacePolygonPoints       = boundaryFace.points;
        ArrayList boundaryFacePolygonPointsVector = new ArrayList();

        foreach (Parcel3DPoint p in boundaryFacePolygonPoints)
        {
            boundaryFacePolygonPointsVector.Add(vector3(p));
        }
        return(boundaryFacePolygonPointsVector);
    }
Example #2
0
    /*private void addParcel3DBoundaryFaces(Parcel3D parcel3D)
     * {
     *  foreach (Parcel3DBoundaryFace boundaryFace in parcel3D.boundaryFaces)
     *  {
     *
     *  }
     *
     *  ArrayList surfacePoints3D = new ArrayList();
     *  long bfid = -1;
     *  foreach (ParcelPoint3D parcelPoint3D in parcelPoints3D)
     *  {
     *      if(parcelPoint3D.bfid != bfid && bfid != -1)
     *      {
     *          SurfacesToBeAdded.Add(vector3(surfacePoints3D));
     *          surfacePoints3D = new ArrayList();
     *      }
     *      surfacePoints3D.Add(parcelPoint3D);
     *      bfid = parcelPoint3D.bfid;
     *  }
     *  SurfacesToBeAdded.Add(vector3(surfacePoints3D));
     * }
     *
     * private void addParcel3DLines(Parcel3D parcel3D)
     * {
     *  ParcelPoint3D point1 = (ParcelPoint3D)parcelPoints3D[0];
     *  foreach (ParcelPoint3D point2 in parcelPoints3D)
     *  {
     *      if(point2.seq != 1) //predpokladam, ze jdou za sebou
     *      {
     *          add3DLine(point1, point2);
     *      }
     *      point1 = point2;
     *  }
     * }*/

    private Parcel3D parseParcel3DData(ArrayList parcel3DData)
    {
        //UnityEngine.Debug.Log("parseParcel3DData");
        Parcel3D parcel = new Parcel3D();

        parcel.boundaryFaces = new ArrayList();
        Parcel3DBoundaryFace bf = new Parcel3DBoundaryFace();

        bf.parrentParcel = parcel;
        bf.points        = new ArrayList();
        bf.bfid          = -1;
        //UnityEngine.Debug.Log("parse2DParcelData... Length: " + parcel3DData.Count);
        //UnityEngine.Debug.Log(((String[])parcel3DData[0]).Length);
        foreach (string[] pointData in parcel3DData)
        {
            try
            {
                if (bf.bfid == -1)
                {
                    bf.bfid = long.Parse(pointData[2]);
                }
                if (bf.bfid != long.Parse(pointData[2]))
                {
                    parcel.boundaryFaces.Add(bf);
                    bf = new Parcel3DBoundaryFace();
                    bf.parrentParcel = parcel;
                    bf.points        = new ArrayList();
                    bf.bfid          = long.Parse(pointData[2]);
                }
                parcel.suid    = long.Parse(pointData[0]);
                parcel.parCis  = pointData[1];
                bf.orientation = char.Parse(pointData[3]);
                Parcel3DPoint point = new Parcel3DPoint();
                point.y = float.Parse(pointData[6]);
                point.x = float.Parse(pointData[5]);
                point.h = float.Parse(pointData[7]);
                bf.points.Add(point);
            }
            catch (Exception e)
            {
                UnityEngine.Debug.Log(e.Message);
            }
        }
        parcel.boundaryFaces.Add(bf);
        //UnityEngine.Debug.Log("parcela 3D... " + parcel.parCis);
        //UnityEngine.Debug.Log("  čílslo parcely: " + parcel.parCis);
        //UnityEngine.Debug.Log("  počet bf: " + parcel.boundaryFaces.Count);
        return(parcel);
    }
Example #3
0
    private void createBoundaryFace(Parcel3DBoundaryFace boundaryFace)
    {
        //UnityEngine.Debug.Log("createSurface");
        GameObject   mySurface = new GameObject("BoundaryFace suid: " + boundaryFace.parrentParcel.suid);
        MeshCollider mc        = mySurface.AddComponent <MeshCollider>();

        mySurface.AddComponent <MeshFilter>();
        MeshRenderer meshRenderer = mySurface.AddComponent <MeshRenderer>();

        if (boundaryFace.parrentParcel.suid == 1)
        {
            meshRenderer.material = (Material)Resources.Load("Parcel3DSelectedMaterial");
        }
        else
        {
            meshRenderer.material = (Material)Resources.Load("Parcel3DMaterial");
        }
        Mesh mesh = mySurface.GetComponent <MeshFilter>().mesh;

        boundaryFace.meshRenderer = meshRenderer;

        ArrayList boundaryFacePolygonPointsVector = vector3(boundaryFace);
        int       n         = boundaryFacePolygonPointsVector.Count - 1; //prvni bod je tam dvakrat
        var       vertices  = new Vector3[n + 2];                        //pridavam stredovy bod a dvojnasobny prvni bod
        var       triangles = new int[n * 3];                            //počet bodů polygonu * 3

        Vector3 pM = calculateAvePoint(boundaryFacePolygonPointsVector);

        vertices[0] = pM;
        for (int i = 0; i < n; i++)
        {
            vertices[i + 1]  = (Vector3)boundaryFacePolygonPointsVector[i];
            triangles[3 * i] = 0;
            if (boundaryFace.orientation == '-')
            {
                triangles[3 * i + 1] = i + 1;
                triangles[3 * i + 2] = i + 2;
            }
            else if (boundaryFace.orientation == '+')
            {
                triangles[3 * i + 1] = i + 2;
                triangles[3 * i + 2] = i + 1;
            }
            else
            {
                throw new Exception("Wrong orientation sign");
            }
        }
        vertices[n + 1] = (Vector3)boundaryFacePolygonPointsVector[n];
        string tri = "";

        foreach (int t in triangles)
        {
            tri += t + ", ";
        }
        //UnityEngine.Debug.Log(tri);
        //foreach (Vector3 v in vertices) UnityEngine.Debug.Log(v.x + " " + v.y + " " + v.z);
        //UnityEngine.Debug.Log("");
        mesh.vertices  = vertices;
        mesh.triangles = triangles;
        mesh.RecalculateNormals();
    }