Autor
|
Thema: Partition mit Python (3769 mal gelesen)
|
SGB Mitglied Ing.
Beiträge: 14 Registriert: 20.07.2011 Abaqus/CAE Version 6.8-3
|
erstellt am: 26. Aug. 2011 13:39 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich möchte Cellen mit dem nachfolgenden Befehl erstellen: p=mdb.models['Strassenaufbau'].parts['ac d'] c=p.cells p.PartitionCellByPlaneThreePoints(point1=(0.0, 260.0, 0.0), point2=(2000.0, 260.0, 2000.0), point3=(2000.0, 260.0, 0.0)) Hab aber keinen Plan, warum das nicht geht!! Kann mir jemand helfen?? Bin für jede Hilfe dankbar!! Gruß SGB 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: 29. Aug. 2011 15:50 <-- editieren / zitieren --> Unities abgeben: Nur für SGB
Ein Blick ins Scripting Reference Manual zeigt folgendes: Code:
20.1.41 PartitionCellByPlaneThreePoints(...)This method partitions one or more cells using a plane defined by three points. Path mdb.models[name].parts[name].PartitionCellByPlaneThreePoints mdb.models[name].rootAssembly.PartitionCellByPlaneThreePoints Required arguments cells A sequence of Cell objects specifying the cells to partition. point1 A Vertex, InterestingPoint, or DatumPoint object specifying a point on the plane. point2 A Vertex, InterestingPoint, or DatumPoint object specifying a point on the plane. point3 A Vertex, InterestingPoint, or DatumPoint object specifying a point on the plane. Note: point1, point2, and point3 must not be colinear and must not coincide.
An meiner Hervorhebung kannst du erkennen, dass du keine Koordinaten eingeben kannst. Du kannst z.B. 3 Datum Points angeben, welche du vorher mit entsprechenden Koordinaten erstellt hast.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SGB Mitglied Ing.
Beiträge: 14 Registriert: 20.07.2011 Abaqus/CAE Version 6.8-3
|
erstellt am: 30. Aug. 2011 12:31 <-- editieren / zitieren --> Unities abgeben:
Hallo Mustaine, ich habe jetzt versucht das mit den DatumPoint zu lösen: mdb.models['Strassenaufbau'].parts['ac d'].DatumPointByCoordinate(coords=(0.0, 10 , 0.0)) mdb.models['Strassenaufbau'].parts['ac d'].PartitionCellByPlaneThreePoints(cells=mdb.models['Strassenaufbau'].parts['ac d'].cells.getSequenceFromMask(('[#1 ]', ), ), point1=mdb.models['Strassenaufbau'].parts['ac d'].datums[ 4 ], point2=mdb.models['Strassenaufbau'].parts['ac d'].datums[ 5 ], point3=mdb.models['Strassenaufbau'].parts['ac d'].datums[ 3 ]) mdb.models['Strassenaufbau'].parts['ac d'].DatumPointByCoordinate(coords=(0.0, 20 , 0.0)) mdb.models['Strassenaufbau'].parts['ac d'].PartitionCellByPlaneThreePoints(cells=mdb.models['Strassenaufbau'].parts['ac d'].cells.getSequenceFromMask(('[#1 ]', ), ), point1=mdb.models['Strassenaufbau'].parts['ac d'].datums[ 8 ], point2=mdb.models['Strassenaufbau'].parts['ac d'].datums[ 10 ], point3=mdb.models['Strassenaufbau'].parts['ac d'].datums[ 6 ]) mdb.models['Strassenaufbau'].parts['ac d'].DatumPointByCoordinate(coords=(0.0, 30 , 0.0)) mdb.models['Strassenaufbau'].parts['ac d'].PartitionCellByPlaneThreePoints(cells=mdb.models['Strassenaufbau'].parts['ac d'].cells.getSequenceFromMask(('[#1 ]', ), ), point1=mdb.models['Strassenaufbau'].parts['ac d'].datums[ 12 ], point2=mdb.models['Strassenaufbau'].parts['ac d'].datums[ 15 ], point3=mdb.models['Strassenaufbau'].parts['ac d'].datums[ 9 ]) mdb.models['Strassenaufbau'].parts['ac d'].DatumPointByCoordinate(coords=(0.0, 40 , 0.0)) mdb.models['Strassenaufbau'].parts['ac d'].PartitionCellByPlaneThreePoints(cells=mdb.models['Strassenaufbau'].parts['ac d'].cells.getSequenceFromMask(('[#1 ]', ), ), point1=mdb.models['Strassenaufbau'].parts['ac d'].datums[ 16 ], point2=mdb.models['Strassenaufbau'].parts['ac d'].datums[ 20 ], point3=mdb.models['Strassenaufbau'].parts['ac d'].datums[ 12 ]) Es kommt dann KeyError 4!! Ich weiß auch nicht wie die datum [???] mit den Zahl in Verbindung stehen?? Vll. kannst du mir was dazu sagen Danke SGB 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: 30. Aug. 2011 15:46 <-- editieren / zitieren --> Unities abgeben: Nur für SGB
Wie üblich wird ein neuer Datum Point hinten an die Liste der bestehenden Datum Points angehängt. Mit dem Aufruf mdb.models['Strassenaufbau'].parts['ac d'].datums[ 12 ] definierst du welchen Punkt du aus dieser Liste ansprichst. Möchtest du 3 Punkte anlegen und mit diesen gleich die Partition durchführen, kannst du gleich beim anlegen der Punkte die Nummer ermittel, indem du abfragst welcher nun der Letzte in der Liste ist. Diese Nummer legst du ab und verwendest sie später (bei mir die Variable dp). Beispiel:
Code:
p = mdb.models['Model-1'].parts['Part-1'] p.DatumPointByCoordinate(coords=(0.0, 0.0, 0.0)) dp1=p.datums.keys()[-1]
p.DatumPointByCoordinate(coords=(0.0, 10.0, 0.0)) dp2=p.datums.keys()[-1] p.DatumPointByCoordinate(coords=(0.0, 0.0, 10.0)) dp3=p.datums.keys()[-1] volumen = p.cells[0]
p.PartitionCellByPlaneThreePoints(point1=p.datums[dp1], point2=p.datums[dp2], point3=p.datums[dp3], cells=volumen)
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SGB Mitglied Ing.
Beiträge: 14 Registriert: 20.07.2011 Abaqus/CAE Version 6.8-3
|
erstellt am: 30. Aug. 2011 17:04 <-- editieren / zitieren --> Unities abgeben:
Hallo Mustaine, danke für die Erläuterung. Kannst du mir bitte noch erklären was die 0 und die -1 bezogen auf die Zuordnung der cells bzw. der DP verwirken!! Ich verwende sie in einer Schleife in Excel VBA. und möchte ein Part gleichzeitig durch mehrere Cells immer Abstand von einem 1cm vertikal erzeugen xy = CVar(Schichtenaufbau.Controls("Textbox" & 50).Value) For yy = 1 To CVar(Schichtenaufbau.Controls("Textbox" & wert + 1).Value) / 10 - 1 Print #intFilenumber, "p=mdb.models['Strassenaufbau'].parts['" & CVar(Schichtenaufbau.Controls("Textbox" & 1).Text) & "']" Print #intFilenumber, "p.DatumPointByCoordinate(coords=(0.0, " & intsum + (10 * yy) & ".0, 0.0))" Print #intFilenumber, "dp1=p.datums.keys()[-1]" Print #intFilenumber, "" Print #intFilenumber, "p.DatumPointByCoordinate(coords=(" & xy & ".0, " & intsum + (10 * yy) & ".0, " & xy & ".0))" Print #intFilenumber, "dp2=p.datums.keys()[-1]" Print #intFilenumber, "" Print #intFilenumber, "p.DatumPointByCoordinate(coords=(" & xy & ".0, " & intsum + (10 * yy) & ".0, 0.0))" Print #intFilenumber, "dp3=p.datums.keys()[-1]" Print #intFilenumber, "" Print #intFilenumber, "volumen = p.cells[0]" Print #intFilenumber, "p.PartitionCellByPlaneThreePoints(point1=p.datums[dp1], point2=p.datums[dp2], point3=p.datums[dp3], cells=volumen)" Print #intFilenumber, "" Print #intFilenumber, "p.PartitionCellByPlaneThreePoints[point1=(0.0, " & intsum + (10 * yy) & ".0, 0.0), point2=(" & xy & ".0, " & intsum + (10 * yy) & ".0, " & xy & ".0), point3=(" & xy & ".0, " & intsum + (10 * yy) & ".0, 0.0]" Print #intFilenumber, "" Next yy
Danke SGB
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SGB Mitglied Ing.
Beiträge: 14 Registriert: 20.07.2011 Abaqus/CAE Version 6.8-3
|
erstellt am: 30. Aug. 2011 17:35 <-- editieren / zitieren --> Unities abgeben:
Hallo Mustaine, Ich habs jetzt umgesetzt mit dem folgenden Code: p=mdb.models['Strassenaufbau'].parts['sd'] p.DatumPointByCoordinate(coords=(0.0, 80.0, 0.0)) dp2 =p.datums.keys()[-1] p.DatumPointByCoordinate(coords=(2000.0, 80.0, 2000.0)) dp201 =p.datums.keys()[-1] p.DatumPointByCoordinate(coords=(2000.0, 80.0, 0.0)) dp401 =p.datums.keys()[-1] volumen = p.cells[0] p.PartitionCellByPlaneThreePoints(point1=p.datums[dp2], point2=p.datums[dp201], point3=p.datums[dp401], cells=volumen) Es kommt dann die Fehlermeldung: Feature creation failed!!
Kannst du mir das irgendwie bedeuten? Danke SGB 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: 31. Aug. 2011 17:49 <-- editieren / zitieren --> Unities abgeben: Nur für SGB
|
SGB Mitglied Ing.
Beiträge: 14 Registriert: 20.07.2011 Abaqus/CAE Version 6.8-3
|
erstellt am: 31. Aug. 2011 18:20 <-- editieren / zitieren --> Unities abgeben:
Hallo, habs gefunden, war nicht mehr im part!! Kannst du mir aber noch sagen, was die [0] bei volumen=p.cells[0] bedeutet!! Dasselbe auch bei keys()[-1] die [-1]!!! Ich möchte in unterschiedlichen Parts Partition mit dem code von dir erzeugen!!! Wie kann ich diese Cellen dann ansprechen?? Ich möchte dann diesen Partitionen jeweils ein Material zu weisen?? Alles per skript automatisiert!! Danke SGB [Diese Nachricht wurde von SGB am 31. Aug. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SGB Mitglied Ing.
Beiträge: 14 Registriert: 20.07.2011 Abaqus/CAE Version 6.8-3
|
erstellt am: 01. Sep. 2011 09:56 <-- editieren / zitieren --> Unities abgeben:
Ich habe jetzt noch ein Problem mehr!! der code von gestern: p=mdb.models['Strassenaufbau'].parts['ad'] p.DatumPointByCoordinate(coords=(0.0, 30.0, 0.0)) dp3 =p.datums.keys()[-1] p.DatumPointByCoordinate(coords=(2000.0, 30.0, 2000.0)) dp203 =p.datums.keys()[-1] p.DatumPointByCoordinate(coords=(2000.0, 30.0, 0.0)) dp403 =p.datums.keys()[-1] volumen = p.cells[0] p.PartitionCellByPlaneThreePoints(point1=p.datums[dp3], point2=p.datums[dp203], point3=p.datums[dp403], cells=volumen) und von heute: p=mdb.models['Strassenaufbau'].parts['ad'] p.DatumPointByCoordinate(coords=(0.0, 30.0, 0.0)) dp3 =p.datums.keys()[-1] p.DatumPointByCoordinate(coords=(2000.0, 30.0, 2000.0)) dp203 =p.datums.keys()[-1] p.DatumPointByCoordinate(coords=(2000.0, 30.0, 0.0)) dp403 =p.datums.keys()[-1] volumen = p.cells[0] p.PartitionCellByPlaneThreePoints(point1=p.datums[dp3], point2=p.datums[dp203], point3=p.datums[dp403], cells=volumen) Der obere funktioniert, aber der untere nicht!!
Siehst du einen Unterschied?? MfG SGB
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: 01. Sep. 2011 14:46 <-- editieren / zitieren --> Unities abgeben: Nur für SGB
Zitat: Original erstellt von SGB: Hallo,habs gefunden, war nicht mehr im part!! Kannst du mir aber noch sagen, was die [0] bei volumen=p.cells[0] bedeutet!!
Die Cellen eines Parts stehen in einer Liste. Mit cells[0] wird einfach auf den ersten Eintrag der Liste zurückgegriffen. Wenn du mehrere Cellen hast und möchtest eine bestimmte ansprechen, musst du dir überlegen wie du ermittelst welche Celle es sein soll. Gib mal in CAE ein "print mdb.models['Model-1'].parts['Part-1'].cells[0]", dann siehst du was Cellen für Eigenschaften haben. Mit "pointOn" könnte man z.B. prüfen wo eine Celle liegt. Außerdem gibt es noch Methoden wie getSize(). Siehe Scripting Reference Manual 7.1 Cell object
Zitat: Original erstellt von SGB: Dasselbe auch bei keys()[-1] die [-1]!!!
Datum Points stehen in einer Liste bzw. Dictionary. Mit keys()[-1] holt man sich den momentan letzten Schlüssel, da ja neue Datum Points am Ende angehangen werden. Zitat: Original erstellt von SGB: Ich möchte in unterschiedlichen Parts Partition mit dem code von dir erzeugen!!!Wie kann ich diese Cellen dann ansprechen?? Ich möchte dann diesen Partitionen jeweils ein Material zu weisen?? Alles per skript automatisiert!! Danke SGB [Diese Nachricht wurde von SGB am 31. Aug. 2011 editiert.]
Wie man mit Cellen arbeitet ist oben kurz erklärt.
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: 01. Sep. 2011 14:47 <-- editieren / zitieren --> Unities abgeben: Nur für SGB
Zitat: Original erstellt von SGB: Ich habe jetzt noch ein Problem mehr!!der code von gestern: p=mdb.models['Strassenaufbau'].parts['ad'] p.DatumPointByCoordinate(coords=(0.0, 30.0, 0.0)) dp3 =p.datums.keys()[-1] p.DatumPointByCoordinate(coords=(2000.0, 30.0, 2000.0)) dp203 =p.datums.keys()[-1] p.DatumPointByCoordinate(coords=(2000.0, 30.0, 0.0)) dp403 =p.datums.keys()[-1] volumen = p.cells[0] p.PartitionCellByPlaneThreePoints(point1=p.datums[dp3], point2=p.datums[dp203], point3=p.datums[dp403], cells=volumen) und von heute: p=mdb.models['Strassenaufbau'].parts['ad'] p.DatumPointByCoordinate(coords=(0.0, 30.0, 0.0)) dp3 =p.datums.keys()[-1] p.DatumPointByCoordinate(coords=(2000.0, 30.0, 2000.0)) dp203 =p.datums.keys()[-1] p.DatumPointByCoordinate(coords=(2000.0, 30.0, 0.0)) dp403 =p.datums.keys()[-1] volumen = p.cells[0] p.PartitionCellByPlaneThreePoints(point1=p.datums[dp3], point2=p.datums[dp203], point3=p.datums[dp403], cells=volumen) Der obere funktioniert, aber der untere nicht!!
Siehst du einen Unterschied?? MfG SGB
Wenn es im Code keinen Unterschied gibt, muss es logischerweise einen in der verwendeten CAE-Datei bzw. dem Modell geben. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SGB Mitglied Ing.
Beiträge: 14 Registriert: 20.07.2011 Abaqus/CAE Version 6.8-3
|
erstellt am: 01. Sep. 2011 16:45 <-- editieren / zitieren --> Unities abgeben:
Hallo Mustaine, danke für deine Erläuterungen auf meine Fragen. Hab das Skript ma angehangen. Wenn ich über den Befehl den du mir gegeben hast mehrere Zellen erstellen will, (wobei sich immer die y-Richtung (Höhe) um 10 einheiten erhöht) muss ich den cellen doch gleich ein wert zuweisen!? Wie kann ich so was machen? SGB [Diese Nachricht wurde von SGB am 01. Sep. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SGB Mitglied Ing.
Beiträge: 14 Registriert: 20.07.2011 Abaqus/CAE Version 6.8-3
|
erstellt am: 01. Sep. 2011 19:45 <-- editieren / zitieren --> Unities abgeben:
Hallo Mustaine, ich habe nochmal nen bisschen rum probiert: p=mdb.models['Strassenaufbau'].parts['sd'] p.DatumPointByCoordinate(coords=(0.0, 10.0, 0.0)) dp1 =p.datums.keys()[-1] p.DatumPointByCoordinate(coords=(2000.0, 10.0, 2000.0)) dp201 =p.datums.keys()[-1] p.DatumPointByCoordinate(coords=(2000.0, 10.0, 0.0)) dp401 =p.datums.keys()[-1] c = p.cells pickedCells = c.getSequenceFromMask(mask=('[#1 ]', ), ) p.PartitionCellByPlaneThreePoints(point1=p.datums[dp1], point2=p.datums[dp201], point3=p.datums[dp401], cells=pickedCells) p=mdb.models['Strassenaufbau'].parts['sd'] p.DatumPointByCoordinate(coords=(0.0, 20.0, 0.0)) dp2 =p.datums.keys()[-1] p.DatumPointByCoordinate(coords=(2000.0, 20.0, 2000.0)) dp202 =p.datums.keys()[-1] p.DatumPointByCoordinate(coords=(2000.0, 20.0, 0.0)) dp402 =p.datums.keys()[-1] c = p.cells pickedCells = c.getSequenceFromMask(mask=('[#2 ]', ), ) p.PartitionCellByPlaneThreePoints(point1=p.datums[dp2], point2=p.datums[dp202], point3=p.datums[dp402], cells=pickedCells) p=mdb.models['Strassenaufbau'].parts['sd'] p.DatumPointByCoordinate(coords=(0.0, 30.0, 0.0)) dp3 =p.datums.keys()[-1] p.DatumPointByCoordinate(coords=(2000.0, 30.0, 2000.0)) dp203 =p.datums.keys()[-1] p.DatumPointByCoordinate(coords=(2000.0, 30.0, 0.0)) dp403 =p.datums.keys()[-1] c = p.cells pickedCells = c.getSequenceFromMask(mask=('[#3 ]', ), ) p.PartitionCellByPlaneThreePoints(point1=p.datums[dp3], point2=p.datums[dp203], point3=p.datums[dp403], cells=pickedCells) Mit diesem Code kann ich genau 3 Zellen erstellen übereinander. Ab der vierten kommt wieder die Fehlermeldung von oben!! Das Part ist 80 Einheiten hoch!! Daher müsste ich also 7 Partitionen vornehmen!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SGB Mitglied Ing.
Beiträge: 14 Registriert: 20.07.2011 Abaqus/CAE Version 6.8-3
|
erstellt am: 02. Sep. 2011 12:19 <-- editieren / zitieren --> Unities abgeben:
Hallo Mustaine, kann man den index der Cellen in Abaqus definieren? print mdb.models['Strassenaufbau'].parts['sd'].cells[0] ({'index': 0, 'instanceName': None, 'pointOn': ((2000.0, 26.666667, 1333.333333),)}) >>> print mdb.models['Strassenaufbau'].parts['sd'].cells[1] ({'index': 1, 'instanceName': None, 'pointOn': ((2000.0, 46.666667, 666.666667),)}) >>> print mdb.models['Strassenaufbau'].parts['sd'].cells[2] ({'index': 2, 'instanceName': None, 'pointOn': ((0.0, 6.666667, 666.666667),)})
[Diese Nachricht wurde von SGB am 02. Sep. 2011 editiert.] 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: 02. Sep. 2011 13:45 <-- editieren / zitieren --> Unities abgeben: Nur für SGB
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|