| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX |
Autor
|
Thema: Absolut-Koordinaten zu WCS (C#) (2142 mal gelesen)
|
Teepo Mitglied Student
Beiträge: 26 Registriert: 07.07.2014 NX 10.0
|
erstellt am: 28. Aug. 2015 10:51 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum, (editiert: für c# und vb gleicher "Fehler") ich habe folgendes Problem: Ich möchte gerne meine Punktkoordinaten vom Absolut-Koordinatensystem in WCS umwandeln. Im Netz habe ich den Code für VB gefunden und versucht entsprechend in C# umzuwandeln, aber die darauf basierte Linie wird nicht im WCS erstellt, sondern quasi gespiegelt am Absolut-Koordinatensystem. Weiß jemand wo ich einen Fehler mache? Hier der entsprechende Code: Code: using NXOpen; using NXOpen.Features; using NXOpen.UF; using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Test { public class Test { static UFSession ufSession = UFSession.GetUFSession();
public static void Main() { Session session = Session.GetSession(); Part workPart = session.Parts.Work; Point3d headPoint3d = new Point3d(1, 2, 3); Point3d headPointwcs3d = new Point3d(); headPointwcs3d = Abs2WCS(headPoint3d);
Point3d tailPoint3d = new Point3d(10,20,30); Point3d tailPointwcs3d = new Point3d(); tailPointwcs3d = Abs2WCS(tailPoint3d); var headPoint = workPart.Points.CreatePoint(headPointwcs3d); var tailPoint = workPart.Points.CreatePoint(tailPointwcs3d); AssociativeLine nullLine = null; var associativeLineBuilder = workPart.BaseFeatures.CreateAssociativeLineBuilder(nullLine); associativeLineBuilder.StartPointOptions = NXOpen.Features.AssociativeLineBuilder.StartOption.Point; associativeLineBuilder.EndPointOptions = NXOpen.Features.AssociativeLineBuilder.EndOption.Point; associativeLineBuilder.StartPoint.Value = headPoint; associativeLineBuilder.EndPoint.Value = tailPoint; associativeLineBuilder.Commit(); associativeLineBuilder.Destroy(); } int GetUnloadOption(string dummy) { return System.Convert.ToInt32(NXOpen.Session.LibraryUnloadOption.AtTermination); } static Point3d Abs2WCS(Point3d inPt) { double[] inputArray = new double[3]; inputArray[0] = inPt.X; inputArray[1] = inPt.Y; inputArray[2] = inPt.Z; double[] outputArray = new double[3]; ufSession.Csys.MapPoint(UFConstants.UF_CSYS_ROOT_COORDS, inputArray, UFConstants.UF_CSYS_ROOT_WCS_COORDS, outputArray); Point3d outPt = new Point3d(outputArray[0], outputArray[1], outputArray[2]); return outPt; } } }
hab das ganze auch nochmal als vb code durchlaufen lassen und bekomme den gleichen "Fehler". Verstehe ich was falsch oder sollte die Linie nicht im WCS ausgelegt werden?
Code: Option Strict Off Imports System Imports System.IO Imports System.Windows.Forms Imports NXOpen Imports NXOpen.UF Module Module1 Dim ufs As UFSession = UFSession.GetUFSession Sub Main() Dim theSession As Session = Session.GetSession() Dim workPart As Part = theSession.Parts.Work Dim line As String Dim startPoint As Point3d = New Point3d(1,2,3) Dim endPoint As Point3d = New Point3d(10,20,30) startPoint = Abs2WCS(startPoint) endPoint = Abs2WCS(endPoint) Dim line1 As Line line1 = workPart.Curves.CreateLine(startPoint, endPoint) End Sub '&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 'Date: 11/18/2010 'Subject: Sample NX Open .NET Visual Basic routine : map point from absolute to wcs ' 'Note: function taken from GTAC example code Function Abs2WCS(ByVal inPt As Point3d) As Point3d Dim pt1(2), pt2(2) As Double pt1(0) = inPt.X pt1(1) = inPt.Y pt1(2) = inPt.Z ufs.Csys.MapPoint(UFConstants.UF_CSYS_ROOT_COORDS, pt1, _ UFConstants.UF_CSYS_ROOT_WCS_COORDS, pt2) Abs2WCS.X = pt2(0) Abs2WCS.Y = pt2(1) Abs2WCS.Z = pt2(2) End Function '&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Public Function GetUnloadOption(ByVal dummy As String) As Integer 'Unloads the image when the NX session terminates GetUnloadOption = NXOpen.Session.LibraryUnloadOption.AtTermination End Function End Module
[Diese Nachricht wurde von Teepo am 28. Aug. 2015 editiert.] [Diese Nachricht wurde von Teepo am 28. Aug. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
matthias-p Moderator Konstruktion / Anwenderbetreuung
Beiträge: 501 Registriert: 09.06.2006 Teamcenter 11.3 / NX 11 Windows 10
|
erstellt am: 28. Aug. 2015 11:57 <-- editieren / zitieren --> Unities abgeben: Nur für Teepo
Das passt schon alles… Nehmen wir an, du verschiebst dein WCS um X:10 Y:10 Z:10 vom ABS weg, dann werden deine Punkte so umgerechnet: IN:1 2 3 OUT:-9 -8 -7 ------ IN:10 20 30 OUT:0 10 20 ------ Jetzt erzeugst du deine Linie mit dem AssoLineBuilder…der geht aber immer vom ABS aus…das ist der Knackpunkt. Deswegen legt er dann die Punkte so wie oben umgerechnet ins ABS ;-)
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Teepo Mitglied Student
Beiträge: 26 Registriert: 07.07.2014 NX 10.0
|
erstellt am: 28. Aug. 2015 12:16 <-- editieren / zitieren --> Unities abgeben:
hi matthias, danke für deine Antwort! zum Thema: ah so ein Mist. Der Sinn hinter dem Ganzen war die Linien auf das WCS zu referenzieren. Ich bekomme das gleiche Ergebnis mit createline, Sketch und AssociativeLineBuilder. Welche Möglichkeit habe ich denn die Linien im WCS zu erzeugen? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
matthias-p Moderator Konstruktion / Anwenderbetreuung
Beiträge: 501 Registriert: 09.06.2006 Teamcenter 11.3 / NX 11 Windows 10
|
erstellt am: 28. Aug. 2015 12:35 <-- editieren / zitieren --> Unities abgeben: Nur für Teepo
|
| Ausbildung zum Mechatroniker (m/w/d) | Vitesco Technologies ist ein international führender Entwickler und Hersteller moderner Antriebstechnologien für nachhaltige Mobilität. Mit intelligenten Systemlösungen und Komponenten für Elektro-, Hybrid- und Verbrennungsantriebe macht Vitesco Technologies Mobilität sauber, effizient und erschwinglich. Das Produktportfolio umfasst elektrische Antriebe, elektronische Steuerungen, Sensoren und Aktuatoren sowie Lösungen zur Abgasnachbehandlung.... | Anzeige ansehen | Mechatronik |
|
Teepo Mitglied Student
Beiträge: 26 Registriert: 07.07.2014 NX 10.0
|
erstellt am: 28. Aug. 2015 13:15 <-- editieren / zitieren --> Unities abgeben:
ok, hab jetzt hingekriegt was ich wollte, aber bin jetzt trotzdem verwirrt Also mein Ziel war es, dass der User ein CSYS oder WCS auf ein Bauteil positioniert und in diesem Koordinatensystem dann die entsprechende Linie erstellt wird. Ich will kein WCS im Code definieren. Das soll erst während einer Sitzung passieren, aber der Code soll dann im entsprechendem CSYS oder WCS die Linie erstellen. Wieso sollte das nicht gehen? Ich habe jetzt im Code Input und Output Koordinatensystem vertauscht und er erstellt genau das was ich wollte. Sprich: C#
Code: ufSession.Csys.MapPoint(UFConstants.UF_CSYS_ROOT_WCS_COORDS, inputArray, UFConstants.UF_CSYS_ROOT_COORDS, outputArray);
VB Code: ufs.Csys.MapPoint(UFConstants.UF_CSYS_ROOT_WCS_COORDS, pt1, _ UFConstants.UF_CSYS_ROOT_COORDS, pt2)
Dh. durch diesen Befehl wird mein WCS für die Koordinaten als Absolutkoordinatensystem angesehen? Und vorher wars falsch weil mein Absolutkoordinatensystem als WCS geführt wurde? Dann würde alles wieder Sinn machen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|