Autor
|
Thema: getClosest (2549 mal gelesen)
|
A.L. Mitglied WMA
Beiträge: 2 Registriert: 17.09.2012
|
erstellt am: 08. Apr. 2013 18:55 <-- editieren / zitieren --> Unities abgeben:
Hallo liebe Abaqus-Gemeinde, ich versuche via Python eine virtual Topolgy zu erstellen. Mit dem Befehl "getClosest" möchte ich die Fläche, die am nähesten von meinen Koordinaten liegt auswählen (die Abweichung von den mittels Formeln erstellten Koordinaten und der Fläche beträgt 10^-3 und ist somit zu groß, um mit findAt arbeiten zu können). Mein Code sieht wie folgt aus:
Code: mdb.models['Model-1'].parts['Laminat_gelocht'].createVirtualTopology( applyBlendControls=True, blendRadiusTolerance=1.6, blendSubtendedAngleTolerance=60.0, cornerAngleTolerance=30.0, faceAspectRatioThreshold=10.0, ignoreRedundantEntities=True, mergeShortEdges=True, mergeSliverFaces=True, mergeSmallAngleFaces=True, mergeSmallFaces=True, mergeThinStairFaces=True, regions= mdb.models['Model-1'].parts['Laminat_gelocht'].faces.getClosest(coordinates=((cos(ws*pi/360.0)*(tk+di/2.0),-.1,sin(ws*pi/360.0)*(tk+di/2.0)),(cos(ws*pi/360.0)*(tk+di/2.0),-. 5,sin(ws*pi/360.0)*(tk+di/2.0)), )), shortEdgeThreshold=0.32, smallFaceAreaThreshold=0.51, smallFaceCornerAngleThreshold=10.0, thinStairFaceThreshold=0.064)
Als Fehlermeldung bekomme ich, dass ein Tuple erwartet wird. Ich kann damit nicht viel anfangen, da laut Hilfe es möglich sein sollte, eine Fläche mittels getClosest auszuwählen. Hat jemand eine schaue Idee und kann mir helfen? Ich wünsche allen einen schönen Abend!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: 09. Apr. 2013 10:57 <-- editieren / zitieren --> Unities abgeben: Nur für A.L.
Du solltest die Kommandos erstmal einzeln verstehen. Bei der virtuellen Topologie gibt man eine Liste mit Flächen an. Diese Liste kann dabei ein Slicing sein, was auch nur einen Fläche referenziert. Z.B. so für die Fläche mit index=5: Code:
p = mdb.models['Model-1'].parts['Part-1'] f = p.facesfaces = f[5:6] p.createVirtualTopology(regions=faces, mergeShortEdges=True, shortEdgeThreshold=0.1, mergeSmallFaces=True, smallFaceAreaThreshold=1.0, mergeSliverFaces=True, faceAspectRatioThreshold=10.0, mergeSmallAngleFaces=True, smallFaceCornerAngleThreshold=10.0, mergeThinStairFaces=True, thinStairFaceThreshold=0.1, ignoreRedundantEntities=True, cornerAngleTolerance=30.0, applyBlendControls=True, blendSubtendedAngleTolerance=60.0, blendRadiusTolerance=1.0)
Wie kommt man nun mit getClosest() an diesen Flächenindex? Dafür musst du dir anschauen, was dir diese Methode zurückgibt. Wenn man die Methode wie im Manual beschrieben anwendet und darauf dann ein type() macht, bekommt man die Info, dass es ein Dictionary ist. Schaut man sich nun die Einträge an, hat man bei den dict.values() eine Liste, auf die man zugreifen kann. Geht man hier entsprechend voran und holt sich den index, hat man die Flächennummer. Damit hast du alles was du brauchst und kannst das in die Slicing-Sequenz der Virtuellen Topologie einsetzen.
Code:
p = mdb.models['Model-1'].parts['Part-1'] f = p.facesr = f.getClosest(coordinates=((20,0,40),)) a = r.values()[0][0].index b = r.values()[0][0].index+1 faces = f[a:b] p.createVirtualTopology(regions=faces, mergeShortEdges=True, shortEdgeThreshold=0.1, mergeSmallFaces=True, smallFaceAreaThreshold=1.0, mergeSliverFaces=True, faceAspectRatioThreshold=10.0, mergeSmallAngleFaces=True, smallFaceCornerAngleThreshold=10.0, mergeThinStairFaces=True, thinStairFaceThreshold=0.1, ignoreRedundantEntities=True, cornerAngleTolerance=30.0, applyBlendControls=True, blendSubtendedAngleTolerance=60.0, blendRadiusTolerance=1.0)
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
A.L. Mitglied WMA
Beiträge: 2 Registriert: 17.09.2012
|
erstellt am: 09. Apr. 2013 13:09 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|