| |
 | Die Gewinne der Zukunft werden mit intelligenten, autonomen Elektrofahrzeugen eingefahren. (3DEXPERIENCE) |
Autor
|
Thema: Automatisches Erzeugen eines Path (3780 mal gelesen)
|
dabauer82 Mitglied
 
 Beiträge: 121 Registriert: 22.11.2007 Pro/E WiFi3 M050 Win 7 ABQ 6-14
|
erstellt am: 30. Jul. 2011 10:37 <-- editieren / zitieren --> Unities abgeben:         
Hallo liebe Gemeinde, ich habe mein Modell und meine Partitionen so aufgebaut, dass ich exakt auf der Y-Achse und exakt im Ursprung Netzknoten liegen habe, die ich gerne auslesen würde. Und zwar automatisch. Zur Zeit gehe ich hin, und erzeuge via CAE einen Path und klicke meine zehn knoten an (0,0,0; 0,-1,0; ... 0,-10,0) an und lasse mir den XY-Plot hierzu plotten. Wie kann ich das denn automatisieren? Dadurch, das nicht jedes Modell die gleiche Elementzahl hat, sind die Knotenbezeichnung unterschiedlich. Hat jemand eine Idee? Danke. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dabauer82 Mitglied
 
 Beiträge: 121 Registriert: 22.11.2007 Pro/E WiFi3 M050 Win 7 ABQ 6-14
|
erstellt am: 01. Aug. 2011 10:21 <-- editieren / zitieren --> Unities abgeben:         
Hallo, ich habe rausgefunden dass ich per GetByBoundingCylinder meine Nodes auslesen kann. Aber leider funktioniert mein Befehl nicht. Ich würde das falsche Object nutzen. Wie geht es richtig? Code: # Define Path # BKV-1 myFolder = 'D:/Temp/team_trt/' myFile = 'ZM_G15X5T2_1HG6_P250_D70_V70_V2a.odb' myOdbPath = myFolder+myFile myOdbFile = session.openOdb(name='myOdbFile', path=myOdbPath, readOnly=True) myMeshElementArray = myOdbFile.getByBoundingCylinder((0,35,0),(0,34,0),0.01)
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
     
 Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 01. Aug. 2011 15:55 <-- editieren / zitieren --> Unities abgeben:          Nur für dabauer82
So einfach geht das nicht. Du musst nicht nur die Knoten haben, du musst sie auch noch in der korrekten Reihenfolge angeben. Ich habe mal schnell was geschrieben. Hierbei wird davon ausgegangen, dass du den Pfad entlang einer Geometriekante haben möchtest (ggf. vorher partitionieren). Lege diese Kante in ein Set und einen Endpunkt der Kante (=Startpunkt des Pfades) in ein weiteres Set. Trage die Sets in das Skipt ein und starte es im Postprocessing. Das Skript sollte dann einen Pfad erstellen. Code:
""" - script to create a path based on a node set and a set with the start node - sets need to be defined on assembly level """ # to be defined by user set_nodes = 'SET-NODES' set_startnode = 'SET-POINT' pathname = 'Path-x' ##
from abaqus import * from abaqusConstants import * from caeModules import * from math import *
dict_nodes ={} list_nodes = []
vps = session.viewports.values()[0] odbName = vps.displayedObject.name odb = session.odbs[odbName]
instancename = odb.rootAssembly.nodeSets[set_startnode].nodes[0][0].instanceName coord_point = odb.rootAssembly.nodeSets[set_startnode].nodes[0][0].coordinates for node in odb.rootAssembly.nodeSets[set_nodes].nodes[0]: dist = sqrt((pow(node.coordinates[0]-coord_point[0],2))+ \ (pow(node.coordinates[1]-coord_point[1],2))+ \ (pow(node.coordinates[2]-coord_point[2],2))) dict_nodes[dist] = node.label x = dict_nodes.keys() x.sort() for y in x: list_nodes.append(dict_nodes[y]) list_nodes = tuple(list_nodes) session.Path(name=pathname, type=NODE_LIST, expression=((instancename, ( list_nodes)), ))
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dabauer82 Mitglied
 
 Beiträge: 121 Registriert: 22.11.2007 Pro/E WiFi3 M050 Win 7 ABQ 6-14
|
erstellt am: 01. Aug. 2011 21:28 <-- editieren / zitieren --> Unities abgeben:         
Danke! Wird getestet! [Diese Nachricht wurde von dabauer82 am 01. Aug. 2011 editiert.] Hallo, ich habe dein Script umgesetzt und erweitert. Nicht zu 100% exakt weil meine ODB kein Set im Assembly hat, aber ich habe das Set mit den Knoten im Part und daher musste ich nur n wenig umbauen. Aber generell würde ich es sehr begrüßen, wenn man die Knoten direkt aus dem ODB-Part auslesen kann. Hintergrund ist jener, dass ich nicht alle ODBs selbst simuliere und viele bekomme und daher nicht sicherstellen kann, dass jeder ein Set mit der Bezeichnung XYZ erstellt. Daher fand ich die Lösung mit getByBoundingCylinder recht angenehm. Gibt es denn so eine Lösung? Wie ich das richtig sehe geht GetByBoundingCylinder nur für MessArrays und folglich nicht für ODBMeshArrays oder ich war zu doof  Danke! [Diese Nachricht wurde von dabauer82 am 03. Aug. 2011 editiert.] Ich habe noch einen Haken gefunden. Mein Netz ist enlang des Sets nicht konstant. Zumindest sind nur die ersten 11 Knoten äquidistant und die letzten 3 sind es auch, aber bei den 11 hab ich 50 und bei den letzten drei 10µm Kantenlänge...Jetzt ist deine Distanzrechnung irgendwie anders... [Diese Nachricht wurde von dabauer82 am 03. Aug. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
m.o Mitglied
 Beiträge: 4 Registriert: 20.03.2012
|
erstellt am: 20. Mrz. 2012 16:48 <-- editieren / zitieren --> Unities abgeben:          Nur für dabauer82
Hallo, ich habe das Skript folgendermaßen umgesetzt: # to be defined by user set_nodes = 'Seil1' set_startnode = 'Seil1_Start' pathname = 'Path-Seil1' ## from abaqus import * from abaqusConstants import * from caeModules import * from math import * dict_nodes ={} list_nodes = [] vps = session.viewports.values()[0] odbName = vps.displayedObject.name odb = session.odbs['odbName'] instancename = odb.rootAssembly.nodeSets[set_startnode].nodes[0][0].instanceName
Der Durchlauf des Skriptes wird dann in der letzten Zeile mit folgender Fehlermeldung abgebrochen: KeyError: Seil1_Start
Kann mir vielleicht jemand weiterhelfen, wo das Problem liegt? Danke! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
     
 Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 21. Mrz. 2012 13:45 <-- editieren / zitieren --> Unities abgeben:          Nur für dabauer82
|
m.o Mitglied
 Beiträge: 4 Registriert: 20.03.2012
|
erstellt am: 30. Mrz. 2012 13:28 <-- editieren / zitieren --> Unities abgeben:          Nur für dabauer82
|
m.o Mitglied
 Beiträge: 4 Registriert: 20.03.2012
|
erstellt am: 04. Mai. 2012 11:54 <-- editieren / zitieren --> Unities abgeben:          Nur für dabauer82
Mein Problem hat sich leider noch nicht gelöst Die Fehlermeldung "KeyError: Seil1_Start" kommt immer; unabhängig davon, ob das Set "Seil1_Start" im Assembly oder im Part definiert. Für weitere Ideen wäre ich sehr dankbar Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lecter84 Mitglied
 Beiträge: 1 Registriert: 19.06.2012
|
erstellt am: 19. Jun. 2012 21:36 <-- editieren / zitieren --> Unities abgeben:          Nur für dabauer82
Hallo, warum: coord_point = odb.rootAssembly.nodeSets[set_startnode].nodes[0][0].coordinates und nicht: coord_point = odb.rootAssembly.nodeSets[set_startnode].nodes[0].coordinates Wieso muss man hier 2mal "dereferenzieren" ? Ich stand einmal vor einem ähnlichen Problem, bin nur aus Zufall auf die Lösung gekommen. Wär nett, wenn mir das jemand erklären könnte! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GuteMusik14 Mitglied Mech Eng Student
 Beiträge: 1 Registriert: 18.11.2015
|
erstellt am: 18. Nov. 2015 19:23 <-- editieren / zitieren --> Unities abgeben:          Nur für dabauer82
Ganz ehrlich, Hammer! Es hat zwar eine ganze Weile gebraucht, bis ich bemerkt habe, dass man die eigenen Node Sets in Capital Lettern in das Skript einfügen muss - aber das Rätseln hat sich gelohnt! Nun kann ich vernünftig mein Parametermodell auswerten! Danke ------------------ Morgen, morgen, nur nicht heute, sagen alle faulen Leute Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |