Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  NX Programmierung
  Export Bodies von Assembly

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:  Export Bodies von Assembly (2259 mal gelesen)
sjoedi
Mitglied


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

Beiträge: 9
Registriert: 18.01.2005

NX5/NX6
Win-dose xp professional

erstellt am: 09. Jul. 2009 11:10    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


original_assembly.png


export_import.png

 
Hallo zusammen

Beim Export von einem Assembly in ein STL-File funktioniert die Positionierung der einzelnen Körper nicht richtig. Wenn ich ein Displayed Part exportiere funktioniert der Export tadellos. Der Körper wird auf den Nullpunkt gesetzt.
Sobald ich aber ein Assembly als Workpart habe und durch die einzelnen Komponenten durchgehe und exportiere, werden alle Körper auf den Nullpunkt plaziert. Also dachte ich, dass ich zuerst die Position der Komponente herauslese und anschliessend das WCS auf diesen Punkt setze. Jedoch wird auch dann die Komponente falsch positioniert (siehe Anhang). Der Export des Körpers geht irgendwie vom Nullpunkt der Komponente aus und nicht die des Assemblies.

Das ganze habe ich in Java geschrieben, jedoch bin ich diesbezüglich offen. Jeder Hinweis von C/C++ oder auch VB ist willkommen.

Besten Dank im Voraus


//Beispielcode (JAVA)

Code:

//.... Befindet sich in der Schleife durch die Komponenten
Part part = (Part) components[ii].prototype();
BodyCollection body = part.bodies();
BodyCollection.Iterator it1 = body.iterator();

lw.writeLine("");
Point3d  point3dComponents = components[ii].getPosition().position;
lw.writeLine("position: " + point3dComponents.x + " - " + point3dComponents.y + " - " + point3dComponents.z);
Matrix3x3  m3x3 = components[ii].getPosition().orientation;
lw.writeLine("orientation: " + m3x3.xx + " ; " + m3x3.xy + " ; " + m3x3.xz + " | " + m3x3.yx + " ; " + m3x3.yy + " ; " + m3x3.yz + " | " + m3x3.zx + " ; " + m3x3.zy + " ; " + m3x3.zz);

workPart.wcs().setOriginAndMatrix(point3dComponents, m3x3);

UFCsys csys = theUFSession.csys();


Tag TagWCS = csys.askWcs();


while (it1.hasNext()) {
    lw.writeLine("export bodies");
    Body bd = (Body) it1.next();

    if (bd.isSolidBody()) {
        PutSolidInStlFileData pub = theUFSession.std().putSolidInStlFile(
                fileHandle,
                TagWCS,
                bd.tag(),
                0, 1000, 0.08);

    }
}



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

denizO
Mitglied
Student


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

Beiträge: 26
Registriert: 08.07.2009

erstellt am: 09. Jul. 2009 11:23    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 sjoedi 10 Unities + Antwort hilfreich

Hi,

ich bin nicht ganz sicher was das Problem ist, aber ich könnte mir vorstellen, dass es klappen könnte, wenn der Vektor point3dComponents negiert wird und m3x3 transponiert wird.

Viele Grüße

Denis

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

sjoedi
Mitglied


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

Beiträge: 9
Registriert: 18.01.2005

NX5/NX6
Win-dose xp professional

erstellt am: 09. Jul. 2009 13:31    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


negiert_u_transponiert.png

 
Besten Dank für deine Antwort.
Dies hat mich bereits ein wenig weitergebracht! Jetzt fehlt noch das letzte i-Pünktlein. Einige Komponenten stimmen bereits, jedoch noch nicht alle. Was ich herausgefunden habe ist, dass diejenigen welche nicht passen, einen negativen Wert im Vektor haben. (jetzt würde diese Vektorgeometrie wieder helfen

Hast du noch einen weiteren Tipp für mich?

Code:
double[] csysOrigin = new double[3];
csysOrigin[0] = -components[ii].getPosition().position.x;
csysOrigin[1] = -components[ii].getPosition().position.y;
csysOrigin[2] = -components[ii].getPosition().position.z;

double[] matrixValues = new double[9];
matrixValues[0]=components[ii].getPosition().orientation.xx;
matrixValues[1]=components[ii].getPosition().orientation.yx;
matrixValues[2]=components[ii].getPosition().orientation.zx;
matrixValues[3]=components[ii].getPosition().orientation.xy;
matrixValues[4]=components[ii].getPosition().orientation.yy;
matrixValues[5]=components[ii].getPosition().orientation.zy;
matrixValues[6]=components[ii].getPosition().orientation.xz;
matrixValues[7]=components[ii].getPosition().orientation.yz;
matrixValues[8]=components[ii].getPosition().orientation.zz;


lw.writeLine("vor");
Tag tagMatrixId = csys.createMatrix(matrixValues);
lw.writeLine("nach");

Tag tagTempWCS = csys.createCsys(csysOrigin, tagMatrixId);
csys.setWcs(tagTempWCS);
Tag TagWCS = csys.askWcs();


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

denizO
Mitglied
Student


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

Beiträge: 26
Registriert: 08.07.2009

erstellt am: 09. Jul. 2009 13:48    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 sjoedi 10 Unities + Antwort hilfreich

Hi,

es muss wohl daran liegen, dass etwas mit der Rotationsmatrix nicht stimmt. Um die Drehung umzukehren, musst Du die Drehmatrix transponieren (m[1,2] = m[2,1], m[0,1] = m[1,0]) etc. . Wenn Du zweidimensionale Array eindimensional machst musst Du aufpassen. Hierbei läuft oft etwas schief. Besser umgehen.

Code:

mT.Xx = m.Xx; mT.Xy = m.Yx; mT.Xz = m.Zx;
mT.Yx = m.Xy; mT.Yy = m.Yy; mT.Yz = m.Zy;
mT.Zx = m.Xz; mT.Zy = m.Yz; mT.Zz = m.Zz;

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

sjoedi
Mitglied


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

Beiträge: 9
Registriert: 18.01.2005

NX5/NX6
Win-dose xp professional

erstellt am: 09. Jul. 2009 14:12    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

Hallo

Ich habe genau dies mit dem Befehl:

Code:
matrixValues[0]=components[ii].getPosition().orientation.xx;
...


gemacht.
xx = xx
yx = xy
zx = xz
etc.

Hab den Code noch etwas umgeschrieben. Die Schlaufe durch die Komponenten sieht jetzt folgendermassen aus:

Code:
Part part = (Part) components[ii].prototype();
BodyCollection body = part.bodies();
BodyCollection.Iterator it1 = body.iterator();

lw.writeLine("");
Point3d  point3dComponents = components[ii].getPosition().position;
lw.writeLine("position: " + point3dComponents.x + " - " + point3dComponents.y + " - " + point3dComponents.z);
Matrix3x3  m3x3 = components[ii].getPosition().orientation;
lw.writeLine("orientation: " + m3x3.xx + " ; " + m3x3.xy + " ; " + m3x3.xz + " | " + m3x3.yx + " ; " + m3x3.yy + " ; " + m3x3.yz + " | " + m3x3.zx + " ; " + m3x3.zy + " ; " + m3x3.zz);


Point3d  point3dN = new Point3d();
point3dN.x=-point3dComponents.x;
point3dN.y=-point3dComponents.y;
point3dN.z=-point3dComponents.z;

Matrix3x3 m3x3T = new Matrix3x3();
m3x3T.xx=m3x3.xx;
m3x3T.yx=m3x3.xy;
m3x3T.zx=m3x3.xz;
m3x3T.xy=m3x3.yx;
m3x3T.yy=m3x3.yy;
m3x3T.zy=m3x3.yz;
m3x3T.xz=m3x3.zx;
m3x3T.yz=m3x3.zy;
m3x3T.zz=m3x3.zz;

UFCsys csys = theUFSession.csys();
workPart.wcs().setOriginAndMatrix(point3dN, m3x3T);
Tag TagWCS = csys.askWcs();

while (it1.hasNext()) {
    lw.writeLine("export bodies");
    Body bd = (Body) it1.next();

    if (bd.isSolidBody()) {
        PutSolidInStlFileData pub = theUFSession.std().putSolidInStlFile(
                fileHandle,
                TagWCS,
                bd.tag(),
                0, 1000, 0.08);

    }
}
//wieder auf original zurücksetzten
workPart.wcs().setOriginAndMatrix(OrigWorkPartPoint3d, OrigWorkPartMatrix);


Der Import sieht aber immer noch genau gleich wie vorhin aus.

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

sjoedi
Mitglied


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

Beiträge: 9
Registriert: 18.01.2005

NX5/NX6
Win-dose xp professional

erstellt am: 10. Jul. 2009 09:01    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

Ich habs!

    -Matrix transponieren
    -Vektor mit Matrix multiplizieren
    -Vektor negieren

Besten Dank für deinen Input Denis

ps: es gibt ja da ganz schöne Libraries mit Funktionen...

    theUFSession.mtx3().transpose(...)
    theUFSession.mtx3().vecMultiply(...)
    theUFSession.vec3().negate(...)


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



Staatlich geprüfte/r Techniker/in o. ä. (w/m/d) für Betriebstechnik der Gebäude und Infrastruktur­systeme (w/m/d)

Steigen Sie ein in die faszinierende Welt des Deutschen Zentrums für Luft- und Raumfahrt (DLR), um mit Forschung und Innovation die Zukunft mitzugestalten! Mit dem Know-how und der Neugier unserer 11.000 Mitarbeitenden aus 100 Nationen sowie unserer einzigartigen Infrastruktur bieten wir ein spannendes und inspirierendes Arbeitsumfeld. Gemeinsam entwickeln wir nachhaltige Technologien und tragen so zur Lösung globaler Herausforderungen bei....

Anzeige ansehenGebäude-, Versorgungs-, Sicherheitstechnik
denizO
Mitglied
Student


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

Beiträge: 26
Registriert: 08.07.2009

erstellt am: 10. Jul. 2009 09:58    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 sjoedi 10 Unities + Antwort hilfreich

Super, dass freut mich. Ich hatte ähnliche Probleme zu lösen

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