Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Längenauswertung von Linien in einer View

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:  Längenauswertung von Linien in einer View (2269 mal gelesen)
reimund
Mitglied



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

Beiträge: 231
Registriert: 29.10.2004

erstellt am: 27. Apr. 2010 11:25    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 Zusammen,
für die Auswertung der Views einer Drawing benötige ich die Längen der Linen innerhalb der Views.
Durch eine Suche selektiere ich alle Linien.

Danach will ich von jeder Linie bestimmte Eigenschaften auswerten.
Ich benötige den Namen und die Länge der Linie. Den Namen konnte ich auslesen, doch die Länge habe ich nicht gefunden.
Ich habe einiges dazu versucht, z. B. auch den Umweg, eine Bemaßung auf der Linie zu erzeugen und diese dann auszulesen. Das Auslesen der Bemaßung hat funktioniert, doch das Erzeugen für nur eine Line eben nicht.

Wie kann man die Länge einer Line (eines Objektes) in einer View auslesen.

Vielen Dank schon mal im Voraus.

Gruß
Reimund


Hier der Quellcode aus CATVBA:

Sub CATMain()

Dim oDoc As DrawingDocument
Set oDoc = CATIA.ActiveDocument
Dim oSheets As DrawingSheets
Set oSheets = oDoc.Sheets
Dim oSheet As DrawingSheet
Set oSheet = oSheets.Item(1)
Dim oViews As DrawingViews
Set oViews = oSheet.Views
Dim oView As DrawingView
Set oView = oViews.ActiveView
'+++++++Selection der Linien
Dim osel As Selection
Set osel = oDoc.Selection
osel.Clear
osel.Search "Type=line,all"
Dim iCount_SelectedElements As Integer
iCount_SelectedElements = osel.Count2
'+++++++Ausgabe der selektierten Linien
MsgBox "Anzahl der selektierten Linien" & iCount_SelectedElements
Dim oline As Line2D
Dim oline_name(100)  As String
Dim oline_length(100) As Double
Dim iZaehler As Integer
iZaehler = 0
    For iZaehler = 1 To iCount_SelectedElements
    Set oline = osel.Item2(iZaehler).Value
    oline_name(iZaehler) = oline.Name
    'oline_length(iZaehler)= ????
    MsgBox "lfd Nr.: " & iZaehler & " // " & oline_name(iZaehler) & "// länge = " '& oline_length(iZaehler)
    Next

End Sub

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

EngineeredByRobberts
Mitglied
Ingenieur


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

Beiträge: 109
Registriert: 27.04.2010

Dell Precision 690
Windows XP
V5R19SP3 V5R17SP0

erstellt am: 27. Apr. 2010 15:35    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 Nur für reimund 10 Unities + Antwort hilfreich

Über Curve2D kann man sich die Endpunkte ausgeben lassen und so die Länge berechnen

Language="CATSCRIPT"

Dim I As Integer
Dim lineTmp As Curve2D
Dim endPoints1(3)

Sub CATMain()

Dim drawingDocument1 As Document
Set drawingDocument1 = CATIA.ActiveDocument

Dim selection1 As Selection
Set selection1 = drawingDocument1.Selection

selection1.Search "CATDrwSearch.2DCurve,all" 
   

For I=1 To selection1.Count2
   
Set lineTmp = selection1.Item2(I).Value
lineTmp.GetEndPoints endPoints1

if lineTmp.Period = 0 then
laenge1 = Sqr(  (endPoints1(0)-endpoints1(2))*(endPoints1(0)-endpoints1(2))  +  (endPoints1(1)-endpoints1(3))*(endPoints1(1)-endpoints1(3))  )
MsgBox  lineTmp.Name  & "  "  & laenge1
End If
Next

End Sub

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

DanielFr.
Moderator
Manager


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

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: 27. Apr. 2010 15:46    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 Nur für reimund 10 Unities + Antwort hilfreich

Hallo reimund  ,

ein wenig spät aber dennoch ein zweites Makro zum Vergleich. Es werden hier nur Linien selektiert dich sich in Views auf der Hauptansicht (nicht im Blatthintergrund) befinden. Die Vorgehensweise ist aber die selben wie im obigen Beitrag 

Code:

Option Explicit

'******LINE LENGHT IN DRWAING VIEW
'by        Daniel Frauenrath (DanielFr.)
'for        CAD.de
'Date      27.04.2010
'Version    1.0 (TEST RELEASE)

'***MAIN SUB
Sub CATMain()
   
    '***DEKLRARATIONEN
    Dim intDRWDocObj As DrawingDocument
    Dim intSelViewObj As Selection
    Dim intSelLineObj As Selection
    Dim intTempViewCol As New Collection
    Dim i As Integer
    Dim intLineColl As New Collection
   
    '***OBJEKTE INSTANZIEREN
    On Error Resume Next
    Set intDRWDocObj = CATIA.ActiveDocument
    If Err.Number <> 0 Then
        MsgBox "Das aktive Dokument ist keine Zeichnung" + Chr(10) + "Das Makro kann nur in Zeichnungen ausgeführt werden", vbExclamation, _
                "FALSCHER DOKUMENTENTYP"
        Exit Sub
    Else
        On Error GoTo 0
    End If
   
    Set intSelViewObj = intDRWDocObj.Selection
    Set intSelLineObj = intDRWDocObj.Selection
   
    '***ERST VIEWS SUCHEN
    intSelViewObj.Clear
    intSelViewObj.Search "CATDrwSearch.DrwView,all"
   
    '***VIEWS TEMPOÄR ZWISCHENSPEICHERN (OHNE HINTERGRUNDANSICHT)
    If intSelViewObj.Count > 0 Then
        For i = 1 To intSelViewObj.Count
            If intSelViewObj.Item(i).Value.Name <> "Background View" Then
                intTempViewCol.Add intSelViewObj.Item(i).Value
            End If
        Next
    Else
        MsgBox "Es wurden keine Ansichten auf der Zeichnung gefunden" + Chr(10) + "Das Makro wird beendet", vbExclamation, "KEINE ANSICHTEN IN ZEICHNUNG"
        Exit Sub
    End If
   
    intSelViewObj.Clear
   
    '***VIEWS AUS TEMORÄRER COLLECTION SELEKTIEREN
    For i = 1 To intTempViewCol.Count
        intSelViewObj.Add intTempViewCol.Item(i)
    Next
   
    '***LINIEN IN DEN VIEWS SUCHEN
    intSelLineObj.Search "CATDrwSearch.2DLine,sel"
   
    If intSelLineObj.Count > 0 Then
        For i = 1 To intSelLineObj.Count
            intLineColl.Add intSelLineObj.Item(i).Value
        Next
    Else
        MsgBox "Es wurden keine Linien in den Ansichten gefunden" + Chr(10) + "Das Makro wird beendet", vbExclamation, "KEINE LINIEN GEFUNDEN"
        Exit Sub
    End If
   
    intSelLineObj.Clear
   
    '***LINIEN EINZELN MESSEN UND WERTE AUSGEBEN
    For i = 1 To intLineColl.Count
        MsgBox "LINIENMESSUNG IN ZEICHNUNGSANSICHTEN" + vbNewLine + vbNewLine + _
                "Lfd. Nr.:" + vbTab + vbTab + CStr(i) + vbNewLine + _
                "Ansichtsname:" + vbTab + intLineColl.Item(i).Parent.Parent.Name + vbNewLine + _
                "Linienname:" + vbTab + intLineColl.Item(i).Name + vbNewLine + _
                "Länge:" + vbTab + vbTab + MeasureDRWLineFunc(intDRWDocObj, intLineColl.Item(i)), vbInformation, "MESSUNG"
    Next
   
   
End Sub

'***FUNKTION ZUM MESSEN DER LINIENLÄNGE
Private Function MeasureDRWLineFunc(ByVal uebDRWDocObj As DrawingDocument, ByVal uebLineObj As Line2D) As String

    '***DEKLARATIONEN
    Dim intSelLineObj 'As Selection
    Dim intStartPointCoordArr(1)
    Dim intEndPointCoordArr(1)
    Dim intX1Dbl As Double
    Dim intX2Dbl As Double
    Dim intY1Dbl As Double
    Dim intY2Dbl As Double
    Dim intDistanceDbl As Double
   
    '***OBJEKTE INSTANZIEREN
    Set intSelLineObj = uebDRWDocObj.Selection
    intSelLineObj.Clear
   
    '***LINIE ZUR SELEKTION HINZUFÜGEN
    intSelLineObj.Add uebLineObj
   
    '***KOORDINATEN DES START- UND ENDPUNKTES AUSLESEN
    intSelLineObj.Item(1).Value.StartPoint.GetCoordinates intStartPointCoordArr
    intSelLineObj.Item(1).Value.EndPoint.GetCoordinates intEndPointCoordArr
   
    '***SELEKTION LEEREN
    intSelLineObj.Clear
   
    '***BERECHNUNG DES KÜRZESTEN ABSTANDES
    intX1Dbl = CDbl(intStartPointCoordArr(0))
    intX2Dbl = CDbl(intEndPointCoordArr(0))
    intY1Dbl = CDbl(intStartPointCoordArr(1))
    intY2Dbl = CDbl(intEndPointCoordArr(1))
   
    intDistanceDbl = Round(Sqr(((intX1Dbl - intX2Dbl) ^ 2) + ((intY1Dbl - intY2Dbl) ^ 2)), 3)
   
    '***MESSEN UND ÜBERGEBEN
    MeasureDRWLineFunc = CStr(intDistanceDbl & "mm")

End Function


------------------
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

buecherm83
Mitglied
Ingenieur IT Application Software


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

Beiträge: 78
Registriert: 20.09.2011

SIEMENS NX10
CATIA V5 R26
VB7.1
Tecnomatix Process Designer/Simulate<P>Win7 64bit
Office 2016

erstellt am: 20. Feb. 2014 11:43    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 Nur für reimund 10 Unities + Antwort hilfreich

Hallo,

ich suche nach einer Möglichkeit ausgewählte Linien zu messen.
Der User selektiert hierzu nur die für Ihn wichtigen Linien.

Gibt es eine Möglichkeit hierfür? Ich komme an der Zeile

Code:
intSelLineObj.Search "CATDrwSearch.2DLine,sel"
nicht weiter.
Diese müsste ich ja an meine Selektion angepasst werden.
Ich habe aber keine Idee wie ich aus der Selektion die Eigenschaft 2DLine herausbekomme.

Kann mir jemand weiter helfen

Grüße

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 20. Feb. 2014 11:47    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 Nur für reimund 10 Unities + Antwort hilfreich

Servus
Schau dir dazu mal die Methode "SelectElement2" an (in Doku und Forensuche).

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

buecherm83
Mitglied
Ingenieur IT Application Software


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

Beiträge: 78
Registriert: 20.09.2011

SIEMENS NX10
CATIA V5 R26
VB7.1
Tecnomatix Process Designer/Simulate<P>Win7 64bit
Office 2016

erstellt am: 20. Feb. 2014 12:31    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 Nur für reimund 10 Unities + Antwort hilfreich

ich glaub da habe ich mich falsch ausgedrückt.

Die Selektion habe ich bereits.

Die Frage ist, wie muss ich den Befehl "intSelLineObj.Search "CATDrwSearch.2DLine,sel" anpassen damit meine Auswahl berücksichtigt wird und nicht alle Linien gefunden werden.

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 20. Feb. 2014 12:36    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 Nur für reimund 10 Unities + Antwort hilfreich

Servus
Die Zeile sucht ja schon Linien in der Selektion. Du musst im Code davor entfernen, dass schon erst Views gesucht/selektiert werden.

Grß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

buecherm83
Mitglied
Ingenieur IT Application Software


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

Beiträge: 78
Registriert: 20.09.2011

SIEMENS NX10
CATIA V5 R26
VB7.1
Tecnomatix Process Designer/Simulate<P>Win7 64bit
Office 2016

erstellt am: 20. Feb. 2014 13:26    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 Nur für reimund 10 Unities + Antwort hilfreich

danke jetzt hab ich's.

hab auf dem Schlauch gestanden. ...,sel" durchsucht ja die aktuelle auswahl.

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