| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für CATIA & Co. |
| |
 | KISTERS 3DViewStation: Mit Modellbasiertem Design zum Modellbasierten Unternehmen , eine Pressemitteilung
|
Autor
|
Thema: Surfaces selektieren (1165 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: 3585 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: 3585 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:         
|