Hallo Forum,
ich arbeite gerade an einem Makro in der Drafting-Umgebung. Beim Umwandeln eines *.CatDrawings in ein *.dxf entstehen zwischen den geometrischen Elementen teilweise "Lücken" die bei der Übergabe an andere externe Geräte Probleme machen. Da es sehr mühsam ist, alle Lücken per Hand zu schließen, versuche ich gerade ein Makro dafür zu schreiben.
Hier meine Vorgehensweise:
-selektierte Elemente auslesen
-Typ der Elemente auslesen
-Endpunkte der Elemente auslesen
-Abstand zwischen den Endpunkten berechnen
-wenn bestimmter Abstand überschritten keine Aktion, wenn Abstand zwischen Punkten unter bestimmten Wert Linie zwischen den Punkten ziehen, wenn Abstand gleich null keine Aktion
Hier nun mein Problem:
Neben Kreisen, Linien und Ellipsen treten auch Elemente mit der Bezeichnung Polylinie auf. Lässt man sich den Typ dieser Geometrien anzeigen, so ist dieser "Ressource". Damit kann ich leider nichts anfangen und in der Automation ist auch nichts zu finden.
Das ist der Grund das man auch keine Endpunkte auslesen kann. Eine Objektauflösung in der *.CATVBS oder *.CATScript zeigt auch nichts an.
Habe auch schon versucht, Punkte an das Ende der Polylinie zu setzen. Per Hand funktioniert das, bloß per Makro nicht.
Hier mein Codeschnipsel:
Sub CATMain()
Set Schablone = CATIA.ActiveDocument
Set Blaetter = Schablone.Sheets
Set Blatt = Blaetter.Item("Modell")
Set Views = Blatt.Views
Set View = Views.Item("Hauptansicht")
Set Geos = View.GeometricElements
Set selektierteElemente = CATIA.ActiveDocument.Selection
selektierteElemente.Search ".Geometrie;Sel"
Anzahl = selektierteElemente.Count
If Anzahl = 0 Then
MsgBox ("Keine Selektion durchgeführt")
Exit Sub
End If
AnzahlLinie = 0
AnzahlKreis = 0
AnzahlEllipse = 0
AnzahlPolylinie = 0
For i = 1 To Anzahl
'MsgBox (selektierteElemente.Item(i).Value.Name)
If selektierteElemente.Item(i).Type = "Line2D" Then
AnzahlLinie = AnzahlLinie + 1
End If
If selektierteElemente.Item(i).Type = "Circle2D" Then
AnzahlKreis = AnzahlKreis + 1
End If
If selektierteElemente.Item(i).Type = "Ellipse2D" Then
AnzahlEllipse = AnzahlEllipse + 1
End If
If selektierteElemente.Item(i).Type <> "Line2D" And selektierteElemente.Item(i).Type <> "Circle2D" And selektierteElemente.Item(i).Type <> "Ellipse2D" And selektierteElemente.Item(i).Type <> "Point2D" Then
AnzahlPolylinie = AnzahlPolylinie + 1
End If
Next
If AnzahlLinie > 0 Then
If AnzahlLinie >= 1 Then Set Linie(1) = Geos.GetItem("Linie.1")
If AnzahlLinie >= 2 Then Set Linie(2) = Geos.GetItem("Linie.2")
If AnzahlLinie >= 3 Then Set Linie(3) = Geos.GetItem("Linie.3")
If AnzahlLinie >= 4 Then Set Linie(4) = Geos.GetItem("Linie.4")
If AnzahlLinie >= 5 Then Set Linie(5) = Geos.GetItem("Linie.5")
If AnzahlLinie >= 6 Then Set Linie(6) = Geos.GetItem("Linie.6")
If AnzahlLinie >= 7 Then Set Linie(7) = Geos.GetItem("Linie.7")
If AnzahlLinie >= 8 Then Set Linie(8) = Geos.GetItem("Linie.8")
If AnzahlLinie >= 9 Then Set Linie(9) = Geos.GetItem("Linie.9")
If AnzahlLinie >= 10 Then Set Linie(10) = Geos.GetItem("Linie.10")
If AnzahlLinie >= 11 Then Set Linie(11) = Geos.GetItem("Linie.11")
If AnzahlLinie >= 12 Then Set Linie(12) = Geos.GetItem("Linie.12")
If AnzahlLinie >= 13 Then Set Linie(13) = Geos.GetItem("Linie.13")
If AnzahlLinie >= 14 Then Set Linie(14) = Geos.GetItem("Linie.14")
If AnzahlLinie >= 15 Then Set Linie(15) = Geos.GetItem("Linie.15")
For i = 1 To AnzahlLinie
Set xLinie(i) = Linie(i)
Next
End If
If AnzahlKreis > 0 Then
If AnzahlKreis >= 1 Then Set Kreis(1) = Geos.GetItem("Kreis.1")
If AnzahlKreis >= 1 Then Set Kreis(1) = Geos.GetItem("Kreis.1")
If AnzahlKreis >= 2 Then Set Kreis(2) = Geos.GetItem("Kreis.2")
If AnzahlKreis >= 3 Then Set Kreis(3) = Geos.GetItem("Kreis.3")
If AnzahlKreis >= 4 Then Set Kreis(4) = Geos.GetItem("Kreis.4")
If AnzahlKreis >= 5 Then Set Kreis(5) = Geos.GetItem("Kreis.5")
If AnzahlKreis >= 6 Then Set Kreis(6) = Geos.GetItem("Kreis.6")
If AnzahlKreis >= 7 Then Set Kreis(7) = Geos.GetItem("Kreis.7")
If AnzahlKreis >= 8 Then Set Kreis(8) = Geos.GetItem("Kreis.8")
If AnzahlKreis >= 9 Then Set Kreis(9) = Geos.GetItem("Kreis.9")
If AnzahlKreis >= 10 Then Set Kreis(10) = Geos.GetItem("Kreis.10")
If AnzahlKreis >= 11 Then Set Kreis(11) = Geos.GetItem("Kreis.11")
If AnzahlKreis >= 12 Then Set Kreis(12) = Geos.GetItem("Kreis.12")
If AnzahlKreis >= 13 Then Set Kreis(13) = Geos.GetItem("Kreis.13")
If AnzahlKreis >= 14 Then Set Kreis(14) = Geos.GetItem("Kreis.14")
If AnzahlKreis >= 15 Then Set Kreis(15) = Geos.GetItem("Kreis.15")
For i = 1 To AnzahlKreis
Set xKreis(i) = Kreis(i)
Next
End If
If AnzahlEllipse > 0 Then
If AnzahlEllipse >= 1 Then Set Ellipse(1) = Geos.GetItem("Ellipse.1")
If AnzahlEllipse >= 1 Then Set Ellipse(1) = Geos.GetItem("Ellipse.1")
If AnzahlEllipse >= 2 Then Set Ellipse(2) = Geos.GetItem("Ellipse.2")
If AnzahlEllipse >= 3 Then Set Ellipse(3) = Geos.GetItem("Ellipse.3")
If AnzahlEllipse >= 4 Then Set Ellipse(4) = Geos.GetItem("Ellipse.4")
If AnzahlEllipse >= 5 Then Set Ellipse(5) = Geos.GetItem("Ellipse.5")
If AnzahlEllipse >= 6 Then Set Ellipse(6) = Geos.GetItem("Ellipse.6")
If AnzahlEllipse >= 7 Then Set Ellipse(7) = Geos.GetItem("Ellipse.7")
If AnzahlEllipse >= 8 Then Set Ellipse(8) = Geos.GetItem("Ellipse.8")
If AnzahlEllipse >= 9 Then Set Ellipse(9) = Geos.GetItem("Ellipse.9")
If AnzahlEllipse >= 10 Then Set Ellipse(10) = Geos.GetItem("Ellipse.10")
If AnzahlEllipse >= 11 Then Set Ellipse(11) = Geos.GetItem("Ellipse.11")
If AnzahlEllipse >= 12 Then Set Ellipse(12) = Geos.GetItem("Ellipse.12")
If AnzahlEllipse >= 13 Then Set Ellipse(13) = Geos.GetItem("Ellipse.13")
If AnzahlEllipse >= 14 Then Set Ellipse(14) = Geos.GetItem("Ellipse.14")
If AnzahlEllipse >= 15 Then Set Ellipse(15) = Geos.GetItem("Ellipse.15")
For i = 1 To AnzahlEllipse
Set xEllipse(i) = Ellipse(i)
Next
End If
If AnzahlLinie > 0 Then
For i = 1 To AnzahlLinie
xLinie(1).GetEndPoints Element1()
For j = 1 To AnzahlLinie
xLinie(j).GetEndPoints Element2()
Abstand(1) = Distance(Element1(0), Element1(1), Element2(0), Element2(1))
Abstand(2) = Distance(Element1(0), Element1(1), Element2(2), Element2(3))
Abstand(3) = Distance(Element1(2), Element1(3), Element2(0), Element2(1))
Abstand(4) = Distance(Element1(2), Element1(3), Element2(2), Element2(3))
Next
For j = 1 To AnzahlKreis
xKreis(j).GetEndPoints Element2()
Abstand(1) = Distance(Element1(0), Element1(1), Element2(0), Element2(1))
Abstand(2) = Distance(Element1(0), Element1(1), Element2(2), Element2(3))
Abstand(3) = Distance(Element1(2), Element1(3), Element2(0), Element2(1))
Abstand(4) = Distance(Element1(2), Element1(3), Element2(2), Element2(3))
Next
Next
End If
End Sub
'#######################################
Public Function Distance(xEndpunkt, yEndpunkt, xStartpunkt, yStartpunkt)
Distance = (((xEndpunkt - xStartpunkt) ^ 2) + ((yEndpunkt - yStartpunkt) ^ 2)) ^ 0.5
End Function
'######################################
Hat jemand schon Erfahrung mit Polylinie im Drafting-Mode? Oder hat jemand schon einmal ein ähnliches Problem gelöst?
Bin gerade etwas mit meinem Latein am Ende...
Bitte helft mir!
Vielen Dank Im Voraus
Gehirnsuelze
------------------
[Diese Nachricht wurde von gehirnsuelze am 05. Jun. 2007 editiert.]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP