Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  NX Programmierung
  Absolut-Koordinaten zu WCS (C#)

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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


Sehen Sie sich das Profil von Teepo an!   Senden Sie eine Private Message an Teepo  Schreiben Sie einen Gästebucheintrag für Teepo

Beiträge: 26
Registriert: 07.07.2014

NX 10.0

erstellt am: 28. Aug. 2015 10:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Abs2WCS.JPG

 
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


Sehen Sie sich das Profil von matthias-p an!   Senden Sie eine Private Message an matthias-p  Schreiben Sie einen Gästebucheintrag für matthias-p

Beiträge: 501
Registriert: 09.06.2006

Teamcenter 11.3 / NX 11
Windows 10

erstellt am: 28. Aug. 2015 11:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Teepo 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Teepo an!   Senden Sie eine Private Message an Teepo  Schreiben Sie einen Gästebucheintrag für Teepo

Beiträge: 26
Registriert: 07.07.2014

NX 10.0

erstellt am: 28. Aug. 2015 12:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von matthias-p an!   Senden Sie eine Private Message an matthias-p  Schreiben Sie einen Gästebucheintrag für matthias-p

Beiträge: 501
Registriert: 09.06.2006

Teamcenter 11.3 / NX 11
Windows 10

erstellt am: 28. Aug. 2015 12:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Teepo 10 Unities + Antwort hilfreich

Auf das WCS kannst du nicht referenzieren, höchstens auf ein CSYS.
Das WCS ist wirklich immer nur für den aktuellen Arbeitsbereich da...WCS WORK Coordinate System... ;-)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP



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 ansehenMechatronik
Teepo
Mitglied
Student


Sehen Sie sich das Profil von Teepo an!   Senden Sie eine Private Message an Teepo  Schreiben Sie einen Gästebucheintrag für Teepo

Beiträge: 26
Registriert: 07.07.2014

NX 10.0

erstellt am: 28. Aug. 2015 13:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz