Autor
|
Thema: Kleine Linien löschen (3938 mal gelesen)
|
cyzed Mitglied Ingenieur
Beiträge: 55 Registriert: 27.10.2009
|
erstellt am: 27. Nov. 2009 13:08 <-- editieren / zitieren --> Unities abgeben:
|
V5Playaz Mitglied Dipl.-Ing (BA)
Beiträge: 447 Registriert: 12.07.2005 DELL PRECISION 390 3,25 GB RAM WIN XP PRO SP2 CATIA V5 R16-19 Delmia V5 R19 VB6, VB2008 Adobe Acrobat 9 Pro Extended
|
erstellt am: 27. Nov. 2009 14:52 <-- editieren / zitieren --> Unities abgeben: Nur für cyzed
Hallo, alle Linien per Schleife durchlaufen (direkt oder per Suchabfrage). Dann die Länge der einzelnen Linien ermitteln. Per Suchfunktion lässt sich hier im Forum aber einiges finden. grüße Dominik Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cyzed Mitglied Ingenieur
Beiträge: 55 Registriert: 27.10.2009
|
erstellt am: 27. Nov. 2009 16:11 <-- editieren / zitieren --> Unities abgeben:
|
pittyplatsh Mitglied
Beiträge: 62 Registriert: 27.12.2008 CATIA V5 R16 SP3
|
erstellt am: 27. Nov. 2009 17:40 <-- editieren / zitieren --> Unities abgeben: Nur für cyzed
Code: Dim t As Integer For t = 1 To (selectedItems.Item(r).Value.GeometricElements.Count) Step 1 If (selectedItems.Item(r).Value.GeometricElements.Item(t).GeometricType = "3") Then If (selectedItems.Item(r).Value.GeometricElements.Item(t).Construction = False) Then sectionCount = sectionCount + 1 End If End If Next
Dies ist ein Beispiel wo alle Elemente einer Skizze zuerst auf den Typ 3 (Line) geprüft werden und anschließend die Linien auf die Eigenschaft Konstruktionselement. Solltest du ja schnell für deine Zwecke anpassen können. Text ist aus einem Makro von mir. Liebe Grüße, pitty Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
V5Playaz Mitglied Dipl.-Ing (BA)
Beiträge: 447 Registriert: 12.07.2005 DELL PRECISION 390 3,25 GB RAM WIN XP PRO SP2 CATIA V5 R16-19 Delmia V5 R19 VB6, VB2008 Adobe Acrobat 9 Pro Extended
|
erstellt am: 27. Nov. 2009 20:07 <-- editieren / zitieren --> Unities abgeben: Nur für cyzed
|
cyzed Mitglied Ingenieur
Beiträge: 55 Registriert: 27.10.2009
|
erstellt am: 30. Nov. 2009 09:52 <-- editieren / zitieren --> Unities abgeben:
ich habe jetzt ein Makro mit dem ich die Länge einer 3D Linie messen kann: Sub Messung3DLine() Dim InputObjectType(0) Dim ref1 Dim status InputObjectType(0) = "Line" Set Selection = CATIA.ActiveDocument.Selection Selection.Clear status = Selection.SelectElement2(InputObjectType, "Fläche auswählen", True) Set ref1 = Selection.Item(1).Reference Dim thespaworkbench Set thespaworkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench") Dim themeasurable Set themeasurable = thespaworkbench.GetMeasurable(ref1) Dim Laenge As Double Laenge = themeasurable.Length MsgBox "Laenge beträgt: " & Laenge & " mm" End Sub wenn ich InputObjectType(0) = "Line" auf InputObjectType(0) = "Line2D" ändere, entsteht ein Problem mit der Zeile Set ref1 = Selection.Item(1).Reference da komme ich nicht weiter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DanielFr. Moderator Manager
Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 30. Nov. 2009 12:01 <-- editieren / zitieren --> Unities abgeben: Nur für cyzed
|
cyzed Mitglied Ingenieur
Beiträge: 55 Registriert: 27.10.2009
|
erstellt am: 30. Nov. 2009 12:22 <-- editieren / zitieren --> Unities abgeben:
|
cyzed Mitglied Ingenieur
Beiträge: 55 Registriert: 27.10.2009 CATIA V5R19 SP3 32Bit Windows XP 32Bit AMD Athlon II X4 620 2,6 GHz 4 GB DDR2 RAM NVIDIA GeForce 7300GT
|
erstellt am: 30. Nov. 2009 13:55 <-- editieren / zitieren --> Unities abgeben:
habe hier die Syntax nochmal zusammengestellt und irgendwie gibts da wieder ein Problem mit der Referenz Sub CATMain() 'Anzahl der Linien und Punkte in der Skizze Dim Linien, Punkte As Selection Set Linien = CATIA.ActiveDocument.Selection Linien.Clear Linien.Search "Type=Linie*;all"
Set Punkte = CATIA.ActiveDocument.Selection Punkte.Clear Punkte.Search "Type=Punkt*;all" Dim zaehler, zaehler2, zaehler3 As Integer
zaehler1 = Linien.Count zaehler2 = Punkte.Count zaehler3 = zaehler1 + zaehler2 Linien.Clear Punkte.Clear Dim bauteil As Part Dim koerper As Body Dim geos As GeometricElements Dim geo As GeometricElement Dim sketch Set bauteil = CATIA.ActiveDocument.Part Set koerper = bauteil.MainBody Set sketch = koerper.sketches.Item("Skizze.1") Set geos = sketch.GeometricElements bauteil.InWorkObject = sketch
Dim i As Integer Dim ref1 For i = 1 To zaehler3 Set geo = geos.Item(i) 'Prüfen ob es sich um eine Linie handelt If geo.GeometricType = catGeoTypeLine2D Then 'Länge der Linie messen Set bauteil = CATIA.ActiveDocument.Part Set ref1 = bauteil.CreateReferenceFromObject(geo.Value) Dim thespaworkbench Set thespaworkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench") Dim themeasurable Set themeasurable = thespaworkbench.GetMeasurable(ref1) Dim Laenge As Double Laenge = themeasurable.Length 'Länge mit einem Konstanten Wert vergleichen If Laenge <= 2 Then geo.Delete End If End If
Next End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cyzed Mitglied Ingenieur
Beiträge: 55 Registriert: 27.10.2009
|
erstellt am: 30. Nov. 2009 16:04 <-- editieren / zitieren --> Unities abgeben:
YAHOOOOOOOO!!!!!!!! Ich hab's komplett...Danke für eure Hilfe hier nochmal die gesamte Syntax für alle Sub CATMain() 'maximale Linienlänge eingeben Dim Laengemax As Double Laengemax = InputBox("Bitte die maximale Linienlänge eingeben") 'Anzahl der Linien und Punkte in der Skizze Dim zaehler, zaehler2, zaehler3 As Integer Dim Linien, Punkte As Selection Set Linien = CATIA.ActiveDocument.Selection Linien.Clear Linien.Search "Type=Linie*;all" zaehler1 = Linien.Count Set Punkte = CATIA.ActiveDocument.Selection Punkte.Clear Punkte.Search "Type=Punkt*;all" zaehler2 = Punkte.Count zaehler3 = zaehler1 + zaehler2 Linien.Clear Punkte.Clear Dim bauteil As Part Dim koerper As Body Dim geos As GeometricElements Dim geo As GeometricElement Dim sketch Set bauteil = CATIA.ActiveDocument.Part Set koerper = bauteil.MainBody Set sketch = koerper.sketches.Item(1) Set geos = sketch.GeometricElements bauteil.InWorkObject = sketch
Dim i As Integer Dim ref1 For i = 1 To zaehler3 Step 1 Set geo = geos.Item(i) 'Prüfen ob es sich um eine Linie handelt If geo.GeometricType = catGeoTypeLine2D Then 'Länge der Linie messen Set bauteil = CATIA.ActiveDocument.Part Set ref1 = bauteil.CreateReferenceFromObject(geo) Dim thespaworkbench Set thespaworkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench") Dim themeasurable Set themeasurable = thespaworkbench.GetMeasurable(ref1) Dim Laenge As Double Laenge = themeasurable.Length 'Länge mit einem Wert vergleichen If Laenge <= Laengemax Then Linien.Add geo End If End If
Next Linien.Delete End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DanielFr. Moderator Manager
Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 30. Nov. 2009 16:21 <-- editieren / zitieren --> Unities abgeben: Nur für cyzed
Hallo, ich habe auch schnell eine Version gebastelt. An deiner hab ich ein wenig konstruktive Kritik. Erstens du suchst alle Linien in allen Sketchen. Das halte ich für sehr gefährlich. Vielleicht brauchst du ja genau in einer Skizze eine Linie die kürzer als 1mm ist und nach dem Lauf ist die Linie weg. Führt jemand anders das Script aus kann er den Fehler überhaupt nicht nachvollziehen. Bzw. ist ist sogar für dich irgendwann sehr schwer nachzuvollziehen warum plötzlich ein Fehler auftritt. Zweitens solltest du für spätere Makro-Projekte deine Variablen Namen nochmals überdenken. Du wirst hier in zwei Monaten nicht mehr durchblicken wenn du eine Selektion einfach als Linien benamst. Du solltest wenigstens der Variablen oder dem Objekt noch mit auf den Weg geben was es den eigentlich ist z.B. Dim LinienSel as Selektion....Dim ZaehlerInt as Integer. Des weiteren hat sich bei Variablen bewährt die CamleCase Methode (findest du genügend Informationen im Web) zur Namensgebung einzusetzen. Drittens: Warum brauchst du hier auch noch Punkte? Bei mir funktioniert das ganze auch ohne Punkte. Im Anhang findest du mal mein Skript. Hier muss der Anwender eine Skizze expliziet auswählen (man könnte natürlich auch eine MultiSelektion implementieren) in der dann die Linien gesucht werden. Falls du hierzu irgendwelche Fragen hast dann weiter an dieser Stelle ANMERKUNG: Das ganze ist ein CATScript ------------------ MFG Daniel Systeminformation | Inoffizielle CATIA Hilfeseite | CATIA FAQ | Suche | TraceParts (Normteile...) | 3D Content Central (noch mehr Normteile...) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cyzed Mitglied Ingenieur
Beiträge: 55 Registriert: 27.10.2009
|
erstellt am: 30. Nov. 2009 17:22 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank für deine Mühe, ich werde mir die Kritik zu Herzen legen. ich habe hier noch ein Anliegen Mit dem Makro verfolge ich eigentlich das Ziel eine DXF Datei ins Catia zu importieren. Wenn man ein Profil aus der DXF Datei in den Sketcher kopiert und zerlegt, entstehen sehr viele kleine Linien, die ein Radius darstellen(eine Annäherung sozusagen). Ich möchte diese mit einem Bogen ersetzen. Daher die allgemeine Frage an dieser Stelle: Gibt es ein Makro oder ein Programm für sowas??? Gruß Alex Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DanielFr. Moderator Manager
Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 01. Dez. 2009 07:03 <-- editieren / zitieren --> Unities abgeben: Nur für cyzed
Hallo, IMHO gibt es dafür kein Programm. Ist bleibt auch die Frage wie das *.dxf File erstellt wurde. Es muss nicht zwingend sein das Radien und Bögen in Polylinies zerlegt werde. Das *.dxf Format kann auch Splines exportieren . Ich denke man könnte sich dennoch ein solches Makro zusammenbauen. ABER es bleibt für mich die Frage wie sieht´s mit der Performance aus wenn ein Skript alle möglichen Linien (und das können extrem viele sein beim *.dxf Import mit Polylinies (ich sage nur Schrift!!!)) messen und kontrollieren muss und wie genau hast du dir das mit dem Bogen vorgestellt. Machbar ist es da habe ich keine Zweifel dran aber es ist kein 0815-Algorithmus. Du kannst ja nicht einfach mal alle Linien so pauschal löschen sondern du musst sozusagen alle Linien erfassen, sie in die richtige Reihenfolge bringen (hintereinander) dann anfangen zu messen. Ist eine Linie kleiner als 1mm und die nächste auch könnte es ein Bogen sein (es könnte aber auch eine Ellipse sein die du nicht einfach mit einem Bogen ersetzen kannst). Sagen wir mal du hast eine Bogen identifiziert und löscht ihn raus musst du immer noch per Skript einen neuen Bogen erstellen. Das einzige was du jetzt noch hast ist Start- und Endpunkt. Da hast keinen Radius den den kannst du ja an Polylinies nicht messen. Das heißt du müsstest erst den Radius erstellen, eine Bedingung in der Mitte setzen um den Radius an die Polylinies anzunähern und anschließend erst die Polylinies mitsamt Bedingung löschen. Du siehst einfach ist es nicht ------------------ MFG Daniel Systeminformation | Inoffizielle CATIA Hilfeseite | CATIA FAQ | Suche | TraceParts (Normteile...) | 3D Content Central (noch mehr Normteile...) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HomerJayS Mitglied
Beiträge: 17 Registriert: 03.08.2010
|
erstellt am: 11. Aug. 2010 12:54 <-- editieren / zitieren --> Unities abgeben: Nur für cyzed
|
DanielFr. Moderator Manager
Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 11. Aug. 2010 13:03 <-- editieren / zitieren --> Unities abgeben: Nur für cyzed
|
HomerJayS Mitglied
Beiträge: 17 Registriert: 03.08.2010
|
erstellt am: 11. Aug. 2010 13:17 <-- editieren / zitieren --> Unities abgeben: Nur für cyzed
|