| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX |
| |
 | Solid Edge 2025 First Look Online-Event 14.11.2025, eine Pressemitteilung
|
Autor
|
Thema: Auswahldialog steuern: Objekte zulassen (1895 mal gelesen)
|
Mat000 Mitglied

 Beiträge: 11 Registriert: 18.09.2008 NX 5.0.6 VB .net (Visual Studio 2005 Version 8.0.50727.42)
|
erstellt am: 18. Sep. 2008 15:31 <-- editieren / zitieren --> Unities abgeben:         
NX 5.0.4.1 VB .net (Visual Studio 2005 Version 8.0.50727.42) ------------------ Hallo, ich stehe vor dem Problem, dass ich einen Auswahldialog steuern möchte und dort nur das "Kurvenformelement" (Curve Feature) zulassen möchte. Weiß jemand, welche UFConstants-Werte man dafür bei UFUi.Mask einstellt? Und wo könnte ich diese Information (Zuordnung zwischen UFConstants und Objektklasse) selbst nachschlagen? Danke und Gruß, Mat Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
älg Mitglied CADmin
 
 Beiträge: 403 Registriert: 17.06.2003
|
erstellt am: 19. Sep. 2008 07:57 <-- editieren / zitieren --> Unities abgeben:          Nur für Mat000
Herzlich willkommen im Forum ! Die .NET API Reference verweist auf uf_object_types.h, ergo siehe die gute alte C-Bibliothek. Beispiele in C zeigen für curves die Auswahl von - UF_line_type - UF_circle_type - UF_conic_type - UF_spline_type, jeweils ohne subtype. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mat000 Mitglied

 Beiträge: 11 Registriert: 18.09.2008 NX 5.0.6 VB .net (Visual Studio 2005 Version 8.0.50727.42)
|
erstellt am: 19. Sep. 2008 08:14 <-- editieren / zitieren --> Unities abgeben:         
Danke für die Begrüßung und die Antwort, älg! Den unten angeführten Code habe ich natürlich schon ausprobiert, er steht ja im Forum. Leider erhalte ich damit nur "Kurve"/"Curve" und nicht "Kurvenformelement"/"Curve Feature", das hilft mir also nicht. Findet sich im Header tatsächlich die Zuordnung zur Objektklasse? Ich kann dies nämlich nicht entdecken... Code: ' Auswahl auf Kurve/Curve Dim num_triples As Integer = 4 Dim mask_triples(num_triples) As UFUi.Mask mask_triples(0).object_type = UFConstants.UF_line_type mask_triples(0).object_subtype = UFConstants.UF_all_subtype mask_triples(0).solid_type = -1 mask_triples(1).object_type = UFConstants.UF_circle_type mask_triples(1).object_subtype = UFConstants.UF_all_subtype mask_triples(1).solid_type = -1 mask_triples(2).object_type = UFConstants.UF_conic_type mask_triples(2).object_subtype = UFConstants.UF_all_subtype mask_triples(2).solid_type = -1 mask_triples(3).object_type = UFConstants.UF_spline_type mask_triples(3).object_subtype = UFConstants.UF_all_subtype mask_triples(3).solid_type = -1
------------------ Gruß, Mat [Diese Nachricht wurde von Mat000 am 24. Sep. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mat000 Mitglied

 Beiträge: 11 Registriert: 18.09.2008 NX 5.0.6 VB .net (Visual Studio 2005 Version 8.0.50727.42)
|
erstellt am: 19. Sep. 2008 09:27 <-- editieren / zitieren --> Unities abgeben:         
Nahe liegend wäre Code: mask_triples(0).object_type = UFConstants.UF_feature_type mask_triples(0).object_subtype = UFConstants.UF_feature_subtype mask_triples(0).solid_type = -1
aber da stützt der Dialog und die Benutzeroberfläche gleich mit ab...Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
älg Mitglied CADmin
 
 Beiträge: 403 Registriert: 17.06.2003
|
erstellt am: 19. Sep. 2008 09:44 <-- editieren / zitieren --> Unities abgeben:          Nur für Mat000
Ja, die Unterscheidung 'Curve'/'Curve Feature' habe ich der Einfachheit halber unterschlagen. 'Curve Feature' (wie z.B. 'TRIM_CURVE') ist m.E. nicht mit mask_triples maskierbar, da nicht als subtype definiert. Da hilft wohl nur, nach einer Selektion den Featuretyp abzufragen und mit der Vorgabe zu vergleichen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mat000 Mitglied

 Beiträge: 11 Registriert: 18.09.2008 NX 5.0.6 VB .net (Visual Studio 2005 Version 8.0.50727.42)
|
erstellt am: 19. Sep. 2008 09:59 <-- editieren / zitieren --> Unities abgeben:         
Dann darauf die nahe liegende Frage: Mit welchen Parametern erstelle ich den Auswahl-Dialog, so dass "Curve Feature" ausgewählt werden kann? Kann man einen Dialog erstellen, der keinen Filter besitzt, also die Grundeinstellungen der Benutzeroberfläche übernimmt? Dort ist "Curve Feature" ja enthalten. Meine Versuche, keinen Filter zu setzen mit Code: ufs.Ui.SelectWithClassDialog(message, title, scope, Nothing, Nothing, sel_resp, cnt, obj)
oder
Code: ufs.Ui.SetSelMask(select_, UFUi.SelMaskAction.SelMaskAllAndDisableSpecific, 0, Nothing)
führten zu Fehlern (Absturz des UI) oder bei Code: ufs.Ui.SetSelMask(select_, UFUi.SelMaskAction.SelMaskEnableAll, 0, Nothing)
keiner Anzeige von "Curve Feature".------------------ Gruß, Mat Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
älg Mitglied CADmin
 
 Beiträge: 403 Registriert: 17.06.2003
|
erstellt am: 19. Sep. 2008 10:22 <-- editieren / zitieren --> Unities abgeben:          Nur für Mat000
|
Overcast Mitglied
 
 Beiträge: 111 Registriert: 21.12.2005 .
|
erstellt am: 24. Sep. 2008 13:22 <-- editieren / zitieren --> Unities abgeben:          Nur für Mat000
Die Auswahlmaske muss für Features gesetzt werden. Danach prüft man lediglich den Feature Type, der als String vorliegt. Beispiel in C#: Code:
using System; using NXOpen; using NXOpen.Features; using NXOpen.UF;public class Program { // class members private static Session theSession; private static UI theUI; private static UFSession theUfSession; private static ListingWindow lw; public static Feature select_feature() { NXObject selobj; Point3d cursor; Selection.SelectionType[] typeArray = { Selection.SelectionType.Features }; Selection.Response resp = theUI.SelectionManager.SelectObject("Select feature", "Select feature", Selection.SelectionScope.WorkPart, false, typeArray, out selobj, out cursor); if (resp == Selection.Response.ObjectSelected | | resp == Selection.Response.ObjectSelectedByName) { return (Feature)selobj; } else return null; } public static int Main(string[] args) { theSession = Session.GetSession(); theUI = UI.GetUI(); theUfSession = UFSession.GetUFSession(); Part workPart = theSession.Parts.Work; lw = theSession.ListingWindow; lw.Open(); Feature feat; while( (feat=select_feature()) != null ) { lw.WriteLine("\nFeature tag : " + feat.Tag.ToString() + " Feature type: " + feat.FeatureType + " Feature name: " + feat.Name); if( feat.FeatureType != "SPLINE" ) lw.WriteLine("Das ist kein Spline...nochmal bitte!"); else lw.WriteLine("Hurra, ein Klavier!"); } return 0; } public static int GetUnloadOption(string arg) { return System.Convert.ToInt32(Session.LibraryUnloadOption.Immediately); } }
Gruss, Frank. [Diese Nachricht wurde von Overcast am 24. Sep. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Overcast Mitglied
 
 Beiträge: 111 Registriert: 21.12.2005 .
|
erstellt am: 24. Sep. 2008 14:01 <-- editieren / zitieren --> Unities abgeben:          Nur für Mat000
Und das gleiche nochmal als VB konvertiert: Code:
Imports System Imports NXOpen Imports NXOpen.Features Imports NXOpen.UF Public Class Program ' class members Private Shared theSession As Session Private Shared theUI As UI Private Shared theUfSession As UFSession Private Shared lw As ListingWindow Public Shared Function select_feature(ByRef feat As Feature) As Selection.Response Dim selobj As NXObject Dim cursor As Point3d Dim typeArray() As Selection.SelectionType = _ { Selection.SelectionType.Features } Dim resp As Selection.Response = theUI.SelectionManager.SelectObject("Select feature", _ "Select feature", Selection.SelectionScope.WorkPart, false, typeArray, selobj, cursor) If ((resp = Selection.Response.ObjectSelected) _ OrElse (resp = Selection.Response.ObjectSelectedByName)) Then feat = CType(selobj,Feature) Return Selection.Response.Ok Else Return Selection.Response.Cancel End If End Function Public Shared Function Main(ByVal args() As String) As Integer theSession = Session.GetSession theUI = UI.GetUI theUfSession = UFSession.GetUFSession Dim workPart As Part = theSession.Parts.Work lw = theSession.ListingWindow lw.Open Dim feat As Feature While select_feature(feat) = Selection.Response.Ok lw.WriteLine("Feature tag :" & feat.Tag.ToString _ & " Feature type: " & feat.FeatureType _ & " Feature name: " + feat.Name) If (feat.FeatureType <> "SPLINE") Then lw.WriteLine("Das ist kein Spline...nochmal bitte!") Else lw.WriteLine("Hurra, ein Klavier!") End If End While Return 0 End Function Public Shared Function GetUnloadOption(ByVal arg As String) As Integer Return System.Convert.ToInt32(Session.LibraryUnloadOption.Immediately) End Function End Class
Alternativ könnte man zur Selektion auch die folgende Methode verwenden: Code:
NXOpen ► Selection ► SelectFeaturesPublic Function SelectFeatures ( _ message As String, _ featType As Selection.SelectionFeatureType, _ <OutAttribute> ByRef featureArray As Feature() _ ) As Selection.Response
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mat000 Mitglied

 Beiträge: 11 Registriert: 18.09.2008 NX 5.0.6 VB .net (Visual Studio 2005 Version 8.0.50727.42)
|
erstellt am: 24. Sep. 2008 15:10 <-- editieren / zitieren --> Unities abgeben:         
Danke, mit der kleinen Änderung: Code: [...] If (feat.FeatureType <> "SECTION_CURVES") Then lw.WriteLine("Das ist keine Schnittkurve... nochmal bitte!") [...]
ist es genau das, was ich gesucht habe. ------------------ Gruß, Mat Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mseufert Moderator Freiberuflicher CAD/CAM Ingenieur
      
 Beiträge: 2723 Registriert: 18.10.2005 HP Z420 WIN7 64 Win 10 UG NX6-2306 3D Printer Prusa MK2 S
|
erstellt am: 24. Sep. 2008 18:03 <-- editieren / zitieren --> Unities abgeben:          Nur für Mat000
|

| |
mseufert Moderator Freiberuflicher CAD/CAM Ingenieur
      
 Beiträge: 2723 Registriert: 18.10.2005 HP Z420 WIN7 64 Win 10 UG NX6-2306 3D Printer Prusa MK2 S
|
erstellt am: 04. Okt. 2008 13:46 <-- editieren / zitieren --> Unities abgeben:          Nur für Mat000
|