| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX |
Autor
|
Thema: create new component from (2216 mal gelesen)
|
uwe.a Ehrenmitglied maschbau-ing.
Beiträge: 1939 Registriert: 20.12.2000 Windows7/64Pro Vmware7.1 UG11-Nx9
|
erstellt am: 26. Apr. 2007 21:26 <-- editieren / zitieren --> Unities abgeben:
|
SMario Mitglied Konstrukteur/Designer
Beiträge: 114 Registriert: 31.03.2005 FSC Celsius Workstation CPU: Pentium 4 3.20GHz Speicher: 2.00GB RAM Grafik: Quadro FX 1400 Monitor: FSC P20-2 OS: Windows XP SP2 UG: NX4.0.2.2
|
erstellt am: 02. Mai. 2007 16:38 <-- editieren / zitieren --> Unities abgeben: Nur für uwe.a
Hallo Uwe, Zitat: Original erstellt von uwe.a: [i]beim Jouranal aufzeichnen ist auser dem part save kommando nichts protokolliert worden. ???
Es wurde seitens NX ausdrücklich darauf hingewiesen, dass noch nicht alles beim Recording unterstützt wird. Zitat: Das Problem / create new component from Ich möchte einen angepassten create new component from Dialog erzeugen. Mit Partnamen abfrage Selektion auf orginal Layern ohne Positionierung referenzset und mm unit mit abschliesend Partsave. Durch suche hier im Forum habe ich kode schnippsel gefunden: http://ww3.cad.de/foren/ubb/Forum442/HTML/000042.shtml Bekomm es nicht hingebogen. Die Selektion ???? who knows?
Ich habe mal den Code-Schnippsel aufgebohrt mit einer Namens- und Layer-Abfrage sowie einer Möglichkeit Bodies auszuwählen. Diese landen dann im neuen Component auf dem selektierten Layer (0 = work, -1 = original, 1-255 belibiger Layer) landet. Für mehr hat es noch nicht gereicht. Beim Referenzset, Position udn CSys habe ich keine Zeit mehr gehabt. Vielleicht hilf es ja schon. Jedoch nur getestet unter NX4...
Code: Option Strict Off Imports NXOpen Imports NXOpen.UF Imports NXOpen.Assemblies Imports SystemModule Create_Component Dim theSession As Session = Session.GetSession() Dim ufsSession As UFSession = UFSession.GetUFSession() Dim objects() As NXOpen.Tag Dim inx As Integer = 0 Sub Main 'Test ob Part geladen if theSession.Parts.Work is Nothing Then Windows.Forms.MessageBox.Show("Kein Part geladen!") Exit Sub End If Dim parent_part As Tag = theSession.Parts.Work.Tag Dim Partname, refset_name, instance_name As String Dim origin As Double() = {0, 0, 0} Dim csys_matrix As Double() = {1.0, 0.0, 0.0, 0.0, 1.0, 0.0} Dim n_objects, Layer As Integer Dim instance As NXOpen.Tag Dim units As Integer = 1 Dim PartnamePrompt As String = "Bitte Partnamen eingeben" Dim PartnameCaption As String = "" Dim PartnameInitialText As String = "new_Component" Dim PartnameNXInputBox As NXOpenUI.NxInputBox = New NXOpenUI.NXInputBox() Dim LayerPrompt As String = "Auf welchen Layer?" Dim LayerCaption As String = "Original Layer = -1" & Environment.NewLine & "Work Layer = 0" & Environment.NewLine & "Specific Layer = 0-255" Dim LayerInitialNumber As String = "-1" Dim LayerNXInputBox As NXOpenUI.NxInputBox = New NXOpenUI.NXInputBox() 'Partnamen erfragen ufsSession.Ui.LockUgAccess(UFConstants.UF_UI_FROM_CUSTOM) Try Partname = PartnameNXInputBox.GetInputString(PartnamePrompt, PartnameCaption, PartnameInitialText) ufsSession.Abort.DisableAbort() Finally ufsSession.Ui.UnlockUgAccess(UFConstants.UF_UI_FROM_CUSTOM) End Try 'Layer-Nummer erfragen ufsSession.Ui.LockUgAccess(UFConstants.UF_UI_FROM_CUSTOM) Try Layer = LayerNXInputBox.GetInputNumber(LayerPrompt, LayerCaption, LayerInitialNumber) ufsSession.Abort.DisableAbort() Finally ufsSession.Ui.UnlockUgAccess(UFConstants.UF_UI_FROM_CUSTOM) End Try 'Bodies fuer Component auswahlen While selBodies(objects) = Selection.Response.Ok End While Dim i As Integer For i = 0 To inx - 1 ufsSession.Disp.SetHighlight(objects(i), 0) Next i n_objects = objects.Length 'Component erzeugen ufsSession.Assem.CreateComponentPart(parent_part, Partname, refset_name, instance_name, units, Layer, origin, csys_matrix, n_objects, objects, instance) End Sub Function selBodies(ByRef body() As NXOpen.Tag) As Selection.Response Dim message As String Dim title As String = "Select a body" Dim scope As Integer = UFConstants.UF_UI_SEL_SCOPE_ANY_IN_ASSEMBLY Dim response As Integer Dim view As NXOpen.Tag Dim ip As UFUi.SelInitFnT = AddressOf mask_for_body ufsSession.Ui.LockUgAccess(UFConstants.UF_UI_FROM_CUSTOM) Try ufsSession.Ui.SelectWithClassDialog(message, title, scope, ip, Nothing, response, inx, objects) Finally ufsSession.Ui.UnlockUgAccess(UFConstants.UF_UI_FROM_CUSTOM) End Try If response <> UFConstants.UF_UI_OBJECT_SELECTED And response <> UFConstants.UF_UI_OBJECT_SELECTED_BY_NAME Then Return Selection.Response.Cancel Else Return Selection.Response.Ok End If End Function Function mask_for_body(ByVal select_ As IntPtr, ByVal userdata As IntPtr) As Integer Dim num_triples As Integer = 1 Dim mask_triples(0) As UFUi.Mask mask_triples(0).object_type = UFConstants.UF_solid_type mask_triples(0).object_subtype = UFConstants.UF_solid_body_subtype mask_triples(0).solid_type = UFConstants.UF_UI_SEL_FEATURE_BODY ufsSession.Ui.SetSelMask(select_, UFUi.SelMaskAction.SelMaskClearAndEnableSpecific, num_triples, mask_triples) Return UFConstants.UF_UI_SEL_SUCCESS End Function Public Function GetUnloadOption(ByVal dummy As String) As Integer GetUnloadOption = UFConstants.UF_UNLOAD_IMMEDIATELY End Function End Module
Ciao Mario
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
uwe.a Ehrenmitglied maschbau-ing.
Beiträge: 1939 Registriert: 20.12.2000 Windows7/64Pro Vmware7.1 UG11-Nx9
|
erstellt am: 03. Mai. 2007 13:39 <-- editieren / zitieren --> Unities abgeben:
Danke Smario, soweit... bekomme aber folgende Fehlermeldung: line 65 alue of type'1-dimensional array of nxopen.tag' cannot be converted to 'nxopen.tag' das ist ufsSession.Assem.CreateComponentPart Zeile ... versteh es nur so halb... was muß ich machen thx in ad uwe.a Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SMario Mitglied Konstrukteur/Designer
Beiträge: 114 Registriert: 31.03.2005 FSC Celsius Workstation CPU: Pentium 4 3.20GHz Speicher: 2.00GB RAM Grafik: Quadro FX 1400 Monitor: FSC P20-2 OS: Windows XP SP2 UG: NX4.0.2.2
|
erstellt am: 03. Mai. 2007 15:08 <-- editieren / zitieren --> Unities abgeben: Nur für uwe.a
Hallo Uwe, Zitat: Original erstellt von uwe.a: line 65 alue of type'1-dimensional array of nxopen.tag' cannot be converted to 'nxopen.tag'
Also da wird versucht ein komplettes Array in eine Variable zu quetschen. Hmmmm, in NX3 wurde dort "NXOpen.Tag()" erwartet. Vielleicht die Deklaration der Objects-Variable anpassen: "Dim objects As NXOpen.Tag()" Ciao Mario
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SMario Mitglied Konstrukteur/Designer
Beiträge: 114 Registriert: 31.03.2005 FSC Celsius Workstation CPU: Pentium 4 3.20GHz Speicher: 2.00GB RAM Grafik: Quadro FX 1400 Monitor: FSC P20-2 OS: Windows XP SP2 UG: NX4.0.2.2
|
erstellt am: 04. Mai. 2007 08:50 <-- editieren / zitieren --> Unities abgeben: Nur für uwe.a
Hallo Uwe, ich habe mal meine alte NX3-Installation reaktiviert und das Journal getestet und es läuft durch ohne Fehler. Komische Sache. Hattest Du evtl. schon Modifikationen vorgenommen? Angehängt findest du meine korrigierte Version mit besseren Text für die NXInputBox, aber ansonsten ist alles gleich, wie schon weiter oben gepostet. Ciao Mario
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
uwe.a Ehrenmitglied maschbau-ing.
Beiträge: 1939 Registriert: 20.12.2000 Windows7/64Pro Vmware7.1 UG11-Nx9
|
erstellt am: 04. Mai. 2007 10:39 <-- editieren / zitieren --> Unities abgeben:
Danke, Danke SMario, the fuck is: dein journal funktioniert nicht in Nx3.02 mp16( GM) funktioniert aber in der höheren Version von NX3.05mp4 habe ähnliche Probleme mit Gripprogrammen zwischen diesen zwischen Versionen. Auch die geeänderten Menuescript für die Radial popups funktionieren in den Unterversionen unterschiedlich.... mfg uwe.a Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SMario Mitglied Konstrukteur/Designer
Beiträge: 114 Registriert: 31.03.2005 FSC Celsius Workstation CPU: Pentium 4 3.20GHz Speicher: 2.00GB RAM Grafik: Quadro FX 1400 Monitor: FSC P20-2 OS: Windows XP SP2 UG: NX4.0.2.2
|
erstellt am: 04. Mai. 2007 10:55 <-- editieren / zitieren --> Unities abgeben: Nur für uwe.a
Hallo Uwe, Zitat: Original erstellt von uwe.a: Danke, Danke SMario, the fuck is: dein journal funktioniert nicht in Nx3.02 mp16( GM) funktioniert aber in der höheren Version von NX3.05mp4 [...]
Upps, das war mir jetzt nicht wirklich bewusst, dass die versch. Unterversionen im Bereich Journals teils so inkompatibel sein können. Also ich benutze: NX4.0.2.2 (höher darf ich nicht, weil da irgendwas mit dem Lizenzserver ist/war), ansonsten zum Testen: NX3.0.3.2 Ach, bevor ich es vergesse: In dem Journal gibt es (bisher) keinerlei Abfrage, ob ein Dialog abgebrochen wurde. Da wird dann einfach beim nächsten weitergemacht bis zum Schluss halt. Nur bei der Selektion der Solids wird abgefragt, ob abgebrochen wurde, dann wird auch kein Component erstellt, aber bei den NXInputBoxen wird das nicht geprüft. Es könnte also evtl. zu Fehlern kommen, falls man nur auf Cancel drückt. Am besten bis zur Selektion der Solids durchgehen und dann abbrechen, da wird dann alles sauber beendet. Mal sehen, vielleicht mache ich da noch was und lasse die Datei auch gleich speichern... Ciao Mario
[Diese Nachricht wurde von SMario am 04. Mai. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SMario Mitglied Konstrukteur/Designer
Beiträge: 114 Registriert: 31.03.2005 FSC Celsius Workstation CPU: Pentium 4 3.20GHz Speicher: 2.00GB RAM Grafik: Quadro FX 1400 Monitor: FSC P20-2 OS: Windows XP SP2 UG: NX4.0.2.2
|
erstellt am: 04. Mai. 2007 14:03 <-- editieren / zitieren --> Unities abgeben: Nur für uwe.a
Hallo Uwe, angehängt findest Du die neue Version mit neuem DateinamensDialog und speichern des neuen Components. Es wird jedoch nicht überprüft, ob da schon eine eine gleichnamige Datei vorhanden ist, oder ob es Probleme mit den Schreibrechten gibt. In allen Dialogen wird ein Abbruch erkannt, bis auf der NXInputBox, dort führt ein "Cancel" zu evtl. seltsamen Verhalten bzw. Fehlermeldungen von NX. Sogar unter NX3 getestet. Ciao Mario
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
uwe.a Ehrenmitglied maschbau-ing.
Beiträge: 1939 Registriert: 20.12.2000 Windows7/64Pro Vmware7.1 UG11-Nx9
|
erstellt am: 04. Mai. 2007 14:14 <-- editieren / zitieren --> Unities abgeben:
|
uwe.a Ehrenmitglied maschbau-ing.
Beiträge: 1939 Registriert: 20.12.2000 Windows7/64Pro Vmware7.1 UG11-Nx9
|
erstellt am: 09. Mai. 2007 15:14 <-- editieren / zitieren --> Unities abgeben:
komm irgendwie nicht weiter Option Strict Off Imports NXOpen Imports NXOpen.UF Imports NXOpen.Assemblies Imports System Module Create_Component Dim theSession As Session = Session.GetSession() Dim ufsSession As UFSession = UFSession.GetUFSession() Dim objects() As NXOpen.Tag Dim inx As Integer = 0 Sub Main 'Test ob Part geladen if theSession.Parts.Work is Nothing Then Windows.Forms.MessageBox.Show("Kein Part geladen!") Exit Sub End If Dim parent_part As Tag = theSession.Parts.Work.Tag Dim Partname,refset_name, instance_name As String Dim origin As Double() = {0, 0, 0} Dim csys_matrix As Double() = {1.0, 0.0, 0.0, 0.0, 1.0, 0.0} Dim n_objects As Integer DIM Layer As Integer = -1 Dim instance As NXOpen.Tag Dim units As Integer = 1 'Partnamen erfragen Partname = selpartname(Partname)
'Bodies fuer Component auswahlen While selBodies(objects) = Selection.Response.Ok End While Dim i As Integer For i = 0 To inx - 1 ufsSession.Disp.SetHighlight(objects(i), 0) Next i n_objects = objects.Length 'Component erzeugen ufsSession.Assem.CreateComponentPart(parent_part, Partname, refset_name, instance_name, units, Layer, origin, csys_matrix, n_objects, objects, instance) End Sub Function selBodies(ByRef body() As NXOpen.Tag) As Selection.Response Dim message As String Dim title As String = "Select a body" Dim scope As Integer = UFConstants.UF_UI_SEL_SCOPE_ANY_IN_ASSEMBLY Dim response As Integer Dim view As NXOpen.Tag Dim ip As UFUi.SelInitFnT = AddressOf mask_for_body ufsSession.Ui.LockUgAccess(UFConstants.UF_UI_FROM_CUSTOM) Try ufsSession.Ui.SelectWithClassDialog(message, title, scope, ip, Nothing, response, inx, objects) Finally ufsSession.Ui.UnlockUgAccess(UFConstants.UF_UI_FROM_CUSTOM) End Try If response <> UFConstants.UF_UI_OBJECT_SELECTED And response <> UFConstants.UF_UI_OBJECT_SELECTED_BY_NAME Then Return Selection.Response.Cancel Else Return Selection.Response.Ok End If End Function Function mask_for_body(ByVal select_ As IntPtr, ByVal userdata As IntPtr) As Integer Dim num_triples As Integer = 1 Dim mask_triples(0) As UFUi.Mask mask_triples(0).object_type = UFConstants.UF_solid_type mask_triples(0).object_subtype = UFConstants.UF_solid_body_subtype mask_triples(0).solid_type = UFConstants.UF_UI_SEL_FEATURE_BODY ufsSession.Ui.SetSelMask(select_, UFUi.SelMaskAction.SelMaskClearAndEnableSpecific, num_triples, mask_triples) Return UFConstants.UF_UI_SEL_SUCCESS End Function Public Function GetUnloadOption(ByVal dummy As String) As Integer GetUnloadOption = UFConstants.UF_UNLOAD_IMMEDIATELY End Function Function selpartname (partname) As String Dim Posnr,Benennung,Beminr As String Dim PartnamePrompt As String = "Bitte Partnamen eingeben" Dim PartnameCaption As String = "Partname?" Dim PartnameInitialNumber As integer = 50 Dim PartnameInitialText As String Dim PartnameNXInputBox As NXOpenUI.NxInputBox = New NXOpenUI.NXInputBox() ' Dim PosnrPrompt As String = "Bitte Stücklisten Position eingeben" Dim PosnrCaption As String = "Position nummer?" Dim PosnrInitialNumber As integer = 4 Dim PosnrInitialText As String = "0000" Dim PosnrNXInputBox As NXOpenUI.NxInputBox = New NXOpenUI.NXInputBox() ' Dim BenennungPrompt As String = "Bitte Benennung eingeben" Dim BenennungCaption As String = "Benennung?" Dim BenennungInitialNumber As integer = 28 Dim BenennungInitialText As String = "0000" Dim BenennungNXInputBox As NXOpenUI.NxInputBox = New NXOpenUI.NXInputBox() ' Dim BeminrPrompt As String = "Bitte Werkzeugnummer eingeben" Dim BeminrCaption As String = "Werkzeugnummer?" Dim BeminrInitialNumber As integer = 12 Dim BeminrInitialText As String = "123456789012" Dim BeminrNXInputBox As NXOpenUI.NxInputBox = New NXOpenUI.NXInputBox() Dim text As String ufsSession.Ui.LockUgAccess(UFConstants.UF_UI_FROM_CUSTOM) Try Posnr = PosnrNXInputBox.GetInputString(PosnrPrompt, PosnrCaption, PosnrInitialText) 'if Posnr.length <> PosnrInitialNumber then 'Do While text = true text = BenennungNXInputBox.GetInputString(BenennungPrompt, BenennungCaption, BenennungInitialText) Do While text.length < BenennungInitialNumber text = text & "_" loop 'loop Benennung = Ucase(text) Beminr = BeminrNXInputBox.GetInputString(BeminrPrompt, BeminrCaption, BeminrInitialText) PartnameInitialText = Posnr & "____" & Benennung & "__" & Beminr Partname = PartnameNXInputBox.GetInputString(PartnamePrompt, PartnameCaption, PartnameInitialText) ufsSession.Abort.DisableAbort() Finally ufsSession.Ui.UnlockUgAccess(UFConstants.UF_UI_FROM_CUSTOM) End Try end function End Module Fehler beim erzeugen der Komponente /.Assem.CreateComponentPart mfg uwe.a Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SMario Mitglied Konstrukteur/Designer
Beiträge: 114 Registriert: 31.03.2005 FSC Celsius Workstation CPU: Pentium 4 3.20GHz Speicher: 2.00GB RAM Grafik: Quadro FX 1400 Monitor: FSC P20-2 OS: Windows XP SP2 UG: NX4.0.2.2
|
erstellt am: 11. Mai. 2007 07:40 <-- editieren / zitieren --> Unities abgeben: Nur für uwe.a
Hallo Uwe, Zitat: Original erstellt von uwe.a: komm irgendwie nicht weiter [...]Partname = selpartname(Partname) [...] Function selpartname (partname) As String
Da du den Rückgabewert der Funktion selpartname auswerten willst, aber keinen zurückgibst gibt es scheinbar diesen Fehler. Einen Rückgabewert gibt man mit Return <plus Wert, der zurückgegeben werden soll.>, also bsplw. Return MeinRückgabeWert, oder in deinem Fall den Partnamen: Return PartnameNXInputBox.GetInputString(PartnamePrompt, PartnameCaption, PartnameInitialText) Nach eintragen bzw. ändern der betreffenden Zeile (Partname = PartnameNXInputBox...) funktionierte dein Journal wieder. Zumindest unter NX4. Ciao Mario
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| HKLS- Meister/-Techniker/in - Kennziffer: 123a /2024 K.4.1 | Die Hochschule Darmstadt sucht in der Zentralen Organisationseinheit Bau und Liegenschaften zum nächstmöglichen Zeitpunkt unbefristet eine*n HKLS- Meister/-Techniker/in (100 %) Kennziffer: 123a /2024 K.4.1
- Instandhaltung der technischen Anlagen der Gewerke Heizung, Klima, Lüftung und Sanitär (HKLS)
| Anzeige ansehen | Feste Anstellung |
|
uwe.a Ehrenmitglied maschbau-ing.
Beiträge: 1939 Registriert: 20.12.2000 Windows7/64Pro Vmware7.1 UG11-Nx9
|
erstellt am: 11. Mai. 2007 10:13 <-- editieren / zitieren --> Unities abgeben:
Danke Mario, habe dieses Problem schon gelöst->anderer Weg, trotzdem Danke. Experimentiere noch am Masking den Stringprüfung Abbruchbedingungen... ... und noch an anderen Dialogen / Boxen mfg uwe.a Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|