Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  NX Programmierung
  Fläche über Namen auswählen?

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:  Fläche über Namen auswählen? (2973 mal gelesen)
FTD
Mitglied
Doktorand


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

Beiträge: 92
Registriert: 28.11.2012

NX 8.0.0.25

erstellt am: 05. Mrz. 2014 14:53    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 zusammen,

ich möchte gerne einer Fläche einen Tag zuweisen und diese dann auswählen/markieren.

Ich habe bereits eine Lösung die folgendermaßen aussieht:

Code:
static tag_t select_a_cae_face(char *prompt)
{
    int
        resp;
    double
        cp[3];
    tag_t
        object,
        view;

    UF_CALL(UF_UI_select_with_single_dialog("Select a CAE face", prompt,
        UF_UI_SEL_SCOPE_WORK_PART, mask_for_cae_faces, NULL, &resp,
        &object, cp, &view));


    if (resp == UF_UI_OBJECT_SELECTED | | resp == UF_UI_OBJECT_SELECTED_BY_NAME)
    {
        UF_CALL(UF_DISP_set_highlight(object, FALSE));
        return object;
    }
    else return NULL_TAG;

}


Ich möchte nun die Fläche nicht über "anklicken" und oder "Namen in das Suchfeld eingeben" auswählen, sondern dies soll einfach über einen Parameter den ich vorher setzten möchte geschehen. (Also ganz ohne klicken und eingeben)

Bin in NXOpen Programmierung nicht wirklich so fit, daher würde ich mich über ein paar Lösungsvorschläge sehr freuen.

Beste Grüße =)

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

wladlaw
Mitglied
Ingenieur


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

Beiträge: 72
Registriert: 11.01.2012

erstellt am: 08. Mrz. 2014 13:15    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 FTD 10 Unities + Antwort hilfreich

Hallo FTD,

jedes NXObjekt hat 3 Eigenschaften .Name (Custom Name),
.JournalIdentifier(System Name) und .Tag (ID).
System Name und ID sind vom NX gesteuert und End-User hat
kein Einfluss auf diese Eigenschaften (Read only). Mithilfe der Funktion
.SetName(String) könnte man Custom Name festlegen.

Es gibt auch Objekt-Attributen, die für Auswahl benutzt werden könnten.

Das heißt bei der NXObjekt-Erzeugung muss man entweder "Custom Name" oder ein Attribut
[ab NX8 .SetUserAttribute(...)] einsetzen und später diese Eigenschaft für die Auswahl
benutzen.

------------------
Gruß
Wladimir

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

FTD
Mitglied
Doktorand


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

Beiträge: 92
Registriert: 28.11.2012

NX 8.0.0.25

erstellt am: 10. Feb. 2016 15:57    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

Tja mein altes Problem hat mich 2 Jahre später wieder eingeholt und ich muss nun doch eine anständige Lösung finden. Daher krame ich den Thread mal wieder raus. Ich möchte meine Frage an der Stelle auch noch etwas präzisieren. In meinem aufgezeichnetem Skript gibt es Momentan zwei Stellen die mir Probleme machen, beide aus dem gleichen Grund. Hier der Code:

Code:
    NXOpen.Assemblies.Component component1 = (NXOpen.Assemblies.Component)workSimPart.ComponentAssembly.RootComponent.FindObject("COMPONENT Casing_Solig_2_fem1 1");
    NXOpen.CAE.CAEFace cAEFace1 = (NXOpen.CAE.CAEFace)component1.FindObject("PROTO#CAE_Body(1)|CAE_Face(210)");

und

Code:
    NXOpen.CAE.SetObject[] objects2 = new NXOpen.CAE.SetObject[1];
    Point point1 = (Point)component1.FindObject("PROTO#.Points|HANDLE R-428387");

Gerade der zweite Abschnitt ist besonders kritisch. Er sucht einen Punkt über ein Handle mit eienr ID. Die ID ändert sich jedoch, wenn ich z.B. neu vernetze, was mein Skript anschließend unbrauchbar macht. Ich würde gerne anstatt mit FindObject() nach einer ID zu suchen, ihn nach einem von mir vergebenen Namen suchen lassen (eine Art "tag" sozusagen). Wie geht denn sowas bitte? 

Vielen Dank wie immer und beste Grüße!!

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: 10. Feb. 2016 17:39    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 FTD 10 Unities + Antwort hilfreich

In UF_OBJ gibt's Cycle- Funktionen, u.a. mit Bezug auf selbst vergebene Objektnamen.

Gruß, Michael

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

FTD
Mitglied
Doktorand


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

Beiträge: 92
Registriert: 28.11.2012

NX 8.0.0.25

erstellt am: 16. Feb. 2016 16:12    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

Zitat:
In UF_OBJ gibt's Cycle- Funktionen, u.a. mit Bezug auf selbst vergebene Objektnamen.

Hm... Damit konnte ich leider noch nicht so viel anfangen. Bin wohl noch nicht fit genug.    

Ich habe aber folgende Methode die mir die Fläche im der Modell-Umgebung richtig raussucht:

Code:

public NXOpen.Face ReturnFaceByName(string thisfaceString)
    {
        Session theSession = Session.GetSession();
        Part workPart = theSession.Parts.Work;

        // get face by given name-string of face
        foreach (Body thisbody in workPart.Bodies)
        {
            foreach (Face thisface in thisbody.GetFaces())
            {
                if (thisface.Name == thisfaceString)
                {
                    return thisface;
                }
            }
        }
    }


Bin mir nicht sicher ob er den Flächennamen in der Advanced Simulation Umgebung auch findet. Im Moment ist aber auch das Problem, dass er hier ja ein einfaches Face zurück gibt. Ich brauche aber ein CAEFace und er meldet, dass er die Fläche nicht implizit konvertieren kann. Gibt es vielleicht eine Methode oder eine andere Möglichkeit diese Fläche "umzuwandeln"?

Vielen Dank! =)

EDIT:
Ich habe auch folgendes gefunden:
https://community.plm.automation.siemens. com/t5/NX-Programming-Customization/Find-a-named-polygon-face-with-NXopen-python/td-p/317221

Zitat:

You can use NXOpen.UF.UFSf.AskAllPolygonBodies() to get all of the bodies. For each  body, use NXOpen.UF.UFSf.BodyAskFaces() to get the faces.



Or you can do as you suggest and use NXOpen.UF.UFObj.CycleByNameAndType(), looking for objects with type UFConstants.UF_caegeom_type. You would then need to use NXOpen.UF.UFObj.ask_type_and_subtype() to verify that the subtype is UFConstants.UF_caegeom_face_subtype

Scheint ja in die Richtung zu gehen, die schon vorgeschlagen wurde! Naja muss noch bisschen üben...

[Diese Nachricht wurde von FTD am 17. Feb. 2016 editiert.]

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



Ingenieure und Techniker im Bereich Elektrotechnik (m/w/d)

EWEX-Weber Engineering GmbH ist ein erfolgreich wachsendes Unternehmen innerhalb der Weber-Unternehmensgruppe. Die Weber-Unternehmensgruppe beschäftigt 2.000 Mitarbeiter und gehört zu den führenden Anbietern von industriellen Dienstleistungen mit einem umfassenden Know-how in Planung, Bau und Optimierung von Industrieanlagen.

Unsere Kunden sind in der chemischen und petrochemischen ...

Anzeige ansehenElektrotechnik, Elektronik
FTD
Mitglied
Doktorand


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

Beiträge: 92
Registriert: 28.11.2012

NX 8.0.0.25

erstellt am: 01. Mrz. 2016 12: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

So! Ich bin schon ein Stück weiter gekommen... Ich möchte erstmal den richtigen Polygonbody finden und dann alle Flächen auf diesem Body absuchen.
Hier mal der aktuelle Stand:

Code:

using System;
using NXOpen;
using NXOpen.UF;
using NXOpenUI;

public class NXJournal
{
  public static void Main(string[] args)
  {
    Session theSession = Session.GetSession();
    NXOpen.UI theUISession = NXOpen.UI.GetUI();
    NXOpen.UF.UFSession theUFSession = UFSession.GetUFSession();
    NXOpen.Utilities.NXObjectManager ObjectManager = new NXOpen.Utilities.NXObjectManager();

      String BodyName = "BodyName";

      int bodynumber;
      NXOpen.Tag[] PolygonBodyTags;
      theUFSession.Sf.AskAllPolygonBodies(out bodynumber, out PolygonBodyTags);

      foreach (NXOpen.Tag PolygonBodyTag in PolygonBodyTags)
      {
          NXOpen.TaggedObject BodyObject = ObjectManager.GetTaggedObject(PolygonBodyTag);
          String BodyString = BodyObject.ToString();

          theUISession.NXMessageBox.Show("Info", NXOpen.NXMessageBox.DialogType.Information, BodyString);

          if (BodyString == BodyName)
          {
              theUISession.NXMessageBox.Show("Info" ,NXOpen.NXMessageBox.DialogType.Information,"Body with tag: '" + BodyString + "' has been found!");
          }
      }

  }//end Main


Er geht aber irgendwie erst garnicht in die for-Schleife und fängt an zu suchen!? Weiß jemand warum?

Vielen Dank und beste Grüße

EDIT:
Habe zwei Probleme gefunden. Zum einen funktioniert das Absuchen der Bodies nur in dem .fem Datei. Zum anderen gibt "BodyObject.ToString()" nicht den Tag wieder, sondern "CAEBody 12345" o.Ä. ...

[Diese Nachricht wurde von FTD am 01. Mrz. 2016 editiert.]

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