| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX |
Autor
|
Thema: Alle Elemente einer Drafting-View finden (3921 mal gelesen)
|
macfrei Mitglied
Beiträge: 7 Registriert: 13.06.2012
|
erstellt am: 13. Jun. 2012 20:59 <-- editieren / zitieren --> Unities abgeben:
Hallo Ich suche eine Methode, wie ich alle Elemente, die im NX Drafting in der aktuellen Drawing in einer View sind. Ich kann die View-Collection holen, die einzeln Views durchgehen, habe aber (noch) nichts gefunden, wie ich ermitteln kann, was alles in dieser View enthalten ist (Collection der NX-Objekte). aktueller Stand (C#): Code: Session theSession = Session.GetSession(); UFSession theUfSession = UFSession.GetUFSession(); Part workPart = theSession.Parts.Work; NXOpen.Drawings.DraftingViewCollection DftgViewColl; NXOpen.Drawings.DraftingView[] dViews; DftgViewColl = workPart.DraftingViews ; dViews = DftgViewColl.ToArray(); vCount = dViews.Length;
for (int i = 0; i < vCount; i++) { ..... finden der Elemente in dieser View
Wenn jemand eine Idee hat... Gruss Mac
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: 14. Jun. 2012 09:21 <-- editieren / zitieren --> Unities abgeben: Nur für macfrei
Moin, da gibts eine Methode NXOpen.DisplayableObject[] displayable_objects = workpart.DrawingSheets.ToArray()[i].View.AskVisibleObjects bzw. für die View: NXOpen.DisplayableObject[] displayable_objects = workpart.DraftingViews.ToArray()[i].AskVisibleObjects(); geht aber nur wenn die View wirklich sichtbar ist. Wenn nicht musst du über die UF gehn.
------------------ Gruß Matthias ------------------------------------ ICQ: 163190295 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
macfrei Mitglied
Beiträge: 7 Registriert: 13.06.2012
|
erstellt am: 14. Jun. 2012 09:28 <-- editieren / zitieren --> Unities abgeben:
Hallo Matthias Danke für die schnelle Antwort. Das kann ich evtl. verwenden. Wobei ich eben festgestellt habe, dass Objekte, die nicht im "View-Frame" sind (also ausserhalb um unsichtbaren Bereich) nicht aufgelistet werden (work as designed ;-) Daher werde ich voraussichtlich auf die UF ausweichen müssen. Kennst du dort ein Objekt oder eine Methode, die die Elemente in der View auflistet? Danke und Gruss Markus
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: 14. Jun. 2012 09:50 <-- editieren / zitieren --> Unities abgeben: Nur für macfrei
...puh...versuchs mal damit. HAb ich aber nicht getestet: UF_VIEW_ask_visible_objects (view source) Defined in: uf_view.h Overview Returns visible objects in a view broken down by those which are entirely visible within the view and those which are visible but clipped by the view boundary (i.e those which cross the view boundary). Note that this function is primarily designed to work with drafting member views. While it may be used with model views or drawing sheet views, the bounds of those latter views are not considered in the outcome. The bounds of drafting member views, including those with non-rectangular borders are considered.
------------------ Gruß Matthias ------------------------------------ ICQ: 163190295 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
macfrei Mitglied
Beiträge: 7 Registriert: 13.06.2012
|
erstellt am: 14. Jun. 2012 11:15 <-- editieren / zitieren --> Unities abgeben:
Danke, Matthias ich kanns sogar mit der .NET Implementierung fer UF realisieren: Code: theUfSession.View.AskVisibleObjects(vTag, out oCount, out oTags, out cCount, out cTags);
um aber die "einfachen" Objekte und Methoden zu verwenden, die in .NET API vorhanden sind, muss ich aus jedem Tag, der mit obiger Funktion geliefert wird, das entsprechende Objekt zuordnen/finden: Code:
tmpIDSym = (NXOpen.Annotations.IdSymbol)<<das_objekt_anhand_des_Tags_ermitteln>> ; symPref = tmpIDSym.GetSymbolPreferences(); lettPref = tmpIDSym.GetLetteringPreferences(); generalText1 = lettPref.GetGeneralText();
Gibt es da eine Möglichkeit, anhand des Tags in der API ein NX-Objekt zu finden? Gruss und Danke Markus 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: 14. Jun. 2012 11:17 <-- editieren / zitieren --> Unities abgeben: Nur für macfrei
...gibts, ja... NXOpen .Net API Reference Get Method (objectTag) Namespaces ► NXOpen.Utilities ► NXObjectManager ► Get(Tag)C#Visual BasicVisual C++Returns the object corresponding to a tag. Declaration Syntax C# Visual Basic Visual C++ public static TaggedObject Get( Tag objectTag ) Public Shared Function Get ( _ objectTag As Tag _ ) As TaggedObject public: static TaggedObject^ Get( Tag objectTag ) Parameters objectTag (Tag) Tag for which an object is wanted. Return Value The object for this tag
------------------ Gruß Matthias ------------------------------------ ICQ: 163190295 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
macfrei Mitglied
Beiträge: 7 Registriert: 13.06.2012
|
erstellt am: 14. Jun. 2012 17:46 <-- editieren / zitieren --> Unities abgeben:
... NX ist manchemal schon schwierig... Beim Ausführen der Abfrage des Namens, kirge ich dir unten aufgeführte Felermeldung. Nach kurzem Test ist klar, dass keines der Tag-Objekte einen namen zugeordnet hat. (Was in der Realistät aber eher unwahrscheinlich und bei meinem Test-Sheet ganz sicher nicht der Fall ist) Code:
theUfSession.View.AskVisibleObjects(vTag, out oCount, out oTags, out cCount, out cTags); for (int nn = 0; nn < oCount; nn++) { try { theUfSession.Obj.AskName(oTags[nn], out foundObjName);
*** EXCEPTION: Error code 3600041 in line 1946 of o:\ugnx753\ip3\src\syss\no\ind\lmldr.c at Thu Jun 14 14:21:08 2012 Mitteleuropäische Sommerzeit +++ Object has no name assigned to it Ich brauche den Namen um die richtigen Objekte zu finden, die zu behandeln sind. ahwba Markus
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
little_ug Mitglied CAX/PDM Admin / PM
Beiträge: 389 Registriert: 20.03.2003 NX 7.5.4.4 mp1 Creo2 M020 TC UA 9.1.1.2
|
erstellt am: 15. Jun. 2012 07:52 <-- editieren / zitieren --> Unities abgeben: Nur für macfrei
|
| Planungskoordinator:in (m/w/d) Hochbau | Als Teil der weltweit tätigen STRABAG SE und Nummer eins im deutschen Hoch- und Ingenieurbau bauen wir bei ZÜBLIN laufend am Fortschritt. Einzigartigkeit und individuelle Stärken kennzeichnen dabei unsere Projekte und jede:n Einzelne:n von uns. Ob im Hoch- und Ingenieurbau, Spezialtiefbau, Tunnel-, Stahl- und Holzbau oder in der Bauwerkserhaltung ? wir denken Bauen weiter, um der innovativste und nachhaltigste Bautechnologiekonzern Europas zu werden.... | Anzeige ansehen | Bauwesen |
|
macfrei Mitglied
Beiträge: 7 Registriert: 13.06.2012
|
erstellt am: 15. Jun. 2012 17:01 <-- editieren / zitieren --> Unities abgeben:
Hallo Michael, Matthias Danke für die Unterstützung. Es klappt! Die Ursache, dass der Name in der Routine: theUfSession.Obj.AskName(oTags[nn], out foundObjName) nicht gefunden wurde lag daran, dass diese UF Routine wahrscheinlich keine REF aus einem Array als Input entgegen nehmen kann. Wenn ich die Routine so aufrufe: theUfSession.Obj.AskName(tmpTag, out foundObjName) (tmpTag wurde zuvor der Inhalt aus der Position "nn" das Arrays "oTags" zugeornet), dann läuft das wunderbar. Nochmals Danke und schönes Wochenende Markus
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |