Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  MText Einfügepunkt ändern -> Textposition gleich - wie realisieren?

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  MText Einfügepunkt ändern -> Textposition gleich - wie realisieren? (788 mal gelesen)
JohannW.
Mitglied



Sehen Sie sich das Profil von JohannW. an!   Senden Sie eine Private Message an JohannW.  Schreiben Sie einen Gästebucheintrag für JohannW.

Beiträge: 14
Registriert: 29.10.2013

Windows 7 Enterprise SP1
Core i5-2520M
8 GB RAM<P>AutoCAD 2013

erstellt am: 28. Aug. 2015 12:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo liebe AutoCAD Experten 

Ich entwickle gerade ein Plugin für AutoCAD, das bestimmte einzeilige MText Objekte durch attributierte Blöcke ersetzt. Als Einfügepunkt für den Block benutze ich die jeweile MText.Location. Die meisten dieser Texte haben den Einfügepunkt "Unten links" definiert, daher ist auch der Block so gestaltet (bzw. wird zur Laufzeit so erzeugt), dass die Attributreferenz danach den Text perfekt ersetzt.

Einzelne dieser MTexte haben aber, wie ich feststellen musste, ihren Einfügepunkt "Oben links" definiert - der Block wird dann natürlich um die MText.ActualHeight versetzt platziert.

Wie kann ich dieses Dilemma lösen? Wenn man in AutoCAD direkt den Einfügepunkt eines MTextes ändert, bleibt der Text ja an der bestehenden Position, lediglich der Einfügepunkt wechselt an die neue Stelle. Also passieren dabei ja mehrere Schritte:
1.) Die aktuelle Position wird gespeichert
2.) .AttachmentPoint wird geändert
3.) .Location wird geändert, so dass der MText im Endeffekt wieder am selben Platz auftaucht.

Wie kann ich dieses Verhalten mit .NET nachbilden?

Angehängt ein Testmethode wie ich den AttachmentPoint ändere...

Code:
        [CommandMethod("MTextJustificationTest")]
        public void MTextJustificationTest()
        {
            Database db = Autodesk.AutoCAD.ApplicationServices.Core.Application.DocumentManager.MdiActiveDocument.Database;
            Editor ed = Autodesk.AutoCAD.ApplicationServices.Core.Application.DocumentManager.MdiActiveDocument.Editor;

            Point3d startPos = new Point3d();

            using (Transaction tr = db.TransactionManager.StartTransaction())
            {
                TypedValue[] filterDxf = new TypedValue[]
                {
                    new TypedValue((int)DxfCode.Start,"MTEXT")
                };
                SelectionFilter selectionFilter = new SelectionFilter(filterDxf);
                PromptSelectionResult psr = ed.SelectAll(selectionFilter);
                SelectionSet selectionSet = psr.Value;

                foreach (var objId in psr.Value.GetObjectIds())
                {
                    MText mText = tr.GetObject(objId, OpenMode.ForWrite) as MText;
                    if (mText.Attachment != AttachmentPoint.BottomLeft)
                    {
                        startPos = mText.Location;
                        // How to get the _real_ text position?
                        mText.Attachment = AttachmentPoint.BottomLeft;
                    }

                }
                tr.Commit();
            }
        }


Ich bin über jeden Hinweis dankbar!

lg

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Ingenieur Studio HOLLAUS
Mitglied
CAD / CAFM / GIS Beratung-Programmierung-Schulung


Sehen Sie sich das Profil von Ingenieur Studio HOLLAUS an!   Senden Sie eine Private Message an Ingenieur Studio HOLLAUS  Schreiben Sie einen Gästebucheintrag für Ingenieur Studio HOLLAUS

Beiträge: 1049
Registriert: 06.11.2008

Autocad 2 bis Autocad 2020 (+Map3D, +Civil3D, +Infraworks)
RKV .... CAFM+mehr
HMap ... Vermessung und Verkehr
OoC .... Raumplanung
CBox ... Tools für AutoCAD und BricsCAD (kostenfrei)

erstellt am: 28. Aug. 2015 12:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für JohannW. 10 Unities + Antwort hilfreich

Nur als Idee: wenn schon nur einzeilige MTEXT-Objekte behandelt werden sollen, könnte man gleich (im Speicher) ein .Explode dieser durchführen, das ergibt dann einen normalen DBTEXT und hat damit sehr genau definierte Positionen (.Position und .AlignmentPoint).
MTEXT hat mit dem variablen Rahmen (und andere Optionen wie z.B. mehrspaltig, ...) vieles, was die reinen Positionspunkte "sehr relativ" zur tatsächlichen Anzeigeposition macht.

------------------


www.cars4fun.at

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

JohannW.
Mitglied



Sehen Sie sich das Profil von JohannW. an!   Senden Sie eine Private Message an JohannW.  Schreiben Sie einen Gästebucheintrag für JohannW.

Beiträge: 14
Registriert: 29.10.2013

Windows 7 Enterprise SP1
Core i5-2520M
8 GB RAM<P>AutoCAD 2013

erstellt am: 28. Aug. 2015 16:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Danke für den Tipp, funktioniert in meinem konkreten Fall ganz wunderbar

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz