Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SIMULIA/ABAQUS
  Elementidentifikation anzeigen lassen; zwei Extrusionen auf einer Fläche in Python?

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
Autor Thema:  Elementidentifikation anzeigen lassen; zwei Extrusionen auf einer Fläche in Python? (2687 mal gelesen)
Bobo85
Mitglied
Student


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

Beiträge: 28
Registriert: 20.10.2011

erstellt am: 19. Dez. 2011 20:19    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 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.



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

Beiträge: 3554
Registriert: 04.08.2005

Abaqus

erstellt am: 20. Dez. 2011 12:08    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 Bobo85 10 Unities + Antwort hilfreich

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


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

Beiträge: 28
Registriert: 20.10.2011

erstellt am: 20. Dez. 2011 16:30    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

Danke für deine Antwort.
Leider kann ich nicht genau nachvollziehen wie du das meinst. Wie kann man durch Iteration eine Fläche finden?

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

Mustaine
Ehrenmitglied V.I.P. h.c.



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

Beiträge: 3554
Registriert: 04.08.2005

Abaqus

erstellt am: 20. Dez. 2011 18:14    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 Bobo85 10 Unities + Antwort hilfreich

Iterieren ist vielleicht kein guter Begriff...

Lass eine Schleife über alle Flächen in deinem Part laufen und prüfe jede Fläche mit pointOn nach gewünschten Kriterien.

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

Bobo85
Mitglied
Student


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

Beiträge: 28
Registriert: 20.10.2011

erstellt am: 20. Dez. 2011 21:49    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, dann versuche ich mal dazu was zu finden. ich weiß zwar noch nicht wie ich das am besten umsetzen kann, aber es schon mal ne gute idee nach der ich googlen kann ^^
danke erstmal

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

Bobo85
Mitglied
Student


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

Beiträge: 28
Registriert: 20.10.2011

erstellt am: 21. Dez. 2011 00:06    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 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.



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

Beiträge: 3554
Registriert: 04.08.2005

Abaqus

erstellt am: 21. Dez. 2011 10:05    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 Bobo85 10 Unities + Antwort hilfreich

In die eckige Klammer gehört die interne Nummer der Fläche. Also das was als "index" abgelegt ist.

Probier mal:
sketchPlane=f[topFace.index]

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

Bobo85
Mitglied
Student


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

Beiträge: 28
Registriert: 20.10.2011

erstellt am: 22. Dez. 2011 10:43    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

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


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

Beiträge: 28
Registriert: 20.10.2011

erstellt am: 22. Dez. 2011 12:32    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 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.



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

Beiträge: 3554
Registriert: 04.08.2005

Abaqus

erstellt am: 22. Dez. 2011 17: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 Nur für Bobo85 10 Unities + Antwort hilfreich

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.edges

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

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