// 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);
        }
示例#2
0
        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);
        }
示例#4
0
        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);
                //				}
            }
        }