| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX |
Autor
|
Thema: Import-Part VB.NET (4512 mal gelesen)
|
l.pesch Mitglied
Beiträge: 312 Registriert: 22.01.2004
|
erstellt am: 18. Dez. 2005 08:59 <-- editieren / zitieren --> Unities abgeben:
Hallo alle zusammen, hab da wieder mal ein Problem. Wenn ich diesen Journal Code über journal anwende dann funktioniert es super.
Code: Imports System Imports NXOpen Imports NXOpen.UFModule NXJournal Sub Main Dim ufSess As UFSession = UFSession.GetUFSession() Dim modes As ImportPartModes Dim file_name As String = "C:\din-blaetter\DIN_A1.prt" Dim dest_csys() As Double = {1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0} Dim dest_point() As Double = {0, 0, 0} Dim scale As Double = 1.0 Dim group As NXOpen.Tag modes.group_mode = 1 ufSess.Part.Import(file_name, modes, dest_csys, dest_point, scale, group) End Sub End Module
aber ich möchte diesen code aus eine .exe datei in Unigraphics ausführen über ein Button klick.
Code: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim modes As ImportPartModes Dim ufSess As UFSession = UFSession.GetUFSession() Dim file_name As String = """" + Path.GetDirectoryName(Reflection.Assembly.GetExecutingAssembly.Location) & "\din-blaetter\DIN_A1.prt" + """" MessageBox.Show(file_name) Dim dest_csys() As Double = {1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0} Dim dest_point() As Double = {0, 0, 0} Dim scale As Double = 1.0 Dim group As NXOpen.Tag modes.group_mode = 1 ufSess.Part.Import(file_name, modes, dest_csys, dest_point, scale, group) End Sub
und hier ist der Pfad so angegeben Code: """" + Path.GetDirectoryName(Reflection.Assembly.GetExecutingAssembly.Location) & "\din-blaetter\DIN_A1.prt" + """"
da dem Anwender frei gestellt werden soll von wo er die exe date ausführt. Bei dieser Art Ausführung bringt er mir die Fehlermeldung "Invalid file Name" , obwohl ja eigentlich genau das selbe drin steht, wie in dem Modul-Code. Viellen dank für eure hilfe in voraus.
Komm an dieser stelle einfach nicht weiter, vielleicht weis jemand von euch was. Gruß l.pesch Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
l.pesch Mitglied
Beiträge: 312 Registriert: 22.01.2004
|
erstellt am: 19. Dez. 2005 21:22 <-- editieren / zitieren --> Unities abgeben:
|
l.pesch Mitglied
Beiträge: 312 Registriert: 22.01.2004
|
erstellt am: 28. Dez. 2005 21:05 <-- editieren / zitieren --> Unities abgeben:
Hallo alle zusammen, benutze den unten stehenden Code, der funktioniert auch super. Nur auch wenn ich den PointKonstruktor abbreche führt er mir trotzdem diese Funktion aus. Was muss ich noch eingeben damit er es nicht mehr macht? Code: Sub import() Dim Sess As Session = Session.GetSession() Dim ufSess As UFSession = UFSession.GetUFSession() Dim partName As String = "D:\test.prt" Dim modes As ImportPartModes modes.layer_mode = 1 modes.group_mode = 1 modes.view_mode = 0 Dim point(2) As Double Dim scale As Double = 1 Dim group As NXOpen.Tag Dim csys() As Double = {1, 0, 0, 0, 1, 0, 0, 0, 1} Dim point_tag As NXOpen.Tag Dim base_pt(2) As Double Dim response As Integer Dim cue As String = "Select a point" Dim nxopenSession As NXOpen.UF.UFSession = NXOpen.UF.UFSession.GetUFSession() nxopenSession.Ui.LockUgAccess(NXOpen.UF.UFConstants.UF_UI_FROM_CUSTOM) Try nxopenSession.Ui.PointConstruct(cue, nxopenSession.Ui.PointBaseMethod.PointCursorPos, point_tag, base_pt, response) Finally nxopenSession.Ui.UnlockUgAccess(NXOpen.UF.UFConstants.UF_UI_FROM_CUSTOM) End Try point(0) = base_pt(0) point(1) = base_pt(1) point(2) = base_pt(2) ufSess.Part.Import(partName, modes, csys, point, scale, group) End Sub
Danke in voraus für eure Hilfe Gruß l.pesch 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. Jan. 2006 10:48 <-- editieren / zitieren --> Unities abgeben: Nur für l.pesch
Hallo l.pesch, Zitat: Was muss ich noch eingeben damit er es nicht mehr macht?
Was wohl, abfragen, welcher Button gedrückt wurde, und entsprechend entscheiden was passieren soll . Bsplw. mit "Case/Select" um bspl. OK/Back/Cancel abzufragen. Hiermit fragt man den OK-Button ab und importiert nur dann auch das Part, wenn ein Punkt angeklickt oder OK gedrückt wurde: Code: Select Case response Case Is = NXOpen.UF.UFConstants.UF_UI_OK ufSess.Part.Import(partName, modes, csys, base_pt, scale, group) Case Else End Select
OK, Case/Select ist vielleicht doch nicht wirklich das Beste aber zumindest funktioniert es jetzt und ich kann alle Buttons aus dem PointConstructor abfabgen und entsprechend reagieren. Wenn du bsplw. noch zus. den Back-Button abfragen willst, musst du nur noch einen "Case Is" Anweisung vor "Case Else" einfügen. Am besten du liest dir mal die .NET-Ref. von Microsoft durch, da wird das schon drinstehen. Falls du keine Doku hast, so kannst du dir mit ndoc.exe (ist bei Sharpdevelop) auch nachträglich eine Code-Referenz als HTML-Hilfe generieren lassen (dauert ewig für die ganze Doku.), oder benutze einen beliebigen ObjectBrowser (bsplw. Reflector http://www.aisto.com/roeder/dotnet/ ). Das benutze ich, um entsprechend des Blattformates den entsprechenden Rahmen einzufügen, besser als extra 10 Buttons in einer Toolbar für jedes Format. Hier mal mein komplettes Journal:
Code:
Sub import()Dim Sess As Session = Session.GetSession() Dim ufSess As UFSession = UFSession.GetUFSession() Dim partName As String = "MeinRahmen.prt" Dim modes As ImportPartModes modes.layer_mode = 1 modes.group_mode = 1 modes.view_mode = 0 Dim point(2) As Double Dim scale As Double = 1 Dim group As NXOpen.Tag Dim csys() As Double = {1, 0, 0, 0, 1, 0, 0, 0, 1} Dim point_tag As NXOpen.Tag Dim base_pt(2) As Double Dim response As Integer Dim cue As String = "Select a point" Dim e As Byte Dim nxopenSession As NXOpen.UF.UFSession = NXOpen.UF.UFSession.GetUFSession() nxopenSession.Ui.LockUgAccess(NXOpen.UF.UFConstants.UF_UI_FROM_CUSTOM) Try nxopenSession.Ui.PointConstruct(cue, nxopenSession.Ui.PointBaseMethod.PointCursorPos, point_tag, base_pt, response) Select Case response Case Is = NXOpen.UF.UFConstants.UF_UI_OK ufSess.Part.Import(partName, modes, csys, base_pt, scale, group) Case Else End Select Finally nxopenSession.Ui.UnlockUgAccess(NXOpen.UF.UFConstants.UF_UI_FROM_CUSTOM) End Try End Sub
Da ich keine DotNetAuthor-Lizenz habe, und die Journals zwar kompilieren kann, aber nicht ausführen, da keine Signatur vorhanden ist, und an die komme ich nur per Lizenz . Aus diesem Grund habe ich eine "Sub Main()" eingefügt und rufe von dort aus deine Import-Funktion auf. EDIT: Habe gerade gemerkt, dass ich die Sub Main() wieder rausgenommen habe, weil dein ursprüngliches Journal auch keins drinhatte. So müsste es eigentlich bei dir sofort funktionieren. Theoretisch . Ich hoffe ich konnte helfen. Ciao Mario
[Diese Nachricht wurde von SMario am 03. Jan. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
l.pesch Mitglied
Beiträge: 312 Registriert: 22.01.2004
|
erstellt am: 20. Jan. 2006 06:01 <-- editieren / zitieren --> Unities abgeben:
|
Proofin Mitglied Dpl.Ing
Beiträge: 208 Registriert: 24.11.2004
|
erstellt am: 07. Feb. 2006 20:06 <-- editieren / zitieren --> Unities abgeben: Nur für l.pesch
|
l.pesch Mitglied
Beiträge: 312 Registriert: 22.01.2004
|
erstellt am: 07. Feb. 2006 21:35 <-- editieren / zitieren --> Unities abgeben:
|
Proofin Mitglied Dpl.Ing
Beiträge: 208 Registriert: 24.11.2004
|
erstellt am: 07. Feb. 2006 22:24 <-- editieren / zitieren --> Unities abgeben: Nur für l.pesch
Hallo I.pesch den Type hab ich jetzt. Aber ich bekomme eine Fehlermeldung das die libuginit.dll nicht geladen werden konnte. Schreibst du das Programm mit VisualStudio oder anderen Entwicklungsumgebungen?? Ist das dann eine .exe oder .dll?? @all Kann mir jemand mal ein kleines komplettes Beispielprogramm geben?? Kann es sein das man eine bestimmte Lizenz brauch um mit VB.NET erstellte .dll's nutzen zu können?? Mfg Proofin [Diese Nachricht wurde von Proofin am 08. Feb. 2006 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: 08. Feb. 2006 09:20 <-- editieren / zitieren --> Unities abgeben: Nur für l.pesch
Hallo Proofin, Zitat: Original erstellt von Proofin: Hallo I.pesch den Type hab ich jetzt. Aber ich bekomme eine Fehlermeldung das die libuginit.dll nicht geladen werden konnte.
die Meldung hatte ich auch, aber nach kopieren der kompillierten DLL/EXE-Datei in den Ordner %UGII_BASE_DIR%\ugii verschwand diese Meldung. Jedoch ist man scheinbar in der Lizenz-Sackgasse, denn zumindest bei mir erscheint dann eine Meldung: "Assembly has not been compiled with an NX resource bundle" Wenn ich die NX resource einfüge (steht irgendwo in der Doku), dann kommt entweder die Meldung, dass diese leer ist oder ich keine dotnetauthor-lizenz hätte. Zitat: Schreibst du das Programm mit VisualStudio oder anderen Entwicklungsumgebungen??
In der Firma: SharpDevelop1.1 für .Net-Framwork 1.1 Zu Hause: Visual Studio 2005 Express deutsch (kostenlos erhältlich, bsplw. in der aktuellen c't (04/2006) als Beilage) für .Net-Framework 2.0 Zitat: Ist das dann eine .exe oder .dll??
Eigentlich ist beides möglich. Ich habe es mittlerweile aufgegeben kompillierte Sachen zu testen. Zitat: @all Kann mir jemand mal ein kleines komplettes Beispielprogramm geben??
Falls du es noch nicht gefunden hast, Unigraphics bietet dir schon in der normalen Installation einiges an Beispielen im Quelltext. Schau mal im Verzeichnis: %UGII_BASE_DIR%\UGOPEN\SampleNXOpenApplications\ Viel Spass beim Testen. Mario
[Diese Nachricht wurde von SMario am 08. Feb. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Proofin Mitglied Dpl.Ing
Beiträge: 208 Registriert: 24.11.2004
|
erstellt am: 08. Feb. 2006 12:00 <-- editieren / zitieren --> Unities abgeben: Nur für l.pesch
Hi SMario, danke für den Tipp, hab die Beispiele gefunden. Die Fehlermeldung mit dem "Assembly has not been compiled with an NX resource bundle" bekomme ich jetzt auch. Zitat:
Eigentlich ist beides möglich. Ich habe es mittlerweile aufgegeben kompillierte Sachen zu testen.
heißt das, das du keine eigenen Sachen mehr erstellst oder hast du einen anderen Weg gefunden?? 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: 08. Feb. 2006 13:15 <-- editieren / zitieren --> Unities abgeben: Nur für l.pesch
Hallo Proofin, Zitat: Original erstellt von Proofin: heißt das, das du keine eigenen Sachen mehr erstellst oder hast du einen anderen Weg gefunden??
Nein, genauso wie es dort steht bezogen auf das kompillieren. Da ich es bisher nicht hinbekommen habe etwas kompilliertes (egal ob als EXE oder DLL) zum Laufen zu bekommen (mangels dotnet-Author-Lizenz), habe ich das mit dem Kompillieren erstmal "auf Eis" gelegt. Ich benutze die Visual Basic-Programme/Funktionen als Journal innerhalb von NX (als Button in ein Toolbar integriert). Das funktioniert genauso wie jedes andere .Net-Programm Windows-Programm, nur dass es eben nur innerhalb (oder per Kommandozeile) von Unigraphics im Quelltext ausführbar (Tools -> Journal) ist. Ciao Mario
[EDIT]p.s. Die NXOPEN-Referenz findet man übrigens hier: %UGII_BASE_DIR%\UGDOC\html_files\nxopen*
und für UGOPEN: %UGII_BASE_DIR%\UGDOC\html_files\ugopen* [Diese Nachricht wurde von SMario am 08. Feb. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dirk Mitglied
Beiträge: 164 Registriert: 16.11.2000
|
erstellt am: 08. Jun. 2016 15:04 <-- editieren / zitieren --> Unities abgeben: Nur für l.pesch
Hallo, zuerst mal Danke für das Journal, funktioniert super. Ich würde es dennoch gerne dahin gehend abändern, dass das Part sofort importiert wird, nachdem der User den Punkt im Grafikbereich selektiert hat. Momentan muss man den Punkt im Grafikbereich auswählen und den Punktkonstruktor mit OK bestätigen. Diesen Schritt würde ich gerne sparen. Kann mir da jemand weiterhelfen? Gruß und danke für eure Unterstützung! Dirk
Zitat: Original erstellt von SMario:
Hier mal mein komplettes Journal: Sub import()
Dim Sess As Session = Session.GetSession() Dim ufSess As UFSession = UFSession.GetUFSession() Dim partName As String = "MeinRahmen.prt" Dim modes As ImportPartModes modes.layer_mode = 1 modes.group_mode = 1 modes.view_mode = 0 Dim point(2) As Double Dim scale As Double = 1 Dim group As NXOpen.Tag Dim csys() As Double = {1, 0, 0, 0, 1, 0, 0, 0, 1} Dim point_tag As NXOpen.Tag Dim base_pt(2) As Double Dim response As Integer Dim cue As String = "Select a point" Dim e As Byte Dim nxopenSession As NXOpen.UF.UFSession = NXOpen.UF.UFSession.GetUFSession() nxopenSession.Ui.LockUgAccess(NXOpen.UF.UFConstants.UF_UI_FROM_CUSTOM) Try nxopenSession.Ui.PointConstruct(cue, nxopenSession.Ui.PointBaseMethod.PointCursorPos, point_tag, base_pt, response) Select Case response Case Is = NXOpen.UF.UFConstants.UF_UI_OK ufSess.Part.Import(partName, modes, csys, base_pt, scale, group) Case Else End Select Finally nxopenSession.Ui.UnlockUgAccess(NXOpen.UF.UFConstants.UF_UI_FROM_CUSTOM) End Try End Sub
[Diese Nachricht wurde von dirk am 08. Jun. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mseufert Moderator Freiberuflicher CAD/CAM Ingenieur
Beiträge: 2624 Registriert: 18.10.2005 HP Z420 WIN7 64 Win 10 UG NX6-1980 3D Printer Prusa MK2 S
|
erstellt am: 09. Jun. 2016 13:42 <-- editieren / zitieren --> Unities abgeben: Nur für l.pesch
Zitat: Original erstellt von dirk: ... im Grafikbereich auswählen und den Punktkonstruktor mit OK bestätigen. Diesen Schritt würde ich gerne sparen.
Hallo Dirk, Du willst den einen Klick sparen, der nötig ist, den PointConstruct zu bestätigen ? Wieviele Klicks wird das Ändern des Programms benötigen ? Lohnen wird sich das eher nicht, aber wenn's denn so gewollt ist, versuch' mal die PointSubFunction. Gruß, Michael
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Maschinenbauingenieur / Konstrukteur (m/w/d) Weller Löttechnik | Wer ?Löten? sagt, meint meist Weller. Als weltweiter Marktführer für manuelle Löttechnik liefern ca. 60 Mitarbeiter am Standort Besigheim alles für den Erfolg an der Werkbank. Weller ist Teil der Apex Tool Group, die mit Marken wie Weller, Cleco und Metronix für eine der vielfältigsten Produktfamilien der Fertigungsindustrie steht. Rund 7.000 Mitarbeiter tragen an 30 Standorten weltweit entscheidend zum Unternehmenserfolg bei und erzielen dabei einen Umsatz von ca.... | Anzeige ansehen | Maschinenbau |
|
dirk Mitglied
Beiträge: 164 Registriert: 16.11.2000
|
erstellt am: 09. Jun. 2016 16:40 <-- editieren / zitieren --> Unities abgeben: Nur für l.pesch
Hallo Michael, ja, genau den einen Klick möchte ich sparen. Wir haben hier ca. 50 und mehr VB-scripte die teilweise nur 1 oder auch mal 5 Klicks sparen. Wenn diese nur oft genug angewndet werden dann lohnt sich das schon . Allein die Optimierung des Scriptes wo ich diese Funktion nun einbauen kann, wird täglich pro User geschätzte 10 Klicks sparen... Die PointSubFunction hat Super funktioniert!
Vielen Dank und Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|