// Interface für MultiGeoPointInput mi public void SetGeoPoint(int Index, GeoPoint ThePoint) { if (dimDir == DimDirection.Sloping) //Schrägbemassung { if (Index == 0) { base.BasePoint = ThePoint; // Referenzpunkt für die Richtungsbestimmung } if ((Index == 1) & (!dimDirInput.Fixed)) // nur, falls nicht explizit die Richtung bestimmt wurde { // Schrägbemassung: der zweite Punkt definiert mit dem 1. die Lage dim.DimLineDirection = new GeoVector(dim.GetPoint(0), ThePoint); } } // das folgende dient nur dazu, den Cursor umzuschalten, falls Bemassung getroffen ist if (dim.PointCount == 2) { GeoObjectList li = base.GetObjectsUnderCursor(base.CurrentMousePoint); for (int i = 0; i < li.Count; ++i) { if (li[i] is Dimension) { Dimension dimTemp = (li[i] as Dimension); int ind; Dimension.HitPosition hi = dimTemp.GetHitPosition(base.Frame.ActiveView.Projection, base.ProjectedPoint(CurrentMousePoint), out ind); if ((hi & Dimension.HitPosition.DimLine) != 0) { base.Frame.ActiveView.SetCursor(CursorTable.GetCursor("Trim.cur")); } //TODO: Bemassungscursor! } } } dim.SetPoint(Index, ThePoint); }
private void SetDimLocation(GeoPoint p) { // der Lagepunkt der Bemassung dim.DimLineRef = p; if ((dimMethodPoint & !curveInput.Fixed) | (!dimMethodPoint & !dimPointInput.Fixed)) { dim.SetPoint(0, new GeoPoint(p.x - base.WorldLength(15), p.y - base.WorldLength(15))); } base.ShowActiveObject = true; // jetzt erfogt der Test, ob eine andere Bemassung vom Typ DimLocation getroffen wurde dimAddTo = null; // dient als merker für DimLocationOnMouseClick, Methode s.u. // Testen, ob eine Bemassung getroffen wurde GeoObjectList li = base.GetObjectsUnderCursor(base.CurrentMousePoint); for (int i = 0; i < li.Count; ++i) { if (li[i] is Dimension) { // die getroffene Bem. nutzen Dimension dimTemp = (li[i] as Dimension); if (dimTemp.DimType == Dimension.EDimType.DimLocation) { // nur Bemassung gleichen Typs int ind; // wo getroffen? nur an Hilfslinie, nicht am Text Dimension.HitPosition hi = dimTemp.GetHitPosition(base.Frame.ActiveView.Projection, base.ProjectedPoint(CurrentMousePoint), out ind); if ((hi & Dimension.HitPosition.DimLine) != 0) { // jetzt also: Bemassung merken dimAddTo = dimTemp; // und zur Kennung optisch den Refpunkt setzen dim.DimLineRef = dimTemp.DimLineRef; } } } } PerpFoot(); }
public void InsertGeoPoint(int Index, GeoPoint ThePoint) { if (dim.PointCount >= 2) { // nach dem 2.Punkt ist keine Änderung der Methode mehr möglich! dimMethod.ReadOnly = true; // Testen, ob eine Bemassung getroffen wurde GeoObjectList li = base.GetObjectsUnderCursor(base.CurrentMousePoint); if (Settings.GlobalSettings.GetBoolValue("Dimension.AutoExtend", true)) // eingeführt am 30.08.2016 { for (int i = 0; i < li.Count; ++i) { if (li[i] is Dimension) { // die getroffene Bem. nutzen Dimension dimTemp = (li[i] as Dimension); // nur wenn die Typen stimmen! if ((dimTemp.DimType == Dimension.EDimType.DimPoints) | (dimTemp.DimType == Dimension.EDimType.DimCoord)) { int ind; // wo getroffen? Dimension.HitPosition hi = dimTemp.GetHitPosition(base.Frame.ActiveView.Projection, base.ProjectedPoint(CurrentMousePoint), out ind); if ((hi & Dimension.HitPosition.DimLine) != 0) { // jetzt also: neuen Punkt einfügen, der kommt aus dim. dimTemp.AddPoint(dim.GetPoint(0)); base.ActiveObject = null; base.OnDone(); dimTemp.SortPoints(); dimTemp.Recalc(); return; } } } } } } if ((dim.PointCount == 2) & (methodSelect == 0)) { // ZweiPunktBemassung: Jetzt ist Schluss! mi.Fixed = true; if (!dimLocationInput.Fixed) { CADability.GeoObject.Point gPoint1 = ActionFeedBack.FeedbackPoint(base.Frame, PointSymbol.Cross); gPoint1.Location = ThePoint; base.FeedBack.Add(gPoint1); base.SetFocus(dimLocationInput, true); } else { base.OnDone(); } return; } dim.AddPoint(ThePoint); CADability.GeoObject.Point gPoint = ActionFeedBack.FeedbackPoint(base.Frame, PointSymbol.Cross); gPoint.Location = ThePoint; base.FeedBack.Add(gPoint); }
private void OnClickOnSelectedObject(IGeoObject selected, IView vw, MouseEventArgs e, ref bool handled) { if (!handled && propertyPage != null) { GeoPoint dp = vw.Projection.DrawingPlanePoint(new Point(e.X, e.Y)); int index; Dimension.HitPosition hp = dimension.GetHitPosition(vw.Projection, vw.Projection.ProjectUnscaled(dp), out index); if ((hp & Dimension.HitPosition.Text) != 0) { propertyPage.MakeVisible(dimText[index]); propertyPage.SelectEntry(dimText[index]); } else if ((hp & Dimension.HitPosition.LowerText) != 0) { propertyPage.MakeVisible(tolMinusText[index]); propertyPage.SelectEntry(tolMinusText[index]); } else if ((hp & Dimension.HitPosition.PostFix) != 0) { propertyPage.MakeVisible(postfix[index]); propertyPage.SelectEntry(postfix[index]); } else if ((hp & Dimension.HitPosition.PostFixAlt) != 0) { propertyPage.MakeVisible(postfixAlt[index]); propertyPage.SelectEntry(postfixAlt[index]); } else if ((hp & Dimension.HitPosition.Prefix) != 0) { propertyPage.MakeVisible(prefix[index]); propertyPage.SelectEntry(prefix[index]); } else if ((hp & Dimension.HitPosition.UpperText) != 0) { propertyPage.MakeVisible(tolPlusText[index]); propertyPage.SelectEntry(tolPlusText[index]); } else if ((hp & Dimension.HitPosition.AltText) != 0) { // den gibts noch nicht } // es wird nicht gehandled hier, damit der Text-Hotspot noch geht // der Texteditor macht noch zu große Probleme hier // er ist in der Dimension auch erst für DimText mit Index 0 implementiert ... // Text text = dimension.EditText(vw.Projection,0,Dimension.EditingMode.editDimText); // editor = new TextEditor(text,dimText[0],Frame); // editor.OnFilterMouseMessages(SelectObjectsAction.MouseAction.MouseDown, e,vw,ref handled); // if (handled) // { // text.DidChange += new ChangeDelegate(OnTextEdited); // } } }