| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Sketch3D extrudieren (1018 mal gelesen)
|
Crash_Master Mitglied Fachinformatiker
Beiträge: 32 Registriert: 06.10.2003
|
erstellt am: 07. Okt. 2003 10:43 <-- editieren / zitieren --> Unities abgeben:
Hi, in meinem anderen Beitrag: http://ww3.cad.de/foren/ubb/Forum258/HTML/000068.shtml wollte ich wissen wie man über VBA eine Linie zeichnen kann. Mit folgendem Code zeichne ich jetzt eine Form. Ich benutze doch das erste Beispiel von Daywa1k3er da ich ja 3 Koordinaten habe (x, y und z). Code:
Public Function drawLine(x_start As Double, y_start As Double, z_start As Double, x_end As Double, y_end As Double, z_end As Double) Dim oDoc As PartDocument Set oDoc = ThisApplication.ActiveDocumentDim oCompDef As PartComponentDefinition Set oCompDef = oDoc.ComponentDefinition Dim oTG As TransientGeometry Set oTG = ThisApplication.TransientGeometry Dim oSketch3d As Sketch3D Set oSketch3d = oCompDef.Sketches3D.Add
Dim oPoint1, oPoint2 As WorkPoint Set oPoint1 = oCompDef.WorkPoints.AddFixed(oTG.CreatePoint(x_start, y_start, z_start)) Set oPoint2 = oCompDef.WorkPoints.AddFixed(oTG.CreatePoint(x_end, y_end, z_end)) Dim oLine3d As SketchLine3D Set oLine3d = oSketch3d.SketchLines3D.AddByTwoPoints(oPoint1, oPoint2) End Function Public Sub MainProgram() ' Operation 1 drawLine CDbl(Replace("9.99999000000000", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")), CDbl(Replace("9.99999000000000", ".", ",")), CDbl(Replace("1.86666666666667", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")) drawLine CDbl(Replace("9.99999000000000", ".", ",")), CDbl(Replace("1.86666666666667", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")), CDbl(Replace("7.99999500000000", ".", ",")), CDbl(Replace("5.04000000000000", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")) drawLine CDbl(Replace("7.99999500000000", ".", ",")), CDbl(Replace("5.04000000000000", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")), CDbl(Replace("1.99999500000000", ".", ",")), CDbl(Replace("5.04000000000000", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")) drawLine CDbl(Replace("1.99999500000000", ".", ",")), CDbl(Replace("5.04000000000000", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")), CDbl(Replace("1.86666666666667", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")) drawLine CDbl(Replace("0.00000000000000", ".", ",")), CDbl(Replace("1.86666666666667", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")), CDbl(Replace("-0.00000000000000", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")) drawLine CDbl(Replace("0.00000000000000", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")), CDbl(Replace("9.99999000000000", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")) ThisApplication.ActiveView.Update End Sub
Wenn Ihr die Sub MainProgram ausführt erhaltet ihr eine Form in der 3D Ansicht. Wenn ich diese jetzt extrudieren will, bekomme ich die Meldung: "Keine nicht einbezogenen sichtbaren Skizzen vorhanden". Um diese Figur jetzt zu extrudieren, müßte ich in der 2D Skizze noch Linien zeichnen. Welche Möglichkeit hab ich jetzt meine Figur zu extrudieren?? Ciao Crash
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Moderator Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Alienware m17x, Win7, Inventor2012
|
erstellt am: 07. Okt. 2003 11:36 <-- editieren / zitieren --> Unities abgeben: Nur für Crash_Master
Code:
Public Sub MainProgram() ' Operation 1 drawLine CDbl(Replace("9.99999000000000", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")), CDbl(Replace("9.99999000000000", ".", ",")), CDbl(Replace("1.86666666666667", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")) drawLine CDbl(Replace("9.99999000000000", ".", ",")), CDbl(Replace("1.86666666666667", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")), CDbl(Replace("7.99999500000000", ".", ",")), CDbl(Replace("5.04000000000000", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")) drawLine CDbl(Replace("7.99999500000000", ".", ",")), CDbl(Replace("5.04000000000000", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")), CDbl(Replace("1.99999500000000", ".", ",")), CDbl(Replace("5.04000000000000", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")) drawLine CDbl(Replace("1.99999500000000", ".", ",")), CDbl(Replace("5.04000000000000", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")), CDbl(Replace("1.86666666666667", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")) drawLine CDbl(Replace("0.00000000000000", ".", ",")), CDbl(Replace("1.86666666666667", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")), CDbl(Replace("-0.00000000000000", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")) drawLine CDbl(Replace("0.00000000000000", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")), CDbl(Replace("9.99999000000000", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")), CDbl(Replace("0.00000000000000", ".", ",")) ThisApplication.ActiveView.UpdateEnd Sub
Jetzt wird mir die Bedeutung deines Nicks klar Ich habe heute nicht viel Zeit, aber trotzdem würde mich interessieren:
- Wo hast du bitte schön die Werte her ?!?! 0.000000000000, -0.000000000, ...
- Warum schreibst du erst "." rein und ersetzt es dann durch "," ?
- Warum 3D wenn du es auf der XY AE zeichnest, und dein Z-Wert ist immer 0 (0.00000000000000) ?
Also wenn du es unbedingt in 3D machen willst, must du eine Skizze auf die Ebene (XY) daruf legen (probier es erst per Hand), danach alle Linien darauf projezieren, und die Skizze beenden. Danach dürfte die Extrusion kein Problem mehr sein. Per Code die Skizze legen findest du in der Hilfe (ComponentDefinition.Sketches.Add.... ) Die Linien würde ich in ein Array speichern und dann in einer Schleife projezieren. usw. Wenn du aber in 2D (keine Z Werte) arbeitest ist es viel leichter. Schau dir mal dazu folgendes Beispiel: Code:
Public Sub DrawBlockWithPocket() ' Create a new part document, using the default part template. Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.Documents.Add(kPartDocumentObject, _ ThisApplication.FileManager.GetTemplateFile(kPartDocumentObject)) ' Set a reference to the component definition. Dim oCompDef As PartComponentDefinition Set oCompDef = oPartDoc.ComponentDefinition ' Create a new sketch on the X-Y work plane. Since it's being created on ' one of the base workplanes we know the orientation it will be created in ' and don't need to worry about controlling it. Because of this we also ' know the origin of the sketch plane will be at (0,0,0) in model space. Dim oSketch As PlanarSketch Set oSketch = oCompDef.Sketches.Add(oCompDef.WorkPlanes(3)) ' Set a reference to the transient geometry object. Dim oTransGeom As TransientGeometry Set oTransGeom = ThisApplication.TransientGeometry ' Draw a 4cm x 3cm rectangle with the corner at (0,0) Dim oRectangleLines As SketchEntitiesEnumerator Set oRectangleLines = oSketch.SketchLines.AddAsTwoPointRectangle( _ oTransGeom.CreatePoint2d(0, 0), _ oTransGeom.CreatePoint2d(4, 3)) ' Create a profile. Dim oProfile As Profile Set oProfile = oSketch.Profiles.AddForSolid ' Create a base extrusion 1cm thick. Dim oExtrude As ExtrudeFeature Set oExtrude = oCompDef.Features.ExtrudeFeatures.AddByDistanceExtent( _ oProfile, 1, kNegativeExtentDirection, kJoinOperation) ' Get the top face of the extrusion to use for creating the new sketch. Dim oFrontFace As Face Set oFrontFace = oExtrude.StartFaces.Item(1) ' Create a new sketch on this face, but use the method that allows you to ' control the orientation and orgin of the new sketch. Set oSketch = oCompDef.Sketches.AddWithOrientation(oFrontFace, _ oCompDef.WorkAxes.Item(1), True, True, oCompDef.WorkPoints(1)) ' Determine where in sketch space the point (0.5,0.5,0) is. Dim oCorner As Point2d Set oCorner = oSketch.ModelToSketchSpace(oTransGeom.CreatePoint(0.5, 0.5, 0)) ' Create the interior 3cm x 2cm rectangle for the pocket. Set oRectangleLines = oSketch.SketchLines.AddAsTwoPointRectangle( _ oCorner, oTransGeom.CreatePoint2d(oCorner.X + 3, oCorner.Y + 2)) ' Create a profile. Set oProfile = oSketch.Profiles.AddForSolid ' Create a pocket .25 cm deep. Set oExtrude = oCompDef.Features.ExtrudeFeatures.AddByDistanceExtent( _ oProfile, 0.25, kNegativeExtentDirection, kCutOperation) End Sub
Macht genau das was du brauchst. Viel Glück !
------------------ Grüße daywa1k3r Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Crash_Master Mitglied Fachinformatiker
Beiträge: 32 Registriert: 06.10.2003
|
erstellt am: 07. Okt. 2003 12:17 <-- editieren / zitieren --> Unities abgeben:
Gell, der Name passt zu mir. *lach* Geh mal auf Powerparts.de, dort auch CAD Bauteilsuche oder sowas. Da kommst du dann auf Powerparts on Web der Fa. Web2Cad. Such dir ein nettes Teil aus und lass dir ein XML File generieren, dann weißt du wie ich auf die Werte komme. Das mit den Punkten usw. ist noch nicht wirklich gut gelöst, aber für den Anfang wollte ich es eben mal ausprobieren wie es überhaupt geht mit der Umwandlung von XML in VBA Code. Deswegen die komische Schreibweise... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Charly Setter Ehrenmitglied V.I.P. h.c.
Beiträge: 11977 Registriert: 28.05.2002 Trau keiner Diva unter SP2....
|
erstellt am: 07. Okt. 2003 23:25 <-- editieren / zitieren --> Unities abgeben: Nur für Crash_Master
Hi Crash Master Ich weiß nicht, ob ich Dir auf die Füße trete, aber ist Dir schon aufgefallen, das Du 3D-Skizzen nicht extrudieren kannst. Du mußt immer eine 2D-Skizze als Grundlage für die Grundfunktionen (Extrudieren, Drehen, Bohren) definieren. Es ist wunderbar, ein Drahtmodell im Raum zu plazieren. Aber was willst Du damit anfangen ? lg Mathias lg Mathias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Crash_Master Mitglied Fachinformatiker
Beiträge: 32 Registriert: 06.10.2003
|
erstellt am: 08. Okt. 2003 07:53 <-- editieren / zitieren --> Unities abgeben:
Nein, du trittst mir damit nicht auf die Füße. Das mit dem 3D und 2D hab ich gestern auch noch gemerkt. Ich hab leider noch ziemlich wenig Ahnung vom Inventor. Das darf ich mir erst alles nochh aneignen, damit ich überhaupt mal weiß wie und wo ich dann nachschauen muß für die VBA-Befehle. Naja, mal schauen was raus kommt bei meinem ganzen Projekt. Muß mich heute eh noch mal mit meinem Chef zusammensetzen und das ganze mit den z-Koordinaten besprechen. Da sie leider nicht überall 0 sind muß ich erst mal schauen ob das überhaupt so lösbar ist wie er sich das vorstellt. Trotzdem danke Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|