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; }
private void RemoveCircular(GeoCircular geoCircular) { CircularBehaviour circularBehaviour = circularMap[geoCircular]; Destroy(circularBehaviour.gameObject); circularMap.Remove(geoCircular); }
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(); } }
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); }
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); }
private void UpdateCircular(GeoCircular geoCircular) { CircularBehaviour circularBehaviour = circularMap[geoCircular]; circularBehaviour.SetData(geometry.Circular(geoCircular)); }
public Circular Circular(GeoCircular circular) { return(circular.Circular()); }
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; } }
public void RemoveGeoCircular(GeoCircular circular) { geoCirculars.Remove(circular); circular.RemoveObserveElements(); }
public void AddGeoCircular(GeoCircular circular) { geoCirculars.Add(circular); circular.AddObserveElements(); }