Autor
|
Thema: Längenauswertung von Linien in einer View (2269 mal gelesen)
|
reimund Mitglied
Beiträge: 231 Registriert: 29.10.2004
|
erstellt am: 27. Apr. 2010 11:25 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 109 Registriert: 27.04.2010 Dell Precision 690 Windows XP V5R19SP3 V5R17SP0
|
erstellt am: 27. Apr. 2010 15:35 <-- editieren / zitieren --> Unities abgeben: Nur für reimund
Ü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
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 / zitieren --> Unities abgeben: Nur für reimund
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
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 / zitieren --> Unities abgeben: Nur für reimund
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
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 20. Feb. 2014 11:47 <-- editieren / zitieren --> Unities abgeben: Nur für reimund
|
buecherm83 Mitglied Ingenieur IT Application Software
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 / zitieren --> Unities abgeben: Nur für reimund
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
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 20. Feb. 2014 12:36 <-- editieren / zitieren --> Unities abgeben: Nur für reimund
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
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 / zitieren --> Unities abgeben: Nur für reimund
|