| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX | | | | NX: Erste Schritte, ein Webinar am 29.11.2024
|
Autor
|
Thema: Funktion CreateArc (1778 mal gelesen)
|
l.pesch Mitglied
Beiträge: 312 Registriert: 22.01.2004
|
erstellt am: 13. Okt. 2005 13:03 <-- editieren / zitieren --> Unities abgeben:
Hallo alle zusammen, bräuchte mal wieder nochmal eure Hilfe. Ich versuche einen Kreis zu erzeugen, aber das Programm bringt eine Fehlermeldung und es wird nichts erzeugt. Könntest ihr es euch mal anschauen. Es ist eigentlich alles angegeben. Code:
Option Strict Off Imports System Imports System.IO Imports NXOpen Imports NXOpen.UF Imports NXOpen.Utilities Module CreateArc Sub Main() Dim theSession As Session=Session.GetSession() Dim center As Point3d center.X = 0 center.Y = 0 center.Z = 0 Dim radius As Double = 3.0 Dim startAngle As Double = 0 Dim endAngle As Double = 360 Dim matrix As NXOpen.NXMatrix theSession.Parts.Work.Curves.CreateArc(center, matrix, radius, startAngle, endAngle)
End Sub End Module Vielen dank in voraus für die 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: 19. Okt. 2005 10:10 <-- editieren / zitieren --> Unities abgeben: Nur für l.pesch
Moin, Zitat: Hallo alle zusammen, [...] aber das Programm bringt eine Fehlermeldung und es wird nichts erzeugt. Könntest ihr es euch mal anschauen. Es ist eigentlich alles angegeben.
naja, so richtig Programmierer bin ich nicht, aber ich habe das mal mit einer anderen Funktion für mich gelöst. Vielleicht kannst du damit was anfangen. Ich habe noch ein paar Kommentare eingefügt, da bsplw. die Winkelangeben in Bogenmass umgerechnet werden müssen, bevor sie NX verarbeitet ohne einen Fehler auszuspucken. Code:
Option Strict Off Imports NXOpen Imports NXOpen.UFModule CreateArc Sub Main() Dim theSession As Session=Session.GetSession() Dim theUfSession As UFSession = UFSession.GetUFSession() Dim arc, wcs As Tag Dim matrix As UFCurve.Arc = New UFCurve.Arc Dim startAngle As Double = 0.0 'Startwinkel in Grad Dim endAngle As Double = 270.0 'Endwinkel in Grad 'Umrechnung auf Bogenmass Dim pi As Double = 3.1415926535897932 Dim t As Integer = 180 Dim t1 As Double = startAngle * pi Dim t2 As Double = endAngle * pi matrix.start_angle = t1 / t 'Startwinkel in Bogenmass matrix.end_angle = t2 / t 'Endwinkel in Bogenmass matrix.arc_center = array
matrix.radius = 10.0 'Radius theUfSession.Csys.AskWcs(wcs) theUfSession.Csys.AskMatrixOfObject(wcs, matrix.matrix_tag) theUfSession.Curve.CreateArc(matrix, arc) End Sub End Module
Ciao Mario
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. Okt. 2005 12:42 <-- editieren / zitieren --> Unities abgeben:
|
l.pesch Mitglied
Beiträge: 312 Registriert: 22.01.2004
|
erstellt am: 26. Okt. 2005 12:52 <-- editieren / zitieren --> Unities abgeben:
Hallo Mario, hab da noch eine kleine Frage an dich, wie vergibst du die Koordinaten von Mittelpunkt an das Programm? Über den Point-Konstruktor? Ich wollte es über den Point-Konstruktor machen, jetzt habe ich das Problem, das der Point-Konstruktor erscheint. Kann aber keine Punkte, linienendpunkte oder Bildschirmposition auswählen. Ich kann nur für X, Y und Z- Werte eingeben. Hast du auch dieses Problem, wo kann mein Fehler liegen. Wenn ein anderer auch eine Lösung hat bin für jeden Rat dankbar. 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: 26. Okt. 2005 16:25 <-- editieren / zitieren --> Unities abgeben: Nur für l.pesch
Hallo l.pesch Zitat: Original erstellt von l.pesch:hab da noch eine kleine Frage an dich, wie vergibst du die Koordinaten von Mittelpunkt an das Programm?
Und ich dachte schon ich könnte wenig programmieren . Prinipiell werden jetzt per "direktem Eintrag" im Quelltext die Koordinaten für den Mittelpunkt übergeben. Also muss man doch einfach "nur" die Variablen aus dem array "matrix.arc_center" entsprechend ändern. Am besten natürlich, wie du es schon angesprochen hattest mit einem Menügeführtem Auswählen durch den Benutzer, das wäre dann wohl der... Zitat: Über den Point-Konstruktor?
Genau! Den würde ich auch nehmen. Zitat: Kann aber keine Punkte, linienendpunkte oder Bildschirmposition auswählen. Ich kann nur für X, Y und Z- Werte eingeben.
Klar, du musst den array aus dem Point-Konstruktor so umbiegen, dass dieser die Variablen aus dem Array zum Mittelpunkt ändert. Zitat: Hast du auch dieses Problem, wo kann mein Fehler liegen.
Ja, das Problem hatte ich auch anfangs . Arrays können einen den letzten Nerv rauben. Naja, ich habe meine vorheriges Journal entsprechend erweitert: Code:
Option Strict Off Imports NXOpen Imports NXOpen.UFModule CreateArc Sub Main() Dim theSession As Session = Session.GetSession() Dim theUfSession As UFSession = UFSession.GetUFSession() Dim nxopenSession As NXOpen.UF.UFSession Dim arc, wcs As Tag Dim matrix As UFCurve.Arc = New UFCurve.Arc Dim startAngle As Double = 0.0 'Startwinkel in Grad Dim endAngle As Double = 270.0 'Endwinkel in Grad 'Umrechnung auf Bogenmass Dim pi As Double = 3.1415926535897932 Dim t As Integer = 180 Dim t1 As Double = startAngle * pi Dim t2 As Double = endAngle * pi matrix.start_angle = t1 / t 'umgerechneter Startwinkel in Bogenmass matrix.end_angle = t2 / t 'umgerechneter Endwinkel in Bogenmass 'Variablen fuer Pointconstructor Dim point_tag As NXOpen.Tag Dim array() As Double = {0.0, 0.0, 0.0} 'Mittelpunkt-Koordinate (X,Y,Z) matrix.arc_center = array Dim base_pt(2) As Double Dim response As Integer Dim cue As String = "Select a point" nxopenSession = 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 matrix.arc_center(0) = base_pt(0).ToString() 'Mittelpunkt-Koordinate (X) von Point-Constructor an Mittelpunkt-Matrix uebergeben matrix.arc_center(1) = base_pt(1).ToString() 'Mittelpunkt-Koordinate (Y) von Point-Constructor an Mittelpunkt-Matrix uebergeben matrix.arc_center(2) = base_pt(2).ToString() 'Mittelpunkt-Koordinate (Z) von Point-Constructor an Mittelpunkt-Matrix uebergeben matrix.radius = 10.0 'Radius theUfSession.Csys.AskWcs(wcs) theUfSession.Csys.AskMatrixOfObject(wcs, matrix.matrix_tag) theUfSession.Curve.CreateArc(matrix, arc) End Sub End Module
Ciao Mario
p.s. Sorry, wegen der holzhackermäßigen Umrechnerei zum Bogenmass. [Diese Nachricht wurde von SMario am 26. Okt. 2005 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: 27. Okt. 2005 08:16 <-- editieren / zitieren --> Unities abgeben:
|
l.pesch Mitglied
Beiträge: 312 Registriert: 22.01.2004
|
erstellt am: 03. Nov. 2005 11:05 <-- editieren / zitieren --> Unities abgeben:
Hallo SMario, ich gehe da etwas anders vor als du beim erzeugen des Kreises. Der Punkt wird nicht als Array sondern als Point3D übergeben. Mit deinem Code kann ich auch Punkte und Endpunkte auswählen, aber bei mir funktioniert das irgendwie nicht, kannst du mir vielleicht sagen wo der Fehler liegen könnte? Wenn jemand anders mir auch helfen kann bin für jede hilfe dankbar. Mein Code: ---------------------------------------------------------------------- Option Strict Off Imports NXOpen Imports NXOpen.UF Module CreateArc Sub Main() Dim theSession As Session = Session.GetSession() Dim center As Point3d If 2 = SelectPoint(center) Then Dim radius As Double = 3.0 Dim startAngle As Double = 0.0 Dim endAngle As Double = 360.0 Dim pi As Double = 3.1415926535897931 Dim t As Integer = 180 Dim t1 As Double = startAngle * pi Dim t2 As Double = endAngle * pi startAngle = t1 / t endAngle = t2 / t Dim orientation As Matrix3x3 orientation.Xx = 1.0 orientation.Xy = 0.0 orientation.Xz = 0.0 orientation.Yx = 0.0 orientation.Yy = 1.0 orientation.Yz = 0.0 orientation.Zx = 0.0 orientation.Zy = 0.0 orientation.Zz = 1.0 Dim matrix As NXOpen.NXMatrix matrix = theSession.Parts.Work.NXMatrices.Create(orientation) theSession.Parts.Work.Curves.CreateArc(center, matrix, radius, startAngle, endAngle) End If End Sub Function SelectPoint(ByRef center As Point3d) As Selection.Response Dim point_tag As NXOpen.Tag Dim base_pt(3) 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 center.X = base_pt(0) center.Y = base_pt(1) center.Z = 0.0 Return response End Function End Module ---------------------------------------------------------------------- Danke für eure hilfe in voraus
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: 08. Nov. 2005 10:17 <-- editieren / zitieren --> Unities abgeben: Nur für l.pesch
Hallo l.pesch, Zitat: Original erstellt von l.pesch: Mit deinem Code kann ich auch Punkte und Endpunkte auswählen[...]
Hmmm, komisch. Mit meinem schon oben geposteten Code kann ich ebenfalls alle angeboten Möglichkeiten einen Punkt abzugreifen auch benutzen. Ich habe mit dem point3d noch nichts gemacht, dazu bin (noch) zu wenig Programmierer um das mit den Winkelfunktionen hinzubekommen . Zitat: [...] aber bei mir funktioniert das irgendwie nicht, kannst du mir vielleicht sagen wo der Fehler liegen könnte?
Du hast scheinbar beim Kopieren vergessen die Größe für den Array des Mittelpunktes vom Pointconstructors anzugeben. Mach einfach aus "Dim base_pt() As Double" folgendes: "Dim base_pt(2) As Double" Zumindest funktioniert es jetzt bei mir sehr gut. Ciao Mario
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Tooling Engineer im Bereich Plastics - Tool Management (m/w/d) | Die Unternehmensvision von QIAGEN ist es, Verbesserungen im Leben zu ermöglichen. Wir begeistern uns für unsere Berufung, Wissenschaft und Gesundheitsversorgung entscheidend voranzubringen. Wir sind immer noch die Unternehmergesellschaft, als die wir begonnen haben, und haben heute eine Größe erreicht, die es uns ermöglicht, unsere ganze Kraft auf viele Initiativen und unsere weltweite Präsenz zu richten.... | Anzeige ansehen | Weitere: Handwerk, Dienstleistung und Fertigung |
|
l.pesch Mitglied
Beiträge: 312 Registriert: 22.01.2004
|
erstellt am: 10. Nov. 2005 08:56 <-- editieren / zitieren --> Unities abgeben:
Hallo SMario, hab da wieder mal ein Problem mit diesem code. Habe ein form1 mit einem button1 mit dem rufe ich form2 auf ------------------------------------------- Dim F2 As New Form2 Me.Hide() F2.Show() ------------------------------------------- Auf der form2 befindet sich ein button2 mit dem ich dem ich den Kreis erstellen kann ------------------------------------------ Private Sub kreis_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles kreis.Click Dim theSession As Session = Session.GetSession() Dim center As Point3d If 2 = SelectPoint(center) Then Dim radius As Double = 3.0 Dim startAngle As Double = 0.0 Dim endAngle As Double = 360.0 Dim pi As Double = 3.1415926535897931 Dim t As Integer = 180 Dim t1 As Double = startAngle * pi Dim t2 As Double = endAngle * pi startAngle = t1 / t endAngle = t2 / t Dim orientation As Matrix3x3 orientation.Xx = 1.0 orientation.Xy = 0.0 orientation.Xz = 0.0 orientation.Yx = 0.0 orientation.Yy = 1.0 orientation.Yz = 0.0 orientation.Zx = 0.0 orientation.Zy = 0.0 orientation.Zz = 1.0 Dim matrix As NXOpen.NXMatrix matrix = theSession.Parts.Work.NXMatrices.Create(orientation) theSession.Parts.Work.Curves.CreateArc(center, matrix, radius, startAngle, endAngle) End If End Sub Function SelectPoint(ByRef center As Point3d) As Selection.Response 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 center.X = base_pt(0) center.Y = base_pt(1) center.Z = 0.0 Return response End Function ------------------------------------------ Das ist also der gleiche code wie für module, denn möchte ich nur als .exe ausführen. Der führt das zwar aus ich bekomme den kreis angezeigt, nur hinterher kommt eine messagebox von unigraphics "Vorgang aktiv" "Mit Stopp beenden Sie diese Operation". Jetzt beende ich meine .exe datei und möchte weiter in Unigraphics arbeiten, geht aber leider nicht die ganzen funktionen sind grau und wenn ich jetzt unigraphics beenden will, bekomme ich eine info "Modelliererfehler: STAMOD muß erster Aufruf an KI sein". Kannst du damit was anfangen? Es klappt irgendwie vor und hinten nicht, ich bekomme immer diese Fehlermeldung. Wenn jemand anders mir auch helfen kann bin für jede hilfe dankbar. Danke in voraus für eure hilfe Gruß l.pesch
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|