Example #1
0
    public void Init(GeoCircular geoCircular, GeoCamera camera)
    {
        geoController       = GameObject.Find("/GeoController").GetComponent <GeoController>();
        geometryBehaviour   = GameObject.Find("/3D/Geometry").GetComponent <GeometryBehaviour>();
        geoCamera           = camera;
        geoCamera.OnRotate += OnCameraRotate;

        this.geoCircular = geoCircular;

        mesh         = new Mesh();
        colliderMesh = new Mesh();

        MeshFilter meshFilter = gameObject.AddComponent <MeshFilter>();

        meshRenderer            = gameObject.AddComponent <MeshRenderer>();
        meshCollider            = gameObject.AddComponent <MeshCollider>();
        meshFilter.sharedMesh   = mesh;
        meshCollider.sharedMesh = colliderMesh;

        meshFilter.sharedMesh = mesh;

        SetColorIndex(0);
        SetStyleIndex(0);

        StyleManager.OnStyleChange += () =>
        {
            SetColorIndex(0);
            SetStyleIndex(0);
        };

        visiable = true;
    }
Example #2
0
    private void RemoveCircular(GeoCircular geoCircular)
    {
        CircularBehaviour circularBehaviour = circularMap[geoCircular];

        Destroy(circularBehaviour.gameObject);
        circularMap.Remove(geoCircular);
    }
Example #3
0
    public override void InitWithGeometry(Geometry geometry)
    {
        units = new VertexUnit[] { };
        if (geometry is ResolvedBody)
        {
            resolvedBody = (ResolvedBody)geometry;
        }
        GeoVertex[] geoVertices = geometry.GeoVertices();
        int[]       ids         = new int[geoVertices.Length];
        for (int i = 0; i < geoVertices.Length; i++)
        {
            ids[i] = geoVertices[i].VertexUnit().id;
        }
        face = new FaceRefer(ids);

        elements = new GeoElement[] { };

        dependencies.AddRange(units);

        GeoCircular[] geoCirculars = geometry.GeoCirculars();
        if (geoCirculars.Length != 0)
        {
            GeoCircular geoCircular = geoCirculars[0];
            circular = geoCircular.Circular();
        }
    }
Example #4
0
    private void AddCircular(GeoCircular geoCircular)
    {
        GameObject planeObject = new GameObject(geoCircular.ToString());

        planeObject.transform.SetParent(faceWrapper.transform);

        CircularBehaviour circularBehaviour = planeObject.AddComponent <CircularBehaviour>();

        circularBehaviour.Init(geoCircular, geoCamera);

        circularBehaviour.SetData(geometry.Circular(geoCircular));

        circularMap.Add(geoCircular, circularBehaviour);
        elementMap.Add(geoCircular, circularBehaviour);
    }
Example #5
0
    public override Measure GenerateMeasure(Geometry geometry, FormInput formInput)
    {
        bool valid = ValidateInput(geometry, formInput);

        if (!valid)
        {
            return(null);
        }

        if (!(geometry is ResolvedBody))
        {
            return(null);
        }
        else
        {
            ResolvedBody resolvedBody = (ResolvedBody)geometry;
            if (!resolvedBody.isSpinned)
            {
                return(null);
            }
            GeoCircular[] geoCirculars = geometry.GeoCirculars();
            if (geoCirculars.Length != 0)
            {
                GeoCircular geoCircular = geoCirculars[0];
                Circular    circular    = geoCircular.Circular();
                if (!circular.IsNormalCircular())
                {
                    return(null);
                }
            }
        }

        GeoVertex[] geoVertices = geometry.GeoVertices();
        int[]       ids         = new int[geoVertices.Length];
        int         index       = 0;

        foreach (GeoVertex vertice in geoVertices)
        {
            ids[index++] = vertice.Id;
        }
        SurfaceAreaMeasure measure = new SurfaceAreaMeasure(ids);

        return(measure);
    }
    public void GenerateResolvedBody(Geometry geometry)
    {
        SpinAuxiliary auxiliary = new SpinAuxiliary();

        auxiliary.InitWithGeometry(geometry);
        geometryBehaviour = GameObject.Find("/3D/Geometry").GetComponent <GeometryBehaviour>();
        VertexUnit[] vertexUnits = auxiliary.vertices;
        // Cylinder
        if (vertexUnits.Length == 4)
        {
            VertexUnit vertex1 = vertexUnits[0];
            VertexUnit vertex2 = vertexUnits[1];
            VertexUnit vertex3 = vertexUnits[2];
            VertexUnit vertex4 = vertexUnits[3];
            float      radius1 = vertexUnits[3].Position().z;
            float      radius2 = vertexUnits[2].Position().z;

            GeoCircular circular = new GeoCircular(new VertexUnit[] { vertex1, vertex2, vertex3, vertex4 }, radius1, radius2, CircularType.Cylinder);
            geometry.AddGeoCircular(circular);
            VertexSpace circle1 = new VertexSpace(0, vertex4.Position().y, 0);
            VertexSpace circle2 = new VertexSpace(0, vertex3.Position().y, 0);
            geometry.AddGeoCircle(new GeoCircle(circle1, radius1, CircleDirection.Y, false, FaceType.SpreadCylinderCircle));
            geometry.AddGeoCircle(new GeoCircle(circle2, radius2, CircleDirection.Y, false, FaceType.SpreadCylinderCircle));
        }
        // Cone
        else if (vertexUnits.Length == 3)
        {
            VertexUnit vertex1 = vertexUnits[0];
            VertexUnit vertex2 = vertexUnits[1];
            VertexUnit vertex3 = vertexUnits[2];
            float      radius  = vertexUnits[2].Position().z;

            GeoCircular circular = new GeoCircular(new VertexUnit[] { vertex1, vertex2, vertex3 }, radius, radius, CircularType.Cone);
            geometry.AddGeoCircular(circular);
            VertexSpace circle1 = new VertexSpace(0, vertex3.Position().y, 0);
            geometry.AddGeoCircle(new GeoCircle(circle1, radius, CircleDirection.Y, false, FaceType.SpreadConeCircle));
        }
        geometryBehaviour.InitGeometry(geometry);

        StatusButton lockButton = GameObject.Find("LockButton").GetComponent <StatusButton>();

        lockButton.SetStatus(0);
    }
Example #7
0
    private void UpdateCircular(GeoCircular geoCircular)
    {
        CircularBehaviour circularBehaviour = circularMap[geoCircular];

        circularBehaviour.SetData(geometry.Circular(geoCircular));
    }
Example #8
0
 public Circular Circular(GeoCircular circular)
 {
     return(circular.Circular());
 }
Example #9
0
    public void SetSpreadFaceStyle(GeoElement element, int i)
    {
        GeoFace geoFace;

        if (element is GeoFace)
        {
            geoFace = (GeoFace)element;
        }
        else
        {
            return;
        }
        this.SetElementColor(element, i);
        GeometryBehaviour geometryBehaviour = GameObject.Find("/3D/Geometry").GetComponent <GeometryBehaviour>();

        switch (geoFace.faceType)
        {
        case FaceType.Normal:
            break;

        case FaceType.SpreadRectangle:
        case FaceType.SpreadFan:
            for (int index = 0; index < geoCirculars.Count; index++)
            {
                GeoCircular circular = geoCirculars[0];
                this.SetElementColor(circular, i);
                geometryBehaviour.GeometryElementColorChange(circular, i);
            }
            break;

        case FaceType.SpreadCylinderCircle:
        case FaceType.SpreadConeCircle:
            Vector3[] vectors = geoFace.Face().Vertices;
            if (vectors.Length == 0)
            {
                break;
            }
            Vector3 v = (vectors[0] + vectors[vectors.Length / 2]) / 2;
            Dictionary <GeoElement, ElementBehaviour> elementMap = geometryBehaviour.GetGeoElements();
            GeoFace face;
            foreach (GeoElement key in elementMap.Keys)
            {
                if (key is GeoFace)
                {
                    face = (GeoFace)key;
                    if (geoFace.faceType == face.faceType)
                    {
                        if (face.faceType == FaceType.SpreadCylinderCircle)
                        {
                            vectors = face.Face().Vertices;
                            if (vectors.Length == 0)
                            {
                                continue;
                            }
                            Vector3 tmp = (vectors[0] + vectors[vectors.Length / 2]) / 2;
                            if ((tmp.y > 0 && v.y > 0) || (tmp.y < 0 && v.y < 0))
                            {
                                this.SetElementColor(face, i);
                                geometryBehaviour.GeometryElementColorChange(face, i);
                            }
                        }
                        if (face.faceType == FaceType.SpreadConeCircle)
                        {
                            this.SetElementColor(face, i);
                            geometryBehaviour.GeometryElementColorChange(face, i);
                        }
                    }
                }
            }
            break;
        }
    }
Example #10
0
 public void RemoveGeoCircular(GeoCircular circular)
 {
     geoCirculars.Remove(circular);
     circular.RemoveObserveElements();
 }
Example #11
0
 public void AddGeoCircular(GeoCircular circular)
 {
     geoCirculars.Add(circular);
     circular.AddObserveElements();
 }