Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  NX Programmierung
  Problem mit Koordinatensystem einer Komponente innerhaln einer Baugruppe

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 NX
Autor Thema:  Problem mit Koordinatensystem einer Komponente innerhaln einer Baugruppe (1330 mal gelesen)
geraldb
Mitglied



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

Beiträge: 38
Registriert: 13.09.2008

erstellt am: 20. Aug. 2016 20:58    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,

innerhalb einer Baugruppe wähle ich per BlockStyler ein Komponente (comp) aus. Im weiteren Verlauf soll auf diese eine PMI Note platziert werden, Anordnung an einem Punkt eines speziellen ReferenceSets.
Nun habe ich Probleme, das zutreffende Koordinatensystem zu finden. Im NX-Journal ist eine Zeile '(CartesianCoordinateSystem)comp.FindObject("Proto#Handle R-123456")' enthalten. Hier benötige ich jedoch Variablilität, das Koordinatensystem sollte flexibel ermittelbar sein.
Die über den BlockStyler per Objektauswahl erhaltene Komponente enthält jedoch keine Features.

Vielleicht hat jemand von Euch eine Lösung oder nützliche Hinweise für mich.
Danke
Gerald

[Diese Nachricht wurde von geraldb am 20. Aug. 2016 editiert.]

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

mseufert
Moderator
Freiberuflicher CAD/CAM Ingenieur


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

Beiträge: 2624
Registriert: 18.10.2005

HP Z420
WIN7 64 Win 10
UG NX6-1980
3D Printer Prusa MK2 S

erstellt am: 22. Aug. 2016 09:56    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 geraldb 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von geraldb:
Nun habe ich Probleme, das zutreffende Koordinatensystem zu finden.
...
Die über den BlockStyler per Objektauswahl erhaltene Komponente enthält jedoch keine Features.

Warum suchst Du nach Features, wenn ein Koordinatensystem benötigt wird ??

Zitat:
Original erstellt von geraldb:
Vielleicht hat jemand von Euch eine Lösung oder nützliche Hinweise für mich.

Es sind immer wieder die selben Fragen und Antworten:

Welche Umgebung steht zur Debatte: NX-Version, API, Sprache, ... ??? Oder besser: Codeausschnitt posten.

Mach' Dich mit den Grundlagen einer Baugruppe vertraut (-> Doku net-ref.chm unter UF_ASSEM das Kapitel "Terminology and Concepts")

Daneben für das leidige Thema .FindObject zu empfehlen: NX Open Programmer's Guide, Kapitel "Turning Journals Into Applications"

Gruß, Michael

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

geraldb
Mitglied



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

Beiträge: 38
Registriert: 13.09.2008

erstellt am: 22. Aug. 2016 16:18    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 Michael,


die Suche innerhalb der Features ist ggf. die falsche Stelle. Zum Einsatz kommt NX 8 in Verbindung mit UI-BlockStyler und C#.
Für jeder per UI-Dialog selektierte Komponente vom Typ MEINE_KOMPONENTE innerhalb der dargestellten Baugruppe soll das Referenzset nach MEIN_REFSET umgeschaltet, eine neue PMI Note mit dem Inhalt einer Variablen MEINE_VARIABLE abgebildet und mit einem benannten Koordinatensystem MEIN_CCSYS assoziiert werden.

Das funktioniert für eine bestimmte Baugruppe; bei allen anderen sind insbesondere Zeile 89

Code:

CartesianCoordinateSystem cartesianCoordinateSystem1 = (CartesianCoordinateSystem)component1.FindObject("PROTO#HANDLE R-251643");


und Zeile 95 problematisch.
Code:

Point point1 = (Point)component1.FindObject("PROTO#.Features|POINT(4)|POINT 1");


Gesamter Codebaustein:

Code:

    //------------------------------------------------------------------------------
    //Callback Name: apply_cb
    //------------------------------------------------------------------------------
    public int apply_cb()
    {
        int errorCode = 0;
        try
        {
            //---- Enter your callback code here -----
            System.Collections.Generic.SortedList<double, NXOpen.Assemblies.Component> objlst = new System.Collections.Generic.SortedList<double, NXOpen.Assemblies.Component>();

            Part workPart = theSession.Parts.Work;
            int i = 0;

            for (i = 0; i < selDev.GetProperties().GetTaggedObjectVector("SelectedObjects").Length; i++)
            {
                Point3d comppos;
                Matrix3x3 compmatr;
                if (String.Compare(selDev.GetProperties().GetTaggedObjectVector("SelectedObjects")[i].GetType().FullName.ToString(), "NXOpen.Assemblies.Component", true) != 0) continue;
                NXOpen.Assemblies.Component comp = (NXOpen.Assemblies.Component)selDev.GetProperties().GetTaggedObjectVector("SelectedObjects")[i];
                comp.GetPosition(out comppos, out compmatr);
                objlst.Add(comppos.X, comp);
            }

            if (objlst.Count < 1) return 0; //keine Komponenten markiert


            NXOpen.Assemblies.Component[] complst = new NXOpen.Assemblies.Component[objlst.Count];

            i = 0;
            foreach (NXOpen.Assemblies.Component comp in objlst.Values)
            {
                complst[i] = comp;
                i++;
            }

            ErrorList errLst;
            errLst = workPart.ComponentAssembly.ReplaceReferenceSetInOwners("MEIN_REFSET", complst); //Referenceset umschalten
            errLst.Dispose();

            bool isint = true;

            int start = -1;
            string praefix = txtPraefix.GetProperties().GetString("Value").Trim();
            string txt = txtDev.GetProperties().GetString("Value").Trim();
            string suffix = txtSuffix.GetProperties().GetString("Value").Trim();
            try
            {
                start = int.Parse(txt);
            }
            catch
            {
                isint = false;
            }

            foreach (NXOpen.Assemblies.Component comp in objlst.Values)
            {
                NXObject[] nxobj = new NXObject[1];
                nxobj[0] = comp;
                AttributePropertiesBaseBuilder attpropbui = workPart.PropertiesManager.CreateAttributePropertiesBuilder(nxobj);
                attpropbui.ObjectPicker = AttributePropertiesBaseBuilder.ObjectOptions.ComponentInstance;
                attpropbui.Title = "MEIN_ATTRIBUTE";
                string zieltext = praefix + txt + suffix;

                if (isint)
                {
                    zieltext = praefix + start.ToString() + suffix;
                }
                attpropbui.StringValue = zieltext;
                nxobj[0] = attpropbui.Commit();

               
                NXOpen.Annotations.SimpleDraftingAid nullAnnotations_SimpleDraftingAid = null;
                NXOpen.Annotations.PmiNoteBuilder pminotebld;
                pminotebld = workPart.Annotations.CreatePmiNoteBuilder(nullAnnotations_SimpleDraftingAid);

                pminotebld.Origin.Anchor = NXOpen.Annotations.OriginBuilder.AlignmentPosition.MidCenter;

                // ----------------------------------------------
                //  Dialogfenster Anfang Attribute
                // ----------------------------------------------
                string[] leer = new string[0];
                pminotebld.Text.TextBlock.SetText(leer);
                pminotebld.Text.TextBlock.AddAttributeReference(comp, "MEINE_VARIABLE", false, 1, 1);
                pminotebld.Style.LetteringStyle.GeneralTextSize = 2.5;
                pminotebld.Style.LetteringStyle.GeneralTextCharSpaceFactor  = 0.5;

                // hier muß das benannte Koordinatensystem "MEIN_CCSYS" ermittelt werden
                CartesianCoordinateSystem ccsys = (CartesianCoordinateSystem)comp.FindObject("PROTO#HANDLE R-250690");
                Xform xfrm = workPart.Xforms.CreateXform(ccsys, NXOpen.SmartObject.UpdateOption.AfterModeling);

                pminotebld.Origin.Plane.PlaneMethod = NXOpen.Annotations.PlaneBuilder.PlaneMethodType.UserDefined;
                pminotebld.Origin.Plane.UserDefinedPlane = xfrm;

                Point pointfeat = (Point)comp.FindObject("PROTO#.Features|POINT(4)|POINT 1");
                Point pointxfrm = workPart.Points.CreatePoint( pointfeat, null, NXOpen.SmartObject.UpdateOption.AfterModeling);
               
                NXOpen.Annotations.Annotation.AssociativeOriginData assocOrig;
                assocOrig.OriginType = NXOpen.Annotations.AssociativeOriginType.AtAPoint;
                assocOrig.View = null;
                assocOrig.ViewOfGeometry = null;
                assocOrig.PointOnGeometry = null;
                assocOrig.VertAnnotation = null;
                assocOrig.VertAlignmentPosition = NXOpen.Annotations.AlignmentPosition.TopLeft;
                assocOrig.HorizAnnotation = null;
                assocOrig.HorizAlignmentPosition = NXOpen.Annotations.AlignmentPosition.TopLeft;
                assocOrig.AlignedAnnotation = null;
                assocOrig.DimensionLine = 0;
                assocOrig.AssociatedView = workPart.ModelingViews.WorkView;
                assocOrig.AssociatedPoint = pointxfrm;
                assocOrig.OffsetAnnotation = null;
                assocOrig.OffsetAlignmentPosition = NXOpen.Annotations.AlignmentPosition.TopLeft;
                assocOrig.XOffsetFactor = 0.0;
                assocOrig.YOffsetFactor = 0.0;
                assocOrig.StackAlignmentPosition = NXOpen.Annotations.StackAlignmentPosition.Above;
               
                pminotebld.Origin.SetAssociativeOrigin(assocOrig);
                pminotebld.Commit();

                pminotebld.Destroy();
                attpropbui.Destroy();
                start++;
            }

            errLst = workPart.ComponentAssembly.ReplaceReferenceSetInOwners("MODEL", complst); //Koordinatensystem ausblenden
            errLst.Dispose();
        }
        catch (Exception ex)
        {
            //---- Enter your exception handling code here -----
            errorCode = 1;
            theUI.NXMessageBox.Show("Block Styler", NXMessageBox.DialogType.Error, ex.ToString());
        }
        return errorCode;
    }


Vielleicht hat jemand eine Hinweis wie das effizient bewerkstelligt werden kann.
DANKE

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

mseufert
Moderator
Freiberuflicher CAD/CAM Ingenieur


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

Beiträge: 2624
Registriert: 18.10.2005

HP Z420
WIN7 64 Win 10
UG NX6-1980
3D Printer Prusa MK2 S

erstellt am: 23. Aug. 2016 09:51    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 geraldb 10 Unities + Antwort hilfreich

Hallo geraldb,

ob effizient oder nicht: Entscheidend ist doch, was sich hinter "PROTO#HANDLE R-251643" etc. verbirgt und wie sich eine fix gesetzte Objektbezeichnung durch die passende Variable ersetzen lässt ?

Aus der Ferne, ohne Kenntnis der Baugruppe, wird das niemand beantworten können. Die hellseherischen Fähigkeiten sind da einfach begrenzt  . Also bleibt nur, die Hausaufgaben selber zu machen, d.h. zunächst das betreffende Objekt analysieren, siehe z.B. hier .

Die weiteren Hinweise sind oben schon genannt, nach "Codeausschnitt posten."  .

Gruß, Michael

------------------
Ein Mensch wird laut, wenn er was will;
wenn er's erst hat, dann wird er still;
Das "Danke" ist, nach alter Sitte,
Weit seltner als das "Bitte, Bitte".

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



Projektleiter / Bauingenieur / Architekt (m/w/d) Industrieanlagen

Wir sind ein Ingenieurunternehmen, das sich auf die bautechnische Planung in den Bereichen Abfallwirtschaft, Energiegewinnung und Umwelttechnik spezialisiert hat. Als General- oder als Objektplaner der Bautechnik führen wir für unsere Kunden aus Deutschland und der Schweiz anspruchsvolle Großprojekten im Industrie- und Anlagenbau aus. Zur Verstärkung unseres Bau-Teams suchen wir an unserem Hauptsitz ...

Anzeige ansehenTeamleitung, Gruppenleitung
geraldb
Mitglied



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

Beiträge: 38
Registriert: 13.09.2008

erstellt am: 04. Sep. 2016 10:42    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

Zur Vervollständigung: die Thematik konnte inzwischen gelöst werden.

Um das gesuchte Kooordinatensystem

Code:

CartesianCoordinateSystem cartesianCoordinateSystem1 = (CartesianCoordinateSystem)component1.FindObject("PROTO#HANDLE R-251643");


zu finden muß die Komponente innerhalb der Baugruppe komplett geladen sein (Standard: teilweise). Dann kann man durch den Prototyp iterieren und anhand des zugewiesenen Namens nach dem Koordinatensystem suchen.

Der gesuchte Punkt ist der Punkt, an dem die PMI platziert werden soll. Dieser entspricht dem Ursprung des oben gesuchten Koordinatensystems innerhalb der Baugruppe.

Code:

Point point1 = (Point)component1.FindObject("PROTO#.Features|POINT(4)|POINT 1");


Der Punkt läßt sich berechnen indem man die Position des Koordinatensystemursprungs ("Origin") mit der Komponentenposition innerhalb der Baugruppe verheiratet.

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