Autor
|
Thema: Makro zum zählen von Bohrungen (3179 mal gelesen)
|
tierd123 Mitglied Admin
Beiträge: 2 Registriert: 10.01.2008
|
erstellt am: 10. Jan. 2008 08:00 <-- editieren / zitieren --> Unities abgeben:
Ich wollte mir gerade ein Makro zum zählen von Bohrungen in einem Werkstück schreiben. Das funktioniert aber leider nicht weil die Bohrungen die in einem Rechteckmuster enthalten sind, nicht mitgezählt werden.(uähh) Wie kann ich die Anzahl der Bohrungen in einem Muster abfragen?? (Manche Bohrungen sind inaktiviert) Bin für jeden Tip dankbar. 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: 10. Jan. 2008 08:14 <-- editieren / zitieren --> Unities abgeben: Nur für tierd123
|
tierd123 Mitglied Admin
Beiträge: 2 Registriert: 10.01.2008
|
erstellt am: 10. Jan. 2008 08:48 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 10. Jan. 2008 09:32 <-- editieren / zitieren --> Unities abgeben: Nur für tierd123
Servus AFAIK werden in dem erwähnten Makro die Bohrungsmuster gesucht. Über "InstancesCount" (siehe V5Automation.chm) müsstest du dann an die Anzahl der Elemente im Muster kommen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jens Hansen Mitglied Senior Consult
Beiträge: 1055 Registriert: 05.08.2000 Win7 CATIA V5 R19 VB.Net C#
|
erstellt am: 10. Jan. 2008 11:15 <-- editieren / zitieren --> Unities abgeben: Nur für tierd123
|
tberger Mitglied Application Manager CATIA V5 / V6
Beiträge: 1385 Registriert: 13.01.2007 WIN 7 64bit V5R21SP3HF49 3DX/V6 R2016x
|
erstellt am: 10. Jan. 2008 15:53 <-- editieren / zitieren --> Unities abgeben: Nur für tierd123
Vielleicht mal ein ganz anderer Ansatz ohne Makro: Versuche doch einmal, wenn du deinen Part Body mit Loechern und Mustern etc. vor dir liegen hast, mit der rechten Maustaste darauf zu klicken und ganz unten letzte Zeile PartBody object und danach das Feature "Create Technological Results" zu waehlen. Es wird dir ein neuer Folder eingehangen mit genau der Anzahl von Loechern, die da sind (ob aus Hole oder aus Pattern entstanden ist, mit und ohne Gewinde - EGAL!). Dann ersten und letzten Eintrag mit Shift selectieren und dann links unten kucken, wieviele es denn sind. Gruesse aus dem Rheinland
Thomas
------------------ CATIA - eine Laune der Natur ... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DuffM4nUS Mitglied Konstrukteur
Beiträge: 26 Registriert: 14.04.2016 @ WORK CATIA V5 R19 SP9 Windows 7 x64 Professional SP1 i7-3740 @ 2.7GHz 16GB RAM NVIDIA Quadro 3000M 500GB SHDD
|
erstellt am: 14. Apr. 2016 11:52 <-- editieren / zitieren --> Unities abgeben: Nur für tierd123
Ich würde gern das Thema noch einmal aufgreifen. Ich bin ein VBA-Anfänger und habe mich bereits kaputtgegoogelt. Was suche ich? Ein Makro, welches über MSGBOX die Anzahl der angezeigten Punkte/Linien im Part ausgibt. Unter "angezeigt" meine ich diese, die im SHOW bzw. ACTIVATE sind. Nicht zu verwechseln mit visible on screen. Sollte es dafür keine (oder eine sehr umständliche) Lösung geben, so geht natürlich auch visible on screen. Was ist mein Problem? Die Punkte/Linien befinden sich ausschließlich in verschiedenen Mustern (Rect,Circ,User) und damit kommt die einfache Suche&Selektion (ähnlich STRG+F) da nicht ran. Was habe ich bereits? Folgendes Code-Schnipsel: (geht natürlich nicht) Code: Sub CATMain()MakroName = "Punkte/Linien zaehlen" Version = "v1.0" Dim Point Dim Line Dim Actpart Dim allPatterns Dim onePattern Dim iCount Dim i set ActPart = CATIA.ActiveDocument set allPatterns = ActPart.selection
'nach vorhanden Mustern suchen allPatterns.Search "CATPrtSearch.Pattern,all" 'die Items der Muster abfragen for i = 1 to allpatterns.count Set onePattern = allPatterns.Item(i).Value Set Point = onePattern.ItemToCopy iCount = allPatterns.Count msgbox "Anzahl der Punkte: "&iCount End Sub
Kann mir einer von euch VB-Profis helfen? Ich habe ein Part als Bsp. in den Anhang gepackt.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MarcL68 Mitglied Group Leader Mechanical Design
Beiträge: 27 Registriert: 21.08.2013 Windows 10 Entreprise Version 10.0.17763 HP ZBook 17G2 i7-4610M; 3.0GHz;(RAM)16,00 Go NVIDIA Quadro 3000M CATIA V5R2012 SP3 - V5R2018
|
erstellt am: 14. Apr. 2016 12:45 <-- editieren / zitieren --> Unities abgeben: Nur für tierd123
Hallo, Kann dir das helfen? Code: Sub CATMain()Set partDocument1 = CATIA.ActiveDocument Set selection1 = partDocument1.Selection selection1.Search "Name= Point*,all" oCount1 = selection1.Count2 Set selection2 = partDocument1.Selection selection2.Search "Name= Line*,all" oCount2 = selection2.Count2 msgbox "Point:" & oCount1 & " Line:" & oCount2 End Sub
------------------ Gruss Marc 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. Apr. 2016 12:45 <-- editieren / zitieren --> Unities abgeben: Nur für tierd123
Servus Ich hab da mal ein kleines Beispiel aufgebaut wie das bei Punkten funktionieren könnte (nicht umfänglich getestet). Grober Ablauf: - alle "normalen" Punkte selektieren/zählen - Muster suchen, aussortieren bei welchem Punkte gemustert wurden und in einer Collection zwischenspeichern - in jedem Muster nach Scheitelpunkten/Vertex suchen Code: Sub CATMain()Dim partDocument As partDocument Dim intPointCounter As Integer Dim oSel As Object 'Selection Dim oPattern As Pattern Dim i As Integer Dim oPatternCollection As New Collection Set partDocument1 = CATIA.ActiveDocument Set oSel = partDocument1.Selection 'Sichbare Punkte suchen (ohne Muster) oSel.Search "(CATPrtSearch.Point.Visibility=Visible + CATSketchSearch.2DPoint.Visibility=Visible),all" intPointCounter = oSel.Count 'sichtbare Muster suchen oSel.Clear oSel.Search "CATGmoSearch.Pattern.Visibility=Visible,all" 'falls Punkte gemustert wurde dieses Muster in einen Array schreiben If oSel.Count2 <> 0 Then For i = 1 To oSel.Count2 Set oPattern = oSel.Item2(i).Value If InStr(TypeName(oPattern.ItemToCopy), "Point") <> 0 Then oPatternCollection.Add oPattern End If Next 'in jedem Muster nach Punkten suchen For Each oPattern In oPatternCollection oSel.Add oPattern oSel.Search "Topology.CGMVertex,sel" intPointCounter = intPointCounter + oSel.Count2 oSel.Clear Next End If MsgBox "Wert: " & intPointCounter End Sub
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DuffM4nUS Mitglied Konstrukteur
Beiträge: 26 Registriert: 14.04.2016 @ WORK CATIA V5 R19 SP9 Windows 7 x64 Professional SP1 i7-3740 @ 2.7GHz 16GB RAM NVIDIA Quadro 3000M 500GB SHDD
|
erstellt am: 14. Apr. 2016 13:33 <-- editieren / zitieren --> Unities abgeben: Nur für tierd123
Hallo und vielen Dank für die schnellen Antworten! @Marc: dein Skript sucht auch Punkte innerhalb von Skizzen, das führt in diesem Falle leider nicht zum Erfolg. In der Skizze für die Userpattern sind auch Punkte als Construction Geometry mit drin, die dürfen auch nicht gezählt werden. Zudem gibt es noch Skizzen, die nur als Referenz dienen. Dort darf auch nicht nach Punkten gesucht werden. Die Lines zählt er auch nicht richtig. Hier werden auch nur Lines gezählt, welche sich in Skizzen befinden und nicht diese, die auf dem Bildschirm sind. @Bernd: bei mir gibt dein Skript eine Fehlermeldung Kompilierungsfehler Line3 Column17 zurück, ich werde mal durch Probieren versuchen herauszufinden, woran das liegt. [Diese Nachricht wurde von DuffM4nUS am 14. Apr. 2016 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. Apr. 2016 13:36 <-- editieren / zitieren --> Unities abgeben: Nur für tierd123
Servus DuffM4nUS In was programmierst du? Den Code hab ich in VBA ausgeführt/programmiert. (als CATScript macht wohl die Collection Probleme) Als was hast du den Code ausgeführt? Gruß Bernd
------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DuffM4nUS Mitglied Konstrukteur
Beiträge: 26 Registriert: 14.04.2016 @ WORK CATIA V5 R19 SP9 Windows 7 x64 Professional SP1 i7-3740 @ 2.7GHz 16GB RAM NVIDIA Quadro 3000M 500GB SHDD
|
erstellt am: 14. Apr. 2016 13:50 <-- editieren / zitieren --> Unities abgeben: Nur für tierd123
Hey Bernd, ich nutze "MS VBScript" mit der Endung "*.catvbs", optional gibt es noch CATScript zur Auswahl. Ist von der Firma voreingestellt, habe aber Adminrechte und könnte auch was zusätzliches installieren. Bitte nehmt mir meine Unwissenheit in Sachen Programmierung nicht übel, ich verspreche zu fein zu lernen und euch mit solchen Basics zukünftig nicht mehr zu quälen Gruß Steve [Diese Nachricht wurde von DuffM4nUS am 14. Apr. 2016 editiert.] [Diese Nachricht wurde von DuffM4nUS am 14. Apr. 2016 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. Apr. 2016 14:19 <-- editieren / zitieren --> Unities abgeben: Nur für tierd123
Servus Anbei der überarbeitetet Code das es als CATScript laufen sollte. Code: Sub CATMain()Dim partDocument As partDocument Dim intPointCounter As Integer Dim oSel As Selection Dim oPattern As Pattern Dim i As Integer Set partDocument1 = CATIA.ActiveDocument Set oSel = partDocument1.Selection 'Sichbare Punkte suchen (ohne Muster) oSel.Search "(CATPrtSearch.Point.Visibility=Visible + CATSketchSearch.2DPoint.Visibility=Visible),all" intPointCounter = oSel.Count 'sichtbare Muster suchen oSel.Clear oSel.Search "CATGmoSearch.Pattern.Visibility=Visible,all" 'falls nicht Punkte gemustert wurde dieses us der Selektion werfen If oSel.Count2 <> 0 Then For i = oSel.Count2 to 1 Step -1 Set oPattern = oSel.Item2(i).Value If InStr(TypeName(oPattern.ItemToCopy), "Point") = 0 Then osel.remove (i) End If Next 'in der Selektion nach Punkten suchen oSel.Search "Topology.CGMVertex,sel" intPointCounter = intPointCounter + oSel.Count2 oSel.Clear End If MsgBox "Anzahl der Punkte: " & intPointCounter End Sub
Versuch den Code zu verstehen/lesen, dann kannst du diesen sicher auch auf Linien anpassen. Gruß Bernd EDIT: Zeile im Code korrigiert. ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DuffM4nUS Mitglied Konstrukteur
Beiträge: 26 Registriert: 14.04.2016 @ WORK CATIA V5 R19 SP9 Windows 7 x64 Professional SP1 i7-3740 @ 2.7GHz 16GB RAM NVIDIA Quadro 3000M 500GB SHDD
|
erstellt am: 14. Apr. 2016 14:56 <-- editieren / zitieren --> Unities abgeben: Nur für tierd123
Hey Bernd! Den Code auf Linien auszuweiten sollte ich hinbekommen Leider geht es als CATScript immer noch nicht. Typenkonflikt oPatternCollection Line 26 Column 16. Im Tree hat er schon die richtigen Linien/Features selektiert. Jetzt nur noch zählen In deinem VB-Script habe ich mal die Variablendefinition geändert und alles ab "As" auskommentiert. Dann kommt das Script bis Line 29 Column 16 und fordert: Objekt erforderlich oPatternCollection.
Ich habe keinen blassen Schimmer warum beide Scripts nicht gehen, vielleicht liegt das an meinem Rechner. Grüße Steve
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. Apr. 2016 14:59 <-- editieren / zitieren --> Unities abgeben: Nur für tierd123
|
DuffM4nUS Mitglied Konstrukteur
Beiträge: 26 Registriert: 14.04.2016 @ WORK CATIA V5 R19 SP9 Windows 7 x64 Professional SP1 i7-3740 @ 2.7GHz 16GB RAM NVIDIA Quadro 3000M 500GB SHDD
|
erstellt am: 14. Apr. 2016 15:17 <-- editieren / zitieren --> Unities abgeben: Nur für tierd123
|