protected override VirgisFeature _addFeature(Vector3[] geometry) { VirgisFeature newFeature = _drawFeature(geometry[0]); changed = true; return(newFeature); }
public void RemoveVertex(VirgisFeature vertex) { if (AppState.instance.InEditSession() && IsEditable()) { vertex.gameObject.Destroy(); } }
public bool Equals(VirgisFeature other) { if (other == null) { return(false); } return(this._id.Equals(other.GetId())); }
// Start is called before the first frame update void Start() { _appState = AppState.instance; _markerShapeMap = new Dictionary <Guid, GameObject>(); _markerShape = defaultMarkerShape; _appState.editSession.StartEvent.Subscribe(OnStartEditSession); _appState.editSession.EndEvent.Subscribe(OnEndEditSession); _appState.editSession.ChangeLayerEvent.Subscribe(OnEditableLayerChanged); _waitingForSecondPress = false; _newFeature = null; }
public override void RemoveVertex(VirgisFeature vertex) { if (BlockMove) { Destroy(gameObject); } else { _redraw(); } }
public override bool Equals(object obj) { if (obj == null) { return(false); } VirgisFeature com = obj as VirgisFeature; if (com == null) { return(false); } else { return(Equals(com)); } }
private void OnTriggerDoublePress() { if (_appState.editSession.IsActive()) { IVirgisLayer editableLayer = _appState.editSession.editableLayer; FeatureType dataType = editableLayer.featureType; switch (dataType) { case FeatureType.LINE: if (_newFeature != null) { VirgisFeature temp = _lastVertex[0]; _lastVertex.Clear(); temp.UnSelected(SelectionType.SELECT); // if edit mode is snap to anchor and start and end vertexes are at the same position if (_appState.editSession.mode == EditSession.EditMode.SnapAnchor && _firstVertex.transform.position == temp.transform.position) { (_newFeature as Dataline).MakeLinearRing(); } // complete adding line feature _newFeature = null; } break; case FeatureType.POLYGON: if (_newFeature != null) { // complete adding polygon feature _newFeature = null; VirgisFeature temp = _lastVertex[0]; _lastVertex.Clear(); temp.UnSelected(SelectionType.SELECT); } break; } } }
private void OnTriggerSinglePress(Vector3 posWhenSinglePress) { if (_appState.editSession.IsActive()) { IVirgisLayer editableLayer = _appState.editSession.editableLayer; FeatureType dataType = editableLayer.featureType; Datapoint[] vertexes; switch (dataType) { case FeatureType.POINT: VirgisFeature point = editableLayer.AddFeature(new Vector3[1] { posWhenSinglePress }); point.UnSelected(SelectionType.SELECT); break; case FeatureType.LINE: //Debug.Log($"ShapeAdder add Vertex"); if (_newFeature != null) { _newFeature.AddVertex(posWhenSinglePress); } else { _newFeature = editableLayer.AddFeature(new Vector3[2] { posWhenSinglePress, posWhenSinglePress + Vector3.one * 0.1f }); // get the last vertex vertexes = (_newFeature as Dataline).GetVertexes(); _firstVertex = vertexes[0]; _lastVertex.Add(vertexes[1]); _firstVertex.UnSelected(SelectionType.SELECT); } break; case FeatureType.POLYGON: if (_newFeature != null) { if (_lastVertex.Count == 1) { _newFeature.transform.GetComponentInChildren <Dataline>().AddVertex(posWhenSinglePress); } else { _lastVertex[0].UnSelected(SelectionType.SELECT); _lastVertex.RemoveAt(0); } } else { _newFeature = editableLayer.AddFeature(new Vector3[4] { posWhenSinglePress, posWhenSinglePress + Vector3.right * 0.01f, posWhenSinglePress + Vector3.up * 0.01f, posWhenSinglePress }); vertexes = (_newFeature as Datapolygon).GetVertexes(); _firstVertex = vertexes[0]; _lastVertex.Add(vertexes[1]); _lastVertex.Add(vertexes[2]); } break; } } }
public override void RemoveVertex(VirgisFeature vertex) { if (BlockMove) { Destroy(gameObject); } else { VertexLookup vLookup = VertexTable.Find(item => item.Com == vertex); if (vLookup.isVertex) { int thisVertex = vLookup.Vertex; if (vLookup.Line != null) { Destroy(vLookup.Line.gameObject); } else { Destroy(VertexTable.Find(item => item.Vertex == vLookup.Vertex - 1).Line.gameObject); } Destroy(vLookup.Com.gameObject); VertexTable.Remove(vLookup); VertexTable.ForEach(item => { if (item.Vertex >= thisVertex) { item.Vertex--; if (item.Line != null) { item.Line.vStart--; if (item.Line.vEnd != 0) { item.Line.vEnd--; } } } ; if (Lr && item.isVertex && item.Line.vEnd >= VertexTable.Count) { item.Line.vEnd = 0; } ; }); int end = thisVertex; int start = thisVertex - 1; if (Lr && thisVertex >= VertexTable.Count) { end = 0; } if (Lr && thisVertex == 0) { start = VertexTable.Count - 1; } Debug.Log($"start : {start}, End : {end}"); if (VertexTable.Count > 1) { VertexTable.Find(item => item.Vertex == start).Line.MoveEnd(VertexTable.Find(item => item.Vertex == end).Com.transform.position); } else { Destroy(gameObject); } } } transform.parent.SendMessage("RemoveVertex", this, SendMessageOptions.DontRequireReceiver); }
/// <summary> /// call this to remove a vertxe from a feature /// </summary> /// <param name="vertex">Vertex to remove</param> public virtual void RemoveVertex(VirgisFeature vertex) { // do nothing throw new System.NotImplementedException(); }