Autor
|
Thema: ShellLoft mit Skript erzeugen (1839 mal gelesen)
|
Chrichri Mitglied Student
Beiträge: 14 Registriert: 27.02.2009 Windows XP Catia V5 R18 Abaqus 6.7
|
erstellt am: 26. Mrz. 2009 18:43 <-- editieren / zitieren --> Unities abgeben:
Hallo ! Bin grade dabei ein Skript zu schreiben welches mir Koordinaten von ca. 1000 Punkten aus einer CSV Datei einliesst, daraus DatumPoints erstellt, diese mit WirePolyLines verbindet und in einem dritten Schritt soll daraus ein ShellLoft generiert werden. Bis auf den letzten Schritt hat auch alles geklappt. Mein konkretes Problem: Der Befehl lautet mdb.modellname.partname.ShellLoft(loftsections) und ich weiß nicht in welcher Form die loftsections übergeben werden müssen, die Sections sind in meinem Fall die WirePolyLines. So hab ichs versucht und so hats nicht geklappt: section1 = mdb.modellname.partname.WirePolyLine((die Punkte der Linie 1)) section2 = mdb.modellname.partname.WirePolyLine((die Punkte der Linie 2)) mdb.modellname.partname.ShellLoft((section1, section2)) Weiß jemand wo der Fehler liegt bzw. wie mans richtig macht ? Merci ! Viele Grüsse Christoph Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
carsten1983 Mitglied Doktorand
Beiträge: 125 Registriert: 11.10.2007
|
erstellt am: 27. Mrz. 2009 08:05 <-- editieren / zitieren --> Unities abgeben: Nur für Chrichri
Was ist denn die Fehlermeldung? Geht es Methodisch nicht, oder wird nur der (formell richtige) Input moniert? Laut Hilfe sollte hier eine 'Sequence of Sequences of Edges' rein und keine Punkte. Code: sec1=mdb.model['Model-1'].parts['Part-1'].edges[0:3] sec2=mdb.model['Model-1'].parts['Part-1'].edges[3:5] Seq_of_seq=(sec1,sec2) mdb.model['Model-1'].parts['Part-1'].ShellLoft(loftsections=a)
Das wirft bei mir die Meldung aus, dass die Lofterzeugung failed (weil meine Edges nicht den Anforderungen entsprechen). Aber so geht es scheinbar. In deiner Definition von sec1,sec2 steht da: Code: type(sec1)=feature
Dort sollte aber wie gesagt eine Sequence of Edges sein. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chrichri Mitglied Student
Beiträge: 14 Registriert: 27.02.2009 Windows XP Catia V5 R18 Abaqus 6.7
|
erstellt am: 30. Mrz. 2009 08:59 <-- editieren / zitieren --> Unities abgeben:
Hallo Carsten ! In den nächsten Tagen kann ich die genaue Fehlermeldung noch posten. Über die GUI kann ich mit den PolyWireLines die ShellLoft erzeugen, von daher wunderts mich dass es über das Skript nicht geht. Ich hab leider nirgendwo in der Hilfe gefunden was für Abaqus genau ein "edge" ist. Gibts vielleicht einen Befehl der meine PolyWireLines in eine Sequence of edges umwandelt ? ( Sowas wie bei Zahlen von Integer nach Float ? ) Gruss Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
carsten1983 Mitglied Doktorand
Beiträge: 125 Registriert: 11.10.2007
|
erstellt am: 30. Mrz. 2009 09:24 <-- editieren / zitieren --> Unities abgeben: Nur für Chrichri
Du könntest dir mithilfe der Punkte doch die edges mit Code:
edgePunkt=(Punkt2-Punkt1)/2.0 mdb.model['Model-1'].parts['Part-1'].edges.findAt(edgePunkt)
alle Edges raussuchen und dir damit selbst eine solche Liste der Edges zusammenbasteln.Edit: Punkt1 und Punkt2 sind jeweils die Punkte einer Edge. Die kennst du ja, oder? [Diese Nachricht wurde von carsten1983 am 30. Mrz. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chrichri Mitglied Student
Beiträge: 14 Registriert: 27.02.2009 Windows XP Catia V5 R18 Abaqus 6.7
|
erstellt am: 31. Mrz. 2009 17:53 <-- editieren / zitieren --> Unities abgeben:
So, ich hab jetzt ne Lösung gefunden wie funktioniert: Code:
# Skript initialisierenfrom abaqus import * import part # Beispiel Punkte a = (0,0,0) b = (0,5,0) c = (0,10,0) d = (5,0,0) e = (5,5,0) f = (5,10,0) print a,b,c,d,e,f mdb.Model(name='Test')
# Parts erstellen mdb.models['Test'].Part(name='Teil') p1 = mdb.models['Test'].parts['Teil'] # Linien erzeugen p1.WirePolyLine((a,b,c)) p1.WirePolyLine((d,e,f)) # WirePolyLines in Edges umwandeln, schaut nicht grade schön aus, hab aber keine andere Lösung gefunden edge1 = p1.edges.findAt(((a[0]+b[0])/2.0,(a[1]+b[1])/2.0,(a[2]+b[2])/2.0)) edge2 = p1.edges.findAt(((b[0]+c[0])/2.0,(b[1]+c[1])/2.0,(b[2]+c[2])/2.0)) edge3 = p1.edges.findAt(((d[0]+e[0])/2.0,(d[1]+e[1])/2.0,(d[2]+e[2])/2.0)) edge4 = p1.edges.findAt(((e[0]+f[0])/2.0,(e[1]+f[1])/2.0,(e[2]+f[2])/2.0)) # Die Fläche erzeugen p1.ShellLoft(((edge1,edge2),(edge3,edge4))) # Es funktioniert leider nicht die Teile der Fläche einzeln zu erzeugen, also # p1.ShellLoft(((edge1),(edge3))) # p1.ShellLoft(((edge2),(edge4))) # hat bei mir die Fehlermeldung "Loft feature section definition is invalid" hervorgerufen
Mein Fehler lag bei der Übergabe der Edges an die ShellLoft Funktion, die .edges.findAt(coordinates) schein die einzige Funktion mit einem edge object als Rückgabewert. Edit: Es ist wichtig 2.0 zu schreiben, damit als Ausgabewert der Division ein Float und kein Integer ausgegeben wird. Vielen Dank für die Hilfe ! Gruss Chrichri [Diese Nachricht wurde von Chrichri am 31. Mrz. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dabauer82 Mitglied
Beiträge: 121 Registriert: 22.11.2007 Pro/E WiFi3 M050 Win 7 ABQ 6-14
|
erstellt am: 16. Jun. 2011 13:19 <-- editieren / zitieren --> Unities abgeben: Nur für Chrichri
Ich habe es ohne diese Umrechnung nur über p1.edges gemacht: Code:
e1 = Punktewolke.edges Punktewolke.ShellLoft(loftsections=((e1[1], ), (e1[2], ), (e1[0], ), (e1[3], )), startCondition=NONE,endCondition=NONE)
Punktewolke enthält dabei Splines die per WireSpline erzeugt wurden... Grüße, dabauer Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|