Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SIMULIA/ABAQUS
  python: faces.findAt()

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:  python: faces.findAt() (8434 mal gelesen)
Capucho2002
Mitglied
Bauing.


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

Beiträge: 17
Registriert: 17.10.2007

erstellt am: 20. Mrz. 2008 14:42    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,

wiedermal ein Pythonproblem:
Ich möchte eine Auswahl von faces erstellen mit faces.findAt().
so funktionerts:

Code:

Instance.faces.findAt(((150.0, 150.0, 0.0),), ((62.5, 150.0, 0.0),))


so leider nicht (fehlermeldung (too many arguments, expected 1, got 2):
Code:

a=((150.0, 150.0, 0.0),), ((62.5, 150.0, 0.0),)
Instance.faces.findAt(a)

 
Bei 2 Flaechen die ich auswählen möchte ist dies sicherlich noch zu verschmerzen, jedoch sollte es auf sowas hinaus laufen:
Code:

xyz=[]
for i in range(len(Instance.faces)):
a=Instance.faces.getCentroid()
b=list(a)
if b[0][2]==0:
xyz+=(b[0],),

Instance.faces.findAt(xyz)


Wäre schön, wenn jemand eine Idee hätte, wie die Auswahl der faces über eine Schleife funktionieren könnte, oder kann Abaqus mit Tuplen/Listen nichts in dieser Form anfangen?
Grüße und vielen Dank für eure Hilfe!

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: 26. Mrz. 2008 10:38    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 Capucho2002 10 Unities + Antwort hilfreich

Ich weiß nicht genau was du vorhast, aber wenn man gleichzeitig über findAt nicht mehrere Flächen ansprechen kann dann mach das doch in einer Schleife.

Schreib die Centroids in eine Liste und geh diese dann in einer extra Schleife durch.

Hier ein Beispiel. Erzeuge ein Part-1 und eine Instance Part-1-1. Dann ruf' dieses Script auf.

Code:

a = mdb.models['Model-1'].rootAssembly.instances['Part-1-1']
centroidlist = []
for i in range(len(a.faces)):
    x=a.faces[i].getCentroid()

    #Kontrollausgaben
    #print '************'
    #print x
    #print x[0][0]
    #print x[0][1]
    #print x[0][2]
    #print '************'

    centroidlist.append(x)
   
print centroidlist

for k in range(len(centroidlist)):
    if centroidlist[k][0][2]== 0:
        print 'Flaeche '+str(k)+' in Liste hat Centroid bei z = 0'
        print 'Erstelle Surface-Set von dieser Fläche'
        face_x = a.faces.findAt(centroidlist[k])
        s1 = mdb.models['Model-1'].rootAssembly
        s1.Surface(side1Faces=face_x, name='Surf-'+str(k))


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

Capucho2002
Mitglied
Bauing.


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

Beiträge: 17
Registriert: 17.10.2007

erstellt am: 26. Mrz. 2008 17:42    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,

vielen Dank schonmal für deine Antwort. Du hast Recht, ich hätte  vielleicht mehr Infos zu meinem Problem geben sollen. Mein Ziel war alle  Faces eines Körpers auf der Symmetrieachse (z=0) zu "fangen" und  sie anschliessend in ein Set zusammenzufassen. Auf Grund von einigen  Schnittenebenen ist der gesamte Körper ziemlich "verhunzt".
Bin glaube ich einen ähnlichen Weg gegangen, den du vorschlägst:

Code:
t=[]
xyz=[]
for i in range(len(Part.faces)):
    a=Part.faces[i].getCentroid() #gibt ((x1,y1,z1)
    b=list(a)
    if b[0][2]==0:
    t+=a,

for i in range(len(t)):
    faceSymm=Part.faces.findAt(t[i])
    a=Part.Set(name="test"+str(i), faces=faceSymm)
Part.SetByMerge(name="PartSymm",sets=Part.sets.values())

for name in Part.sets.keys():
    if name<>"PartSymm":
        del Part.sets[name]
else:
    pass


Meine Frage zielte eigentlich mehr auf die Tatsache ab, dass Python/Abaqus Sequencen(d.h. Tupel), wenn ich es richtig verstanden  habe, zurückt gibt. Wenn ich jetzt also z.B. findAt() aufrufe und mir das Ergebnisse ausgebe, kriege ich ein face object zurück.
Programmier ich findAt() über eine Schleife muss es ja eine Liste sein, leider funkt das anschliessende Umwandeln in einen Tupel nicht.
Hier krieg ich die Fehlermeldung bzw. ich kann dieses Tupel nicht ohne Fehlermeldung übergeben.

Der Umweg den wir beide gehen über die dicts finde ich recht umständlich, aber anscheinend der einzigste Weg der machbar ist?


Gruesse und nochmal Danke für deine Hilfe!

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: 27. Mrz. 2008 12:27    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 Capucho2002 10 Unities + Antwort hilfreich

Ich finde den Weg über eine extra Schleife eigentlich sogar übersichtlicher.

Um alle Symmetrieflächen in ein Set zu bekommen braucht man auch nicht mehr viel machen. Man prüft halt alle Flächen. Die Flächen die das Kriterium erfüllen werden in ein Set gelegt und eine Liste mit den Sets wird angelegt. Dann werden alle diese Sets zu einem gemerged und ggf. die einzelnen Sets wieder gelöscht.

Code:

a = mdb.models['Model-1'].rootAssembly.instances['Part-1-1']
centroidlist = []
listfaceset = []
listsetnames = []

for i in range(len(a.faces)):
    x=a.faces[i].getCentroid()
    centroidlist.append(x)
   
# Kontrolle
# print centroidlist

for k in range(len(centroidlist)):
    if centroidlist[k][0][2]== 0:
        print 'Flaeche '+str(k)+' in Liste hat Centroid bei z = 0'
        print 'Erstelle Set von dieser Fläche'
        face_x = a.faces.findAt(centroidlist[k])
        s1 = mdb.models['Model-1'].rootAssembly
        setname = 'Set_Surf-'+str(k)
        s1.Set(faces=face_x, name=setname)
        set_x = s1.sets[setname]
        listfaceset.append(set_x)
        listsetnames.append(setname)

if len(sets) > 0:
    s1.SetByMerge(name='Set-symm_z', sets=(listfaceset))
   
# löschen der einzelnen Sets
if len(listsetnames) > 0:
    s1.deleteSets(setNames=(listsetnames))


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

Capucho2002
Mitglied
Bauing.


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

Beiträge: 17
Registriert: 17.10.2007

erstellt am: 28. Mrz. 2008 16:11    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

Mich hat bei meiner Lösung vorallem meine letzte Schleife (Löschen der Sets) gestört, da ich vorher schon andere Sets erstellt habe.
Diese wollte ich natürlich nicht löschen. Hier ist deine Lösung sicher besser!
Ich werde sie mir borgen   

gruss und schönes Wochende!

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

Cosynus
Mitglied


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

Beiträge: 3
Registriert: 07.08.2014

erstellt am: 07. Aug. 2014 18:42    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 Capucho2002 10 Unities + Antwort hilfreich

Hallo,

vielen Dank erstmal für das oben genannte Beispiel, das hat mir sehr weitergeholfen!

Hier meine Frage:
Wie erstellt man aus dem gerade erstellten Set eine Surface?

Vielen Dank im Voraus
Lg

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: 12. Aug. 2014 17: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 Nur für Capucho2002 10 Unities + Antwort hilfreich

Das geht nicht so einfach. Ein Set kann schließlich auch Kanten und Punkte beinhalten; eine Surface nur Flächen, ggf. auch noch mit einer Richtungsinformation.

Bei Solids kannst du ggf. ein kleines Skript schreiben und alle Flächen in einem Set sammeln und in eine neue Surface-Definition stecken.
Ansonsten kann man auch in CAE einfach ein Set (nur Flächen) einblenden und dann eine Surface erstellen, wobei man dann einfach eine Dragbox über alle Flächen zieht.

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

Cosynus
Mitglied


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

Beiträge: 3
Registriert: 07.08.2014

erstellt am: 13. Aug. 2014 11:36    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 Capucho2002 10 Unities + Antwort hilfreich

Gibt es keine Möglichkeit dies mithilfe von Python zu modellieren?

Im obengenannten Beispiel kann man doch bestimmt auch irgendwie die gleiche Surface erstellen, die auch das Set darstellt?
Vielleicht baut man die Surface dann von Anfang an in die Schleifen mit ein anstatt später das Set in eine Surface umzuwandeln?

Also:

Code:

a = mdb.models['Model-1'].rootAssembly.instances['Part-1-1']
centroidlist = []
listfaceset = []
listsetnames = []
for i in range(len(a.faces)):
    x=a.faces[i].getCentroid()
    centroidlist.append(x)
   
# Kontrolle
# print centroidlist

for k in range(len(centroidlist)):
    if centroidlist[k][0][2]== 0:
        print 'Flaeche '+str(k)+' in Liste hat Centroid bei z = 0'
        print 'Erstelle Set von dieser Fläche'
        face_x = a.faces.findAt(centroidlist[k])
        s1 = mdb.models['Model-1'].rootAssembly
        setname = 'Set_Surf-'+str(k)
        s1.Set(faces=face_x, name=setname)
        set_x = s1.sets[setname]
        listfaceset.append(set_x)
        listsetnames.append(setname)

if len(sets) > 0:
    s1.SetByMerge(name='Set-symm_z', sets=(listfaceset))
   
# löschen der einzelnen Sets
if len(listsetnames) > 0:
    s1.deleteSets(setNames=(listsetnames))

#Surface erstellen
Total_Surface = ... ???

[Diese Nachricht wurde von Cosynus am 13. Aug. 2014 editiert.]

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: 13. Aug. 2014 15: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 Capucho2002 10 Unities + Antwort hilfreich

Ich habe das Skript erweitert.

Code:

a = mdb.models['Model-1'].rootAssembly.instances['Part-1-1']
centroidlist = []
listfaceset = []
listsetnames = []

listsurfaceset = []
listsurfacenames = []

for i in range(len(a.faces)):
    x=a.faces[i].getCentroid()
    centroidlist.append(x)
 

for k in range(len(centroidlist)):
    if centroidlist[k][0][2]== 0:
        print 'Flaeche '+str(k)+' in Liste hat Centroid bei z = 0'
        print 'Erstelle Set von dieser Flaeche'
        face_x = a.faces.findAt(centroidlist[k])
        s1 = mdb.models['Model-1'].rootAssembly

        setname = 'Set_Surf-'+str(k)
        s1.Set(faces=face_x, name=setname)
        set_x = s1.sets[setname]
        listfaceset.append(set_x)
        listsetnames.append(setname)
       
        surfname = 'Surf-'+str(k)
        s1.Surface(side1Faces=face_x, name=surfname)
        face_x1 = s1.surfaces[surfname]
        listsurfaceset.append(face_x1)
        listsurfacenames.append(surfname)

if len(s1.sets) > 0:
    s1.SetByBoolean(name='Set-symm_z', sets=(listfaceset))
    s1.SurfaceByBoolean(name='Surface-symm_z', surfaces=(listsurfaceset))   
# Befehl alte Abaqus Version
#  s1.SetByMerge(name='Set-symm_z', sets=(listfaceset))   

 
# optional loeschen der einzelnen Sets
if len(listsetnames) > 0:
    s1.deleteSets(setNames=(listsetnames))
    s1.deleteSurfaces(surfaceNames=(listsurfacenames))


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

Cosynus
Mitglied


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

Beiträge: 3
Registriert: 07.08.2014

erstellt am: 13. Aug. 2014 15:21    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 Capucho2002 10 Unities + Antwort hilfreich

Hallo Mustaine,

VIELEN Dank! Dein Beispiel-Code ist unfassbar hilfreich!

Viele Grüße

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

marekijkl
Mitglied



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

Beiträge: 11
Registriert: 16.08.2013

erstellt am: 05. Nov. 2014 10:47    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 Capucho2002 10 Unities + Antwort hilfreich

Hallo zusammen, da meine Frage der obigen Frage sehr ähnlich ist, aber eben doch ein bisschen anders, schreibe ich hier in diesem Thread...
Ich möchte gerne eine Liste von Flächen erstellen, die ich dann nachfolgend als eine Surface definiere, um dort eine Last aufzubringen. Da ich ein parametrisiertes Modell habe, ist die Anzahl der Flächen in der Liste variabel. Ich würde gerne die Flächen mit einem Kristerium auswählen. Ich habe oben schon gesehen, dass man das anscheinend mit dem centroid befehl macht. Allerdings ist mir die Syntax mit den eckigen Klammern nicht ganz klar! In meinem Minimalbeispiel unten wüsste ich gerne, wie ich eine Schleife aufbauen kann, bei der der x-Wert dann in Abhängigkeit eines Parameters festgelegt wird. Danke schonmal!


CCFaces = part1.faces.findAt(((0, 0.5*h, 0.5*c),),
      ((0.25*a, 0.0, 0.5*c),),
      ((0.25*a, h, 0.5*c),),
      ((a, 0.5*h, 0.5*c),),
      ((a, 0.5*h, 0.5*c),),
      ((1.25*a, 0.0, 0.5*c),),
      ((1.25*a, h, 0.5*c),),
      ((2*a, 0.5*h, 0.5*c),))

part1.Set(faces=CCFaces, name='CCFaces')
part1.Surface(side1Faces = CCFaces, name ='CCWall')

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

marekijkl
Mitglied



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

Beiträge: 11
Registriert: 16.08.2013

erstellt am: 05. Nov. 2014 13:29    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 Capucho2002 10 Unities + Antwort hilfreich

vielleicht sollte ich noch anmerken, dass bei mir eben nicht nur ein kriterium (wie zu vor z.B. z=0) erfüllt sein muss, sondern auch noch für y und x. Außerdem ändern sich die x-Werte nach einer bestimmten Vorschrift (siehe Beispiel).

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: 06. Nov. 2014 14:17    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 Capucho2002 10 Unities + Antwort hilfreich

Ich glaube ich verstehe die Frage noch nicht.

Bei findAt() kannst du Koordinaten mit Variablen ersetzen - wie in deinem Beispiel.
Außerdem kannst du ja mit findAt() eine beliebige Menge an Flächen finden. Das kannst du zusätzlich in einer Schleife wiederholen und damit die bestehende Menge erweitern.
Am Ende gibst du deine Ansammlungen von Flächen dem Kommando, das daraus eine Surface macht.

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

marekijkl
Mitglied



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

Beiträge: 11
Registriert: 16.08.2013

erstellt am: 07. Nov. 2014 13:39    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 Capucho2002 10 Unities + Antwort hilfreich

Mein erstes Beispiel war vielleicht nicht so gut. Also ganz vereinfacht würde ich gerne wissen, wie man eine Schleife um den findAt Befehl drumherumbaut. Also statt z.B.

Code:
CCFaces = part1.faces.findAt(((a, b, c),),
      ((2*a, b, c),),
      ((3*a, b, c),),
      ((4*a, b, c),))

part1.Set(faces=CCFaces, name='CCFaces')
part1.Surface(side1Faces = CCFaces, name ='CCWall')


würde ich gerne eine Schleife bauen bei der dann der x-Wert in Abhängigkeit der Schleifenkoordinate (z.B. n) berechnet wird. Nur wie mache ich das? Ich kann ja nicht einfach eine Schleife benutzen oder? Ich muss ja irgendwie sagen, dass er die Liste CCFaces erweitert oder? Sonst hätte ich das nämlich so gelöst (ist aber wahrscheinlich nicht möglich oder?)

Code:

for i in range(0,n):
  CCFaces = part1.faces.findAt(((n*a, b, c),))

 

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: 07. Nov. 2014 14:04    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 Capucho2002 10 Unities + Antwort hilfreich

Das erweitern der Liste dürfte das sein was du brauchst.

Hier ein einfaches Beispiel, wo in z-Richtung mehrere Flächen aufgesammelt werden sollen. Ab dem zweiten Schleifendurchlauf wird bei dem "else" die Flächenliste immer erweitert.

Code:

p = mdb.models['Model-1'].parts['Part-1']

for i in range(1,5):
    
    a=p.faces.findAt(((5, 0, i*10-5),),)
   
    if i==1:
        x=a
    else:
        x=x+a

p.Surface(side1Faces=x, name='Surf-1')


[Diese Nachricht wurde von Mustaine am 07. Nov. 2014 editiert.]

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

marekijkl
Mitglied



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

Beiträge: 11
Registriert: 16.08.2013

erstellt am: 07. Nov. 2014 16:54    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 Capucho2002 10 Unities + Antwort hilfreich

Das hat mit dem Aufaddieren hat mir gefehlt! Wusste nicht dass man das bei listen auch machen kann. Super vielen dank! Du hast mir echt weitergeholfen!

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: 07. Nov. 2014 18: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 Nur für Capucho2002 10 Unities + Antwort hilfreich

Bei normalen Listen geht das auch nicht. Da müsste man mit append arbeiten. Abaqus verwendet diesem Fall für die Flächenmenge aber irgendeine andere Art von Sequenz und die erlaubt diese Methode.

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

slein89
Mitglied



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

Beiträge: 139
Registriert: 30.04.2012

erstellt am: 10. Nov. 2014 08:21    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 Capucho2002 10 Unities + Antwort hilfreich

Ich würde als FineTuning noch auf die If-Abfrage verzichten und auch mit append arbeiten:

Code:

p = mdb.models['Model-1'].parts['Part-1']

x = []

for i in range(1,5):
   
    a=p.faces.findAt(((5, 0, i*10-5),),)
  
    x.append(a)

p.Surface(side1Faces=x, name='Surf-1')


oder noch kompakter mit einer List Comprehension siehe hier, Abschnitt 5.1.4 :

Code:

p = mdb.models['Model-1'].parts['Part-1']

x = [ p.faces.findAt(((5, 0, i*10-5),),) for i in range(1,5)  ]

p.Surface(side1Faces=x, name='Surf-1')


Grüße
Slein

[Diese Nachricht wurde von slein89 am 10. Nov. 2014 editiert.]

[Diese Nachricht wurde von slein89 am 10. Nov. 2014 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