Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  keine Objektauflösung für Polylinie im Drafting!!!

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  keine Objektauflösung für Polylinie im Drafting!!! (1343 mal gelesen)
gehirnsuelze
Mitglied
Student


Sehen Sie sich das Profil von gehirnsuelze an!   Senden Sie eine Private Message an gehirnsuelze  Schreiben Sie einen Gästebucheintrag für gehirnsuelze

Beiträge: 58
Registriert: 16.11.2005

erstellt am: 05. Jun. 2007 09:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

gehirnsuelze
Mitglied
Student


Sehen Sie sich das Profil von gehirnsuelze an!   Senden Sie eine Private Message an gehirnsuelze  Schreiben Sie einen Gästebucheintrag für gehirnsuelze

Beiträge: 58
Registriert: 16.11.2005

erstellt am: 06. Jun. 2007 11:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

für die dies interessiert:

hab das problem umgangen indem ich die polylinie zerlegt habe

manuell: markieren>rechte maustaste>objekt yxz>zerlegen
makro: drawingComponent.explode

------------------

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz