Autor
|
Thema: Bohrungen mit Makro (1495 mal gelesen)
|
Dougger Mitglied
Beiträge: 9 Registriert: 05.03.2019 CATIA V5 R21 Windows 10
|
erstellt am: 05. Mrz. 2019 09:22 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, mein Problem ist, dass ich ca. 3000 Bohrungen in einem geschwungenem Rohrverlauf (siehe Bild) unterbringen muss. Mit Pattern bzw. User-Pattern komme ich hier also nicht weiter. Ich denke, dass hier ein Makro Abhilfe schaffen kann. Nur habe ich leider keine ausreichenden Kenntnisse hierfür. Das Makro soll Bohrungen mit allen Punkten innerhalb eines Geo-Sets auf eine selektierte Fläche bringen. Bohrungsdurchmesser: 4,2mm Tiefe: Up to next oder alternativ 2mm Bin für jeden Lösungsvorschlag dankbar!!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
Beiträge: 695 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 05. Mrz. 2019 10:08 <-- editieren / zitieren --> Unities abgeben: Nur für Dougger
Hallo, ich denke das es mit einem Makro möglich ist das ganz oder zumindest teilw. zu automatisieren. Ohne Makrokenntnisse wird es aber sehr schwierig da hier wahrscheinlich einige Hilfselemente erstellt werden müssen. Ein fertiges Makro für genau DEN Anwendungsfall wird wohl kaum zu finden sein. Was genau wäre deine Erwartung? Gruß Randle ------------------ Wer für nichts steht, fällt für alles! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dougger Mitglied
Beiträge: 9 Registriert: 05.03.2019 CATIA V5 R21 Windows 10
|
erstellt am: 05. Mrz. 2019 10:48 <-- editieren / zitieren --> Unities abgeben:
Hallo Randle, danke für die schnelle Antwort. Meine optimalste Erwartung wäre natürlich, dass jemand ein fertiges Makro aus der Schublade ziehen kann. Aber ich weiß natürlich auch, dass das eher unwahrscheinlich ist. Falls du aber die Erwartung an das Makro meinst dann wäre sie wie folgt: 1. Man selektiert vorher... a) das Geo-Set mit den Punkten oder b) die Punkte selbst 2. Makro ausführen a) Makro soll nach Fläche des Körpers, welche durchbohrt werden soll, fragen Dabei sind die Bohrungen selbst alle identisch: Bohrungsdurchmesser: 4,2mm Tiefe: 2mm Ich hoffe ich konnte mich genau genug ausdrücken. Gruß, Dougger
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
Beiträge: 695 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 05. Mrz. 2019 11:22 <-- editieren / zitieren --> Unities abgeben: Nur für Dougger
Hallo, da ich deine vorhandene Geometrie nicht kenne würde ich vermuten das man zur Vorbereitung sich mittels Extract/Join eine Fläche (also EIN Element) erstellen muss. Weiter ist die Frage ob die Punkte alle AUF der Fläche liegen oder ob diese erst noch auf die Fläche gebracht werden müssen. Ich habe mal ein bestehendes Makro ein wenig angepasst das evtl. als Grundgerüst dienen kann. Code:
Sub CATMain()Dim PartDoc As PartDocument On Error Resume Next Set PartDoc = CATIA.ActiveDocument If Err.Number <> 0 Then Exit Sub On Error Goto 0 Dim osel 'As Selection Set osel = CATIA.ActiveDocument.Selection osel.Clear Dim oSelResult As String Dim aFilter(0) aFilter(0) = "HybridBody" oSelResult = osel.SelectElement2(aFilter, "GeoSet auswählen", False) 'Hier müsste noch die Selektion der Fläche rein. If oSelResult = "Normal" Then Dim HB As HybridBody Set HB = osel.Item(1).Value Dim oGeo As HybridShape Dim oPoint 'As Point For Each oPoint In HB.HybridShapes 'hier müssten die Hilselemente (Linie für die Ausrichtung der Bohrung) und die eigentlich Bohrung erzeugt werden. Next PartDoc.Part.Update Else Exit Sub End If End If End Sub
Evtl. mag ein Kollege hier im Forum noch einen Teil zu beisteuern. Was komplett fertiges wirst du hier aber wahrscheinlich nicht bekommen, dazu sind hier auch noch zu viele Fragen offen und das kostet alles Zeit. Viel Erfolg noch und Gruß Randle ------------------ Wer für nichts steht, fällt für alles!
[Diese Nachricht wurde von Randle am 05. Mrz. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dougger Mitglied
Beiträge: 9 Registriert: 05.03.2019 CATIA V5 R21 Windows 10
|
erstellt am: 05. Mrz. 2019 11:31 <-- editieren / zitieren --> Unities abgeben:
Hallo, danke erstmal für deinen Makro Entwurf. :-) Zitat: da ich deine vorhandene Geometrie nicht kenne würde ich vermuten das man zur Vorbereitung sich mittels Extract/Join eine Fläche (also EIN Element) erstellen muss.
Die Flächen die man für den Bohrbefehl benötigt könnte man Joinen. Es würde aber auch gehen, dass ich die Bohrungspunkte nach den Flächen vorher sortieren kann. Zitat: Weiter ist die Frage ob die Punkte alle AUF der Fläche liegen oder ob diese erst noch auf die Fläche gebracht werden müssen.
Alle Punkte befinden sich bereits auf der zu bohrenden Fläche. Es muss also nichts projeziert werden. Gruß, Sven Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 05. Mrz. 2019 11:44 <-- editieren / zitieren --> Unities abgeben: Nur für Dougger
Servus Sven Wenn ich das Makro programmieren wollte, würde ich mir mindestens 4 Stunden Zeit einplanen bis das im groben funktioniert (und ich kenne mich schon etwas aus). Meiner Ansicht nach hast du jetzt folgende Möglichkeiten: - dich in die Materien einzuarbeiten (Schulungen/Bücher/...) und das Problem versuchen selbst zu lösen. Fragen zu Teilproblemen kannst du gerne hier stellen - dich an einen Dienstleister wenden der dir das programmiert - schauen ob es nicht so ein Tool/Makro zum kaufen gibt - hoffen das sich hier jemand im Forum erbarmt und in seiner Freizeit das für dich programmiert - die tausenden Bohrungen manuell erzeugt Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 05. Mrz. 2019 11:50 <-- editieren / zitieren --> Unities abgeben: Nur für Dougger
Hallo Dougger, zur Ergänzung zu Bernd´s Beitrag.
Zitat: - die tausenden Bohrungen manuell erzeugt
Einen Powercopy würde das manuelle erzeugen der Löcher um viele Klicks reduzieren. ------------------ Gruß Uwe Auch Catia ist nur ein Mensch! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
Beiträge: 695 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 05. Mrz. 2019 11:53 <-- editieren / zitieren --> Unities abgeben: Nur für Dougger
... was den Zeitaufwand angeht so kommt es ja auch darauf an: Muss es einmal funktionieren oder ist das ein immer wiederkehrender Anwendungsfall ... ------------------ Wer für nichts steht, fällt für alles! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dougger Mitglied
Beiträge: 9 Registriert: 05.03.2019 CATIA V5 R21 Windows 10
|
erstellt am: 05. Mrz. 2019 12:59 <-- editieren / zitieren --> Unities abgeben:
@ Bernd: Mir war bewusst, dass das Programmieren eines Makros viel Zeit in Anspruch nimmt. Daher hatte ich die Hoffnung auf ein fertiges Makro. Und es ist auch nicht meine Absicht, dass sich jemand nur für mich hinsetzt und los programmiert. @ Uwe: Ich arbeite zwar schon seit 7 Jahren mit Catia, aber ein Powercopy habe ich noch nie verwendet. Werde mich da mal schlau machen. @ Randle: Akut betrifft meine Anfrage vier Bauteile mit insegsamt ca. 10.000 Bohrungen. Aber in Zukunft wird es auch immer wieder solche Fälle geben. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 09. Mrz. 2019 13:50 <-- editieren / zitieren --> Unities abgeben: Nur für Dougger
Servus Ich hab mal ein Makro zusammengebastelt. Ist nur das grobe Gerüst und musst noch weiter optimiert und getestet werden: Code: Sub CATMain()Dim oPartDoc As PartDocument Dim oSelResult As String Dim oSel 'As Selection Dim aFilter(0) Dim oHybridBodyPoints as Hybridbody Dim oHybridBodyPlanes as Hybridbody Dim oRefReferenceSurface as Reference Dim oRefUpToSurface as Reference Dim oRefPoint as Reference Dim oRefPlane as Reference Dim oHybridShape as HybridShape Dim oHybridShapeFactory As Factory Dim oHybridShapePlaneTangent As HybridShapePlaneTangent Dim oShapeFactory As Factory Dim oHole As Hole 'Part geöffnet On Error Resume Next Set oPartDoc = CATIA.ActiveDocument If Err.Number <> 0 Then Exit Sub On Error Goto 0 Set oSel = oPartDoc.Selection oSel.Clear 'GeoSet wählen aFilter(0) = "HybridBody" oSelResult = oSel.SelectElement2(aFilter, "GeoSet mit den Punkten auswählen", False) If oSelResult <> "Normal" Then MsgBox "Kein GeoSet gewählt. Das Makro wird beendet." Exit Sub End If Set oHybridBodyPoints = osel.item2(1).Value 'Referenzfläche wählen aFilter(0) = "HybridShape" oSelResult = oSel.SelectElement2(aFilter, "Referenzfläche für die Bohrungen auswählen", False) If oSelResult <> "Normal" Then MsgBox "Keine Referenzfläche gewählt. Das Makro wird beendet." Exit Sub End If Set oRefReferenceSurface = osel.item2(1).Reference 'Referenzfläche wählen aFilter(0) = "HybridShape" oSelResult = oSel.SelectElement2(aFilter, "Bis-zu-Referenzfläche für die Bohrungen auswählen", False) If oSelResult <> "Normal" Then MsgBox "Keine Referenzfläche gewählt. Das Makro wird beendet." Exit Sub End If Set oRefUpToSurface = osel.item2(1).Reference 'Vorbereitungen Set oHybridShapeFactory = oPartDoc.Part.HybridShapeFactory Set oShapeFactory = oPartDoc.Part.ShapeFactory 'GeoSet für Ebenen anlegen Set oHybridBodyPlanes = oHybridBodyPoints.HybridBodies.Add() oHybridBodyPlanes.Name = "Tangential-Ebenen" 'Bohrungen in extra Körper erzeugen gibt je nach Krümmung der Referenzfläche Probleme 'Set oBody = oPartDoc.Part.Bodies.Add() 'oBody.Name = "Bohrungen" oPartDoc.Part.InWorkObject = oPartDoc.Part.Mainbody 'Schleife über die Punkte For Each oHybridShape In oHybridBodyPoints.HybridShapes if InStr(TypeName(oHybridShape),"HybridShapePoint") <> 0 then 'Tangential-Ebenen erzeugen Set oRefPoint = oPartDoc.Part.CreateReferenceFromObject(oHybridShape) Set oHybridShapePlaneTangent = oHybridShapeFactory.AddNewPlaneTangent(oRefReferenceSurface, oRefPoint) oHybridBodyPlanes.AppendHybridShape oHybridShapePlaneTangent oPartDoc.Part.UpdateObject oHybridShapePlaneTangent Set oRefPlane = oPartDoc.Part.CreateReferenceFromObject(oHybridShapePlaneTangent) 'Bohrung erzeugen Set oHole = oShapeFactory.AddNewHoleFromRefPoint(oRefPoint, oRefPlane, 10.000000) oHole.Type = catSimpleHole oHole.Reverse() oHole.AnchorMode = catExtremPointHoleAnchor oHole.BottomLimit.LimitMode = catUpToSurfaceLimit oHole.BottomLimit.LimitingElement = oRefUpToSurface oHole.BottomType = catTrimmedHoleBottom oPartDoc.Part.UpdateObject oHole End If next oPartDoc.Part.Update End Sub
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dougger Mitglied
Beiträge: 9 Registriert: 05.03.2019 CATIA V5 R21 Windows 10
|
erstellt am: 14. Mrz. 2019 17:02 <-- editieren / zitieren --> Unities abgeben:
Hallo nochmal! Danke für dein Makro. Ich habe vom Kollegen eines Kollegen ein Makro geschrieben bekommen welches auch genau das tut was es soll. Allerdings wird es immer langsamer, je mehr Bohrungen gesetzt sind. Kann man das Makro irgendwie beschleunigen bzw. optimieren? Hier das Makro: Code:
Sub CATMain()Set partDocument1 = CATIA.ActiveDocument Set part = partDocument1.Part Set hybridBodies1 = part.HybridBodies Dim InputObjectType (0) Dim InputObjectType2 (0) Dim InputObjectType3 (0) InputObjectType(0) = "HybridBody" InputObjectType2(0) = "Face" InputObjectType3(0) = "Body" Set oSel = CATIA.ActiveDocument.Selection oSel.Clear Set oSel2 = CATIA.ActiveDocument.Selection oSel2.Clear oSelResult = oSel.SelectElement3(InputObjectType,"Select geometrical set containing points", _ true,CATMultiSelTriggWhenSelPerf,false) set hybridbody1 = oSel.Item(1).Value Dim hybridShapes1 'As HybridShapes Set hybridShapes1 = hybridBody1.HybridShapes oSelResult2 = oSel2.SelectElement3(InputObjectType2,"Select face.", _ true,CATMultiSelTriggWhenSelPerf,false) Set reference2 = oSel2.Item(1).Reference
Dim DiaMm Dia = InputBox("Enter Hole Diameter in mm.") DiaMm = Dia Set oSelBody = CATIA.ActiveDocument.Selection oSelBody.Clear oSelResultBody = oSelBody.SelectElement3(InputObjectType3,"Select Body for Holes Feature creation.", _ true,CATMultiSelTriggWhenSelPerf,false) Set bodies1 = part.Bodies Set body1 = oSelBody.Item(1).Value Set shapes1 = body1.Shapes For s=1 to hybridShapes1.Count Dim hybridShapePointCoord1 'As HybridShape Dim reference1 'As Reference Set hybridShapePoint = hybridShapes1.Item(s) Set reference1 = part.CreateReferenceFromObject(hybridShapePoint) Set shapeFactory1 = part.ShapeFactory Set hole1 = shapeFactory1.AddNewHoleFromRefPoint(reference1, reference2, 3) hole1.Type = catSimpleHole hole1.AnchorMode = catExtremPointHoleAnchor hole1.BottomType = catTrimmedHoleBottom Set limit1 = hole1.BottomLimit limit1.LimitMode = catUpThruNextLimit Set length1 = hole1.Diameter length1.Value = DiaMm hole1.ThreadingMode = catSmoothHoleThreading hole1.ThreadSide = catRightThreadSide part.Update Next End Sub
Vorab danke für eure Ideen!! [Diese Nachricht wurde von Dougger am 14. Mrz. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 14. Mrz. 2019 17:09 <-- editieren / zitieren --> Unities abgeben: Nur für Dougger
Servus Schiebe mal das Update aus der Schleife raus, oder aktualisiere immer nur die neu erstellte Bohrung (siehe mein Code). Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dougger Mitglied
Beiträge: 9 Registriert: 05.03.2019 CATIA V5 R21 Windows 10
|
erstellt am: 14. Mrz. 2019 17:29 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 14. Mrz. 2019 17:33 <-- editieren / zitieren --> Unities abgeben: Nur für Dougger
|
Dougger Mitglied
Beiträge: 9 Registriert: 05.03.2019 CATIA V5 R21 Windows 10
|
erstellt am: 14. Mrz. 2019 17:40 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, schade. Dann danke ich dir für deine Hilfe bis hierhin und werde mich mal in die Makroprogrammierung reinfuchsen um mein Problem dann selber in einigen Wochen/Monaten selber zu lösen. Ciao
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |