| |  | Die Gewinne der Zukunft werden mit intelligenten, autonomen Elektrofahrzeugen eingefahren. (3DEXPERIENCE) |
Autor
|
Thema: Elementidentifikation anzeigen lassen; zwei Extrusionen auf einer Fläche in Python? (2600 mal gelesen)
|
Bobo85 Mitglied Student

 Beiträge: 28 Registriert: 20.10.2011
|
erstellt am: 19. Dez. 2011 20:19 <-- editieren / zitieren --> Unities abgeben:         
Hallo, ich versuche in Abaqus mit Python eine Parameterstudie durchzuführen. Idee ist bisher im Skizzierer eine Geometrie vorzugeben die der User dann per Eingabeoption ändern kann. Also Länge, Abstand, Extrusionstiefe, usw. Um bei der Geometrie noch einen zweiten äußeren Rand mit Vertiefung zu erzeugen sind auf der selben Fläche zwei Extrusionen notwendig. Leider scheint Abaqus nach dem ersten Ändern der Fläche eine neue Bezeichnung für die Fläche anzulegen. Gibt es eine Möglichkeit sich die aktuelle Flächenbezeichnung der Geometrie anzeigen zu lassen? Also so, dass ich diese dann bei der Schleife zuweisen kann um sie erneut auszuführen? Hat sonst vlt. jemand eine andere Idee wie man Abaqus per programmierter Schleife dazu bringen kann auf einer Fläche zwei Extrusionen nacheinander durchzuführen? Ich würde mich freuen wenn mir jemand ein paar Tipps geben könnte. Ich nutze die Studentenversion von Abaqus 6.11 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: 20. Dez. 2011 12:08 <-- editieren / zitieren --> Unities abgeben:          Nur für Bobo85
Du selbst weißt doch wo die gewünschte Fläche liegt. Somit kannst du über alle Flächen iterieren und pointOn abfragen. Wenn diese Daten gewünschten Kriterien entsprechen (z.B. x=20.5), hast du deine Fläche gefunden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bobo85 Mitglied Student

 Beiträge: 28 Registriert: 20.10.2011
|
erstellt am: 20. Dez. 2011 16:30 <-- editieren / zitieren --> Unities abgeben:         
|
Mustaine Ehrenmitglied V.I.P. h.c.
     
 Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 20. Dez. 2011 18:14 <-- editieren / zitieren --> Unities abgeben:          Nur für Bobo85
|
Bobo85 Mitglied Student

 Beiträge: 28 Registriert: 20.10.2011
|
erstellt am: 20. Dez. 2011 21:49 <-- editieren / zitieren --> Unities abgeben:         
|
Bobo85 Mitglied Student

 Beiträge: 28 Registriert: 20.10.2011
|
erstellt am: 21. Dez. 2011 00:06 <-- editieren / zitieren --> Unities abgeben:         
Hallo Mustaine, ich habe mir noch einmal das AbaqusManual zur hand genommen u bisschen was ausprobiert. Es gibt in Abaqus einen Befehl names findAt. Damit kann man faces finden wenn man die Koordinaten weiß. Ich habe es so verstanden, dass es reicht wenn man die Koordinaten eines einzigen Punktes auf der Fläche kennt. Hier erstmal der code:
Code:
from abaqus import * from abaqusConstants import *""" import section import regionToolset import displayGroupMdbToolset as dgm import part <-- import material import assembly <-- import step <-- import interaction <-- import load <-- import mesh import job import sketch import visualization import xyPlot import displayGroupOdbToolset as dgo import connectorBehavior """ import part import assembly import step import load import interaction p = mdb.models['python_modell'].parts['python_part'] f1, e1 = p.faces, p.edges meinAssembly = mdb.models['python_modell'].rootAssembly session.viewports['Viewport: 1'].setValues(displayedObject=meinAssembly) session.viewports['Viewport: 1'].assemblyDisplay.setValues(optimizationTasks=OFF, geometricRestrictions=OFF, stopConditions=OFF) meinAssembly = mdb.models['python_modell'].rootAssembly meinAssembly.DatumCsysByDefault(CARTESIAN) p = mdb.models['python_modell'].parts['python_part'] doorInstance = meinAssembly.Instance(name='python_part-1', part=p, dependent=ON) topFace = doorInstance.faces.findAt(((18.984075,-96.317485,56.558348),)) t = p.MakeSketchTransform(sketchPlane=topFace, sketchUpEdge=e1[51], sketchPlaneSide=SIDE1, sketchOrientation=LEFT, origin=(18.999483, -94.267978, 56.63652)) s1 = mdb.models['python_modell'].ConstrainedSketch(name='__profile__', sheetSize=363.2, gridSpacing=9.08, transform=t) g, v, d, c = s1.geometry, s1.vertices, s1.dimensions, s1.constraints s1.setPrimaryObject(option=SUPERIMPOSE) p = mdb.models['python_modell'].parts['python_part'] p.projectReferencesOntoSketch(sketch=s1, filter=COPLANAR_EDGES)
Mit
Code:
topFace = doorInstance.faces.findAt(((18.984075,-96.317485,56.558348),))
habe ich den belibiegen Punkt geholt den ich mir über den Infobutton in Abaqus hab anzeigen lassen.Wichtig ist der Befehl
Code:
t = p.MakeSketchTransform(sketchPlane=topFace, sketchUpEdge=e1[51], sketchPlaneSide=SIDE1, sketchOrientation=LEFT, origin=(18.999483, -94.267978, 56.63652))
statt dem sketchPlane=topFace steht dort normalerweise sowas wie f1[11] Wenn ich das nun ausführe, dann kommt der Fehler "Invalid sketch plane" auch wenn ich es in: sketchPlane=f1[topFace] ändere kommt ein Fehler, dass ein Integer erwartet wurde und keine Sequenz.meine Fragen: ist die Fläche wirklich schon durch die angegeben Punkte definiert? Wenn nicht, wie ermittel ich die richtigen Punkte? Wie wandel ich topFace so um, dass er das bei der sketchPlane Zuweisung frisst? 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. Dez. 2011 10:05 <-- editieren / zitieren --> Unities abgeben:          Nur für Bobo85
|
Bobo85 Mitglied Student

 Beiträge: 28 Registriert: 20.10.2011
|
erstellt am: 22. Dez. 2011 10:43 <-- editieren / zitieren --> Unities abgeben:         
ne wenn man das so macht möchte er gerne einen Integerwert und keine 'AbaqusMethod' ich bin auch mitlerweile am zweifeln ob der Weg über das Assembly richtig ist. Denn ich möchte ja im Part auf die Fläche zugreifen und nicht erst im Assembly. Also suche ich sowas wie:
Code:
topflaeche = mdb.models['python_modell'].parts['python_part'].faces.findAt(((18.984075,-96.317485,56.558348),))
Das schein Abaqus auch soweit zu fressen. Aber bei:
Code:
t = p.MakeSketchTransform(sketchPlane=f1[topflaeche], sketchUpEdge=e1[51], sketchPlaneSide=SIDE1, sketchOrientation=LEFT, origin=(18.999483, -94.267978, 56.63652))
kommt die Meldung: "sequence index must be integer, not 'Sequence'."Bei:
Code:
t = p.MakeSketchTransform(sketchPlane=topflaeche, sketchUpEdge=e1[51], sketchPlaneSide=SIDE1, sketchOrientation=LEFT, origin=(18.999483, -94.267978, 56.63652))
kommt die Meldung: "Invalid sketch plane" Ich wüsste nicht was ich noch groß ändern kann. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bobo85 Mitglied Student

 Beiträge: 28 Registriert: 20.10.2011
|
erstellt am: 22. Dez. 2011 12:32 <-- editieren / zitieren --> Unities abgeben:         
ich bin noch mal auf deine pointOn Idee zurück gekommen. Über den Befehl: print mdb.models['python_modell'].parts['python_part'].faces[3].pointOn kann ich mir die Koordinaten der Fläche 3 anzeigen lassen. Da sich durch die Bearbeitung der Fläche zwar die Bezeichnung aber die Koordinaten eigentlich nicht ändern dürften, dachte ich mir, dass ich mir die Koordinaten auslese und in einer Variable speicher. Jetzt brauche ich nur einen Befehl der mir die ID der Fläche unter diesen Kooridnaten anzeigt. Diese kann ich ja dann zuweisen. 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: 22. Dez. 2011 17:16 <-- editieren / zitieren --> Unities abgeben:          Nur für Bobo85
Die 3 in der eckigen Klammer ist der index. Wie du an den Wert kommst ist egal. Du kannst ihn mit findAt ermitteln (siehe Beispiel unten) oder alle Flächen durch eine Schleife laufen lassen und so ermitteln welcher pointOn bestimmten Kriterien entspricht. Diese Zahl (integer) kommt dann in die eckige Klammer bei der sketchPlane. Beispiel:
Code:
p = mdb.models['Model-1'].parts['Part-2'] f, e = p.faces, p.edgesx = f.findAt((0,1,1),).index #Testausgabe print x print type(x) t = p.MakeSketchTransform(sketchPlane=f[x], sketchUpEdge=e[2], sketchPlaneSide=SIDE1, sketchOrientation=RIGHT, origin=(0.0, 3.75, 10.0))
Die Testausgabe müsste sowas ausgeben wie: 3 int [Diese Nachricht wurde von Mustaine am 22. Dez. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |