Autor
|
Thema: Surfaces selektieren (1068 mal gelesen)
|
Sigbert98 Mitglied
Beiträge: 48 Registriert: 26.02.2009
|
erstellt am: 04. Mrz. 2009 11:47 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen! Ich versuche vergeblich mit Python Oberflächen zu selektieren, die z.B. eine gemeinsame y-Koordinate haben. Auf der Grundlage eines früheren Beitrags von Mustaine habe ich mir bereits eine Schleife gebastelt, die die betreffenden Oberflächen in einem SET speichert. Wie kann ich nun möglichst einfach diese Daten in ein Set für Oberflächen übertragen? Die Fehlermeldung lautet wie folgt: TypeError[0]: mask[0]; found tuple, expecting string Vielen Dank im Voraus! Sigbert Hier die bisherige Programmierung:
Code:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # FUNKTIONIERT +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ a = mdb.models['Assembly'].rootAssembly.instances['Part1-1'] centroidlist2 = [] listfaceset2 = [] listsetnames2 = []for i in range(len(a.faces)): y=a.faces[i].getCentroid() centroidlist2.append(y) for k in range(len(centroidlist2)): if centroidlist2[k][0][1]==-100.0: # [k]=Eintrags-Nr.; [0]=x-Koordinate; [1]=y-Koordinate face_y = a.faces.findAt(centroidlist2[k]) s1 = mdb.models['Assembly'].rootAssembly setname = 'Set_Surf-'+str(k) s1.Set(faces=face_y, name=setname) set_y = s1.sets[setname] listfaceset2.append(set_y) listsetnames2.append(setname) if len(listsetnames2) > 0: s1.SetByMerge(name='Traeger_seitlich', sets=(listfaceset2)) # Loeschen der einzelnen Sets if len(listsetnames2) > 0: s1.deleteSets(setNames=(listsetnames2)) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # FUNKTIONIERT NICHT +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Hier soll das obige Set genutzt werden, um die Oberflaechen zu selektieren. a = mdb.models['Assembly'].rootAssembly s1 = a.instances['Part1-1'].faces side1Faces1 = s1.getSequenceFromMask(mask=(listfaceset2, ), ) Ass_1.Surface(side1Faces=side1Faces1, name='Oberflaeche') +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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: 06. Mrz. 2009 15:54 <-- editieren / zitieren --> Unities abgeben: Nur für Sigbert98
|
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 06. Mrz. 2009 18:14 <-- editieren / zitieren --> Unities abgeben: Nur für Sigbert98
OK, habs mir nochmal genauer angeschaut. Wenn ich das richtig sehe, willst du aus den Flächen die in dem Set liegen eine Surface erstellen, auf welche du dann z.B. bei einer Druckdefinition verweisen könntest. Nun, dann mach das dich genauso wie mit den Sets. Im Prinzip musst du alle Set-Befehle einfach nur nochmal für Surfaces anwenden. Sicherlich könnte man auch die Flächen aus dem großen Set herauslesen und daraus eine Surface machen. Aber so geht es auch - und vielleicht auch einfacher. Code:
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # FUNKTIONIERT #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ a = mdb.models['Model-1'].rootAssembly.instances['Part-1-1'] centroidlist2 = [] listfaceset2 = [] listsurfaceset2 = [] listsetnames2 = [] listsurfacenames2 = []for i in range(len(a.faces)): y=a.faces[i].getCentroid() centroidlist2.append(y) for k in range(len(centroidlist2)): if centroidlist2[k][0][1]==-100.0: # [k]=Eintrags-Nr.; [0]=x-Koordinate; [1]=y-Koordinate face_y = a.faces.findAt(centroidlist2[k]) s1 = mdb.models['Model-1'].rootAssembly setname = 'Set_Surf-'+str(k) surfacename = 'Surface_Surf-'+str(k) s1.Set(faces=face_y, name=setname) s1.Surface(side1Faces=face_y, name=surfacename) set_y = s1.sets[setname] surface_y = s1.surfaces[surfacename] listfaceset2.append(set_y) listsurfaceset2.append(surface_y) listsetnames2.append(setname) listsurfacenames2.append(surfacename) if len(listsetnames2) > 0: s1.SetByMerge(name='Traeger_seitlich', sets=(listfaceset2)) if len(listsurfacenames2) > 0: s1.SurfaceByMerge(name='blah', surfaces=(listsurfaceset2)) # Loeschen der einzelnen Sets if len(listsetnames2) > 0: s1.deleteSets(setNames=(listsetnames2)) if len(listsurfacenames2) > 0: s1.deleteSurfaces(surfaceNames=(listsurfacenames2)) #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sigbert98 Mitglied
Beiträge: 48 Registriert: 26.02.2009
|
erstellt am: 06. Mrz. 2009 19:19 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|