| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX |
Autor
|
Thema: Text (Note) über Koordinaten ansprechen (1404 mal gelesen)
|
RobertM Mitglied
Beiträge: 223 Registriert: 03.12.2008 noch NX 8.5 + TC Teamcenter 9.1.2.2 64-Bit
|
erstellt am: 10. Jan. 2011 14:52 <-- editieren / zitieren --> Unities abgeben:
|
mseufert Moderator Freiberuflicher CAD/CAM Ingenieur
Beiträge: 2700 Registriert: 18.10.2005 HP Z420 WIN7 64 Win 10 UG NX6-2306 3D Printer Prusa MK2 S
|
erstellt am: 10. Jan. 2011 17:58 <-- editieren / zitieren --> Unities abgeben: Nur für RobertM
Hallo Robert, folgendes sollte funktionieren: Schleife über alle relevanten Notes, darin Einsetzpunkt etc. der jeweiligen Note ermitteln und mit der vorgegebenen Position vergleichen, am besten über den Abstand note_loc/ref_loc. Nach oder noch in der der Schleife Minimalabstand suchen. Die Note mit dem geringsten Abstand ist Dein Kandidat. Gruß, Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RobertM Mitglied
Beiträge: 223 Registriert: 03.12.2008 noch NX 8.5 + TC Teamcenter 9.1.2.2 64-Bit
|
erstellt am: 11. Jan. 2011 08:35 <-- editieren / zitieren --> Unities abgeben:
Hallo Michael, Danke für den Tip. Leider bin ich schon überfordert alle relevanten Notes zu finden. Dieser Weg scheint nicht der Richtige zu sein: Part display = theSession.Parts.Display; NXOpen.Annotations.Note[] alleTexte = display.Notes.ToArray(); ------------------ Gruß Robert
[Diese Nachricht wurde von RobertM am 11. Jan. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mseufert Moderator Freiberuflicher CAD/CAM Ingenieur
Beiträge: 2700 Registriert: 18.10.2005 HP Z420 WIN7 64 Win 10 UG NX6-2306 3D Printer Prusa MK2 S
|
erstellt am: 11. Jan. 2011 09:32 <-- editieren / zitieren --> Unities abgeben: Nur für RobertM
Hallo Robert, die Collection display.Notes sollte in Ordnung sein, alternativ gibt's unter UF_OBJ einige "cycle"-Funktionen, um an bestimmte Objekte im Part dran zu kommen. Was steht denn im Array drin ? Gruß, Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RobertM Mitglied
Beiträge: 223 Registriert: 03.12.2008 noch NX 8.5 + TC Teamcenter 9.1.2.2 64-Bit
|
erstellt am: 11. Jan. 2011 10:51 <-- editieren / zitieren --> Unities abgeben:
Hallo Michael ich habe meinen Text identifiziert: Part display = theSession.Parts.Display; NXOpen.Annotations.Note[] alleTexte = display.Notes.ToArray(); string[] einText = new string[0]; Point3d suchpunkt = new Point3d(194.0, 2.5, 0.0); foreach (Note note in display.Notes) { einText = note.GetText(); Point3d punkt; note.GetAssociativeOrigin(out punkt); if (Equals(punkt, suchpunkt)) { //löschen NXObject[] objects1 = new NXObject[1]; objects1[0] = note; int errs1 = theSession.UpdateManager.AddToDeleteList(objects1); // ob das hier richtig ist weiß ich nicht, hab's aus einem journal abgeschrieben // funktioniert aber NXOpen.Session.UndoMarkId markId1; markId1 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Delete"); errs1 = theSession.UpdateManager.DoUpdate(markId1); } } Autsch: Jetzt habe ich noch ein Problem. Ich habe mehrere Sheets mit Text an der gleichen Stelle. Ich will natürlich blos den Text auf dem aktiven Sheet löschen. ------------------ Gruß Robert [Diese Nachricht wurde von RobertM am 11. Jan. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mseufert Moderator Freiberuflicher CAD/CAM Ingenieur
Beiträge: 2700 Registriert: 18.10.2005 HP Z420 WIN7 64 Win 10 UG NX6-2306 3D Printer Prusa MK2 S
|
erstellt am: 11. Jan. 2011 15:48 <-- editieren / zitieren --> Unities abgeben: Nur für RobertM
Hallo Robert, siehst Du, geht doch. Eine Sache scheint mir allerdings recht wacklig: Code: if (Equals(punkt, suchpunkt))
Wenn sich die Positionen in der zigsten Nachkommastelle unterscheiden, was bei Doubles schon mal vorkommen kann, wird der if- Block nicht mehr ausgeführt. Daher besser den Abstand der Positionen berechnen und mit einem Grenzwert (Epsilon) vergleichen. Das Setzen der UndoMark ist im Prinzip ok, allerdings zu spät. SetUndoMark sollte vor der Stelle stehen, die Du evtl. rückgängig machen willst, am besten ganz an den Anfang stellen. Die Frage nach den Sheets kannst Du ganz ähnlich lösen: Die gefundenen Notes abfragen, auf welchem Sheet sie liegen. Gruß, Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gfx-toxic.de Moderator Konstruktion / Anwenderbetreuung
Beiträge: 501 Registriert: 09.06.2006 Teamcenter 11.3 / NX 11 Windows 10
|
erstellt am: 11. Jan. 2011 16:52 <-- editieren / zitieren --> Unities abgeben: Nur für RobertM
Hallo Michael Das würde mich auch interessieren wie das geht. Da scheitere ich bis jetzt dran. Im Moment schreibe ich das Analyse Info Objekt Fenster in eine txt Datei und lese es aus....unschön. Zitat: Original erstellt von mseufert:
Die Frage nach den Sheets kannst Du ganz ähnlich lösen: Die gefundenen Notes abfragen, auf welchem Sheet sie liegen.Gruß, Michael
------------------ Gruß Matthias ------------------------------------ ICQ: 163190295 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mseufert Moderator Freiberuflicher CAD/CAM Ingenieur
Beiträge: 2700 Registriert: 18.10.2005 HP Z420 WIN7 64 Win 10 UG NX6-2306 3D Printer Prusa MK2 S
|
erstellt am: 11. Jan. 2011 17:21 <-- editieren / zitieren --> Unities abgeben: Nur für RobertM
Hallo zusammen, auf uganswer.ugs.com gibt's ein Beispiel: find all notes on current drawing sheet Da werden über ufs.View.CycleObjects alle Objekte der DrawingView ermittelt und einzeln abgefragt, ob es sich um eine Note handelt. Gruß, Michael
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RobertM Mitglied
Beiträge: 223 Registriert: 03.12.2008 noch NX 8.5 + TC Teamcenter 9.1.2.2 64-Bit
|
erstellt am: 17. Jan. 2011 09:20 <-- editieren / zitieren --> Unities abgeben:
Es hat ein wenig gedauert, aber ich habe jetzt 2 Lösungen für mein Problem. Beide ohne NXOpen.UF // Lösung 1 - Löschen über Point3d private void DeleteNoteL1(Point3d Punkt) { Session theSession = Session.GetSession(); NXOpen.Session.UndoMarkId markId1; markId1 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Delete"); Part workpart = theSession.Parts.Work; // entweder so DrawingSheet currentSheet = workpart.DrawingSheets.CurrentDrawingSheet; NXOpen.View view = currentSheet.View; DisplayableObject[] dispObj = view.AskVisibleObjects(); // oder so DisplayableObject[] dispObj = workpart.DrawingSheets.CurrentDrawingSheet.View.AskVisibleObjects(); int errs1; foreach (DisplayableObject dis in dispObj) { Type _typeOfDis = dis.GetType(); if (_typeOfDis.Name == "Note") { /* dis.Name darf nicht leer sein, sonst erzeugt * Point3d disPunkt = dis.NameLocation; * eine Exception */ if (dis.Name == "") dis.SetName("dummy"); Point3d disPunkt = dis.NameLocation; /* wie Michael richtig bemerkt hat funktioniert folgender Aufruf nur, * wenn die Koordianten von 'Punkt' exakt bekannt sind. * Was bei mir der Fall ist, weil die Note auch mit einem Programm erzeugt wurde. * Woraus sich die elegantere zweite Lösung ergibt. */ if (Equals(disPunkt, Punkt)) { NXObject[] objects1 = new NXObject[1]; objects1[0] = dis; errs1 = theSession.UpdateManager.AddToDeleteList(objects1); } } } errs1 = theSession.UpdateManager.DoUpdate(markId1); } // Lösung 2 - Löschen über Note.Name, den ich beim Erzeugen der Note setze. private void DeleteNoteL2(String NoteName) { Session theSession = Session.GetSession(); NXOpen.Session.UndoMarkId markId1; markId1 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Delete"); Part workpart = theSession.Parts.Work; Part display = theSession.Parts.Display; var delNote = (display.Notes.ToArray()).Where(note => note.Name == NoteName); int errs1; foreach (Note note in delNote) { NXObject[] objects1 = new NXObject[1]; objects1[0] = note; errs1 = theSession.UpdateManager.AddToDeleteList(objects1); } errs1 = theSession.UpdateManager.DoUpdate(markId1); } Vielleicht kann ja jemand was damit anfangen. Würde mich über ein feedback freuen. ------------------ Gruß Robert Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| |
mseufert Moderator Freiberuflicher CAD/CAM Ingenieur
Beiträge: 2700 Registriert: 18.10.2005 HP Z420 WIN7 64 Win 10 UG NX6-2306 3D Printer Prusa MK2 S
|
erstellt am: 17. Jan. 2011 11:20 <-- editieren / zitieren --> Unities abgeben: Nur für RobertM
Hallo Robert, wenn die Notes Namen haben, ist Lösung 2 klar der bessere Weg. Es sei denn, die Namen können mehrfach vorkommen. Dann braucht's wieder ein weiteres Unterscheidungsmerkmal. Gruß, Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |