Autor
|
Thema: Makro Befehl zum Erzeugen eines Koordinatensystems (4992 mal gelesen)
|
Ex-Mitglied
|
erstellt am: 02. Aug. 2010 10:49 <-- editieren / zitieren -->
Hallo, gibt es einen Befehl für das Erzeugen eines Koordinatensystems. So ähnlich wie Set Point für einen Punkt? |
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: 02. Aug. 2010 10:59 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 02. Aug. 2010 11:07 <-- editieren / zitieren -->
Ich habe folgenden Quelltext, der mir Punkte aus EXCEL in CATIA einliest. Besteht die Möglichkeit auf diese erzeugten Punkte ebenfalls über das Makro ein Koordinatensystem zu erzeugen? Sub CATMain()
Dim Excel As Application Dim WB As Workbook Dim WS As Worksheet Dim Element As Text Dim XCoord As Double Dim YCoord As Double Dim ZCoord As Double Dim nRow As Integer Dim Part1 As Part Dim HybShapeFac As Factory Dim Point As HybridShapePointCoord Dim HKoerper As HybridBodies Dim measurement_points As HybridBody Dim oEingabe Dim cDateiPfad CATIA.DisplayFileAlerts = False Dim Message, Style, Title, Response, MyString Message = ("Dieses Makro importiert Punkte aus einer Exceltabelle. Bitte folgendes beachten:" &_ ""&(chr(13))&_ (chr(13)) &_ " - Punktname und Koordinaten erst ab Zeile 2"&_ (chr(13)) &_ " - Spalten A-D verwenden = Name - X - Y - Z (Werte als normale Zahl mit . getrennt)"&_ (chr(13)) &_ ""&(chr(13))&_ "Möchten Sie fortfahren ?") Style = vbYesNo + vbDefaultButton2 'Define buttons. Title = "Punkte importieren " Response = MsgBox(Message, Style, Title) If Response = vbYes Then ' User chose Yes. MyString = "Ja" oEingabe="C:\Temp\ExcelPunkte.xls" oEingabe=InputBox("Bitte Dateipfad der Excel Datei angeben:","Auswahl Excel Tabelle",oEingabe) cDateiPfad=oEingabe Set Excel = CreateObject("Excel.Application") ' Excel starten Excel.Visible = True ' arbeitsmappe öffnen Set WB = Excel.Workbooks.Open(cDateiPfad) ' tabelle holen Set WS = WB.Worksheets.Item(1) ' aktives part holen Set Part1 = CATIA.ActiveDocument.Part ' factory zu erstellen der Punkte Set HybShapeFac = Part1.HybridShapeFactory ' hauptkörper holen zum einfügen der Punkte Set HKoerper = CATIA.ActiveDocument.Part.HybridBodies Set measurement_points = HKoerper.Add() ' Koordianten beginnen in der 2 Zeile der Tabelle nRow = 2 ' Zeilen solange einlesen bis nichts mehr drin steht Do ' Spalte 1 = Name // Spalte 2,3,4 = Werte Element = (WS.Cells(nRow, 1).Text) XCoord = CDbl(WS.Cells(nRow, 2).Value) YCoord = CDbl(WS.Cells(nRow, 3).Value) ZCoord = CDbl(WS.Cells(nRow, 4).Value) ' Punkt mit den Koordinaten erstellen Set Point = HybShapeFac.AddNewPointCoord(XCoord, YCoord, ZCoord) ' Punkt ein Hauptkörper einfügen measurement_points.AppendHybridShape Point Point.Name = Element nRow = nRow + 1 ' Zeile hochzählen ' Schleife verlassen, wenn Zelle leer ist Loop While (WS.Cells(nRow, 2).Text <> "") Part1.Update ' Part aktualisieren Excel.Quit ' Ecxel schliessen MsgBox "Punkterzeugung erfolgreich abgeschlossen !" & vbCrLf & s ' Else ' User chose No. MyString = "No" End If End Sub |
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: 02. Aug. 2010 11:11 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 02. Aug. 2010 11:14 <-- editieren / zitieren -->
Ja, ich möchte auf jeden Punkt automatisch ein Achsenkreuz erstellen. Die Ausrichtung derAchsensysteme soll durch weitere Koordinaten in der EXCEL Liste bestimmt werden. |
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: 02. Aug. 2010 13:31 <-- editieren / zitieren --> Unities abgeben:
Hallo , Schau dir mal das folgende Beispielscript an. Die *.xlsx Datei welche ich als Vorlage genommen habe befindet sich im Anhang des Posts. Die Richtungen der Koordinatensysteme werden über die Eigenschaft catAxisSystemAxisByCoordinates festgelegt. Hier musst du eventuell das Script auf deine Bedürfnisse anpassen
Code:
Option Explicit '------------------------------------------------------------------------------ '---------------------------PointAndAxisReader v1.0--------------------------- '------------------------------------------------------------------------------ ' 'Author: Daniel Frauenrath 'Mail: daniel.frauenrath@gmx.com 'Release: 02.08.2010 'Version: 1.0 ' '******************************************************************************** '<<<<<<<<<<<<<<<<<<<<<<<<<<Beschreibung / Discription>>>>>>>>>>>>>>>>>>>>>>>>>>>> '******************************************************************************** 'DE: ' '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 'EN: ' '********************************************************************************* '<<<<<<<<<<<<<<<<<<<<<<<<<<Veränderungen / Change log>>>>>>>>>>>>>>>>>>>>>>>>>>>>> '********************************************************************************* 'Autor: Datum: Zeile: Modul: Anmerkung: '--------------------------------------------------------------------------------- ' '********************************************************************************** '<<<<<<<<<<<<<<<<<<<<<<<<<<globale Variablen>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> '********************************************************************************** ' ' '********************************************************************************** '<<<<<<<<<<<<<<<<<<<<<<<<<<Hauptmakro (CATMain)>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> '********************************************************************************** Sub CATMain()'***DEKLARATIONEN*** Dim intWindowsObj As Windows Dim intDocObj As Document Dim intEXCELObj As Object Dim intWorkbookObj As Object Dim intWorksheetObj As Object Dim intEXCELFilePathStr As String Dim intStartRowLng As Long 'STARTZEILE FUER KOORDINATENWERTE Dim intStartColumnLng As Long 'STARTSPALTE FUER KOORDINATENWERTE Dim intColumnCountLng As Long Dim intPointColl As New Collection Dim intPartObj As Part Dim intHybBodyObj As HybridBody Dim intHybShapeFacObj As HybridShapeFactory Dim intPointCoordObj As HybridShapePointCoord Dim intAxisSystemsObj As AxisSystems Dim intAxisSysObj As Object 'AxisSystem Dim i As Long Dim intAxisCoordDirArr(2) '***Abfrage Dokumente**** Set intWindowsObj = CATIA.Windows If intWindowsObj.Count = 0 Then MsgBox "Es ist kein Dokument geladen!" + Chr(10) + "Das Makro kann nicht ausgeführt werden und wird beendet!" _ , vbCritical, "Keine Dokument geladen" Exit Sub End If Set intDocObj = CATIA.ActiveDocument If TypeName(intDocObj) <> "PartDocument" Then MsgBox "Das aktive Dokument ist kein CATPart!" + Chr(10) + "Das Makro kann nicht ausgeführt werden!", _ vbCritical + vbOKOnly, "Falscher Dateityp" Exit Sub End If '***EXCEL OBJEKT ERZEUGEN On Error Resume Next Set intEXCELObj = GetObject(, "EXCEL.Application") If Err.Number <> 0 Then Set intEXCELObj = CreateObject("EXCEL.Application") End If If intEXCELObj Is Nothing Then MsgBox "Das EXCEL Objekt konnte nicht erzeugt werden!" + vbNewLine + _ "Stellen Sie sicher das EXCEL instelliert und ordnungsgemaess registriert wurde", vbCritical, "ABBRUCH: KEIN EXCEL" Exit Sub Else 'intEXCELObj.Visible = False Err.Clear On Error GoTo 0 End If '***DATEI ÖFFNEN / Worksheet zuweisen intEXCELFilePathStr = CATIA.FileSelectionBox("Bitte waehlen Sie die Exceldatei aus in der sich die Koordinaten befinden", "*.xlsx", CatFileSelectionModeOpen) If intEXCELFilePathStr = "" Then MsgBox "Sie haben die Auswahl der Exceldatei abgebrochen" + vbNewLine + _ "Das Makro wird beendet", vbExclamation, "ABBRUCH DURCH ANWENDER" Exit Sub End If Set intWorkbookObj = intEXCELObj.Workbooks.Open(intEXCELFilePathStr) Set intWorksheetObj = intWorkbookObj.Worksheets.Item(1) '***COLLECTION MIT EXCEL WERTEN FUELLEN (1. Name, 2. X-Koord, 3. Y-Koord, 4. Z-Koord, 5. X-Richtung, 6. Y-Richtung, 7. Z-Richtung, usw.) intStartColumnLng = 1 '(= A) For intStartRowLng = 3 To intWorksheetObj.Cells(intWorksheetObj.Rows.Count, intStartColumnLng).End(-4162).Row If intEXCELObj.WorkSheetFunction.CountIf(intWorksheetObj.Range(intWorksheetObj.Cells(2, intStartColumnLng), intWorksheetObj.Cells(intStartRowLng, intStartColumnLng)), _ intWorksheetObj.Cells(intStartRowLng, intStartColumnLng)) = 1 Then intPointColl.Add intWorksheetObj.Cells(intStartRowLng, intStartColumnLng).Formula For intColumnCountLng = intStartColumnLng + 1 To 7 intPointColl.Add intWorksheetObj.Cells(intStartRowLng, intColumnCountLng).Formula Next End If Next '***GEOMETRISCHES SET ERSTELLEN Set intPartObj = intDocObj.Part Set intHybBodyObj = intPartObj.HybridBodies.Add intHybBodyObj.Name = "__POINT_IMPORT" '***PUNKTE UND ACHSENSYSTEME ERSTELLEN Set intAxisSystemsObj = intPartObj.AxisSystems Set intHybShapeFacObj = intPartObj.HybridShapeFactory For i = 1 To intPointColl.Count Step 7 '***MESSPUNKTE ERSTELLEN Set intPointCoordObj = intHybShapeFacObj.AddNewPointCoord(CDbl(intPointColl.Item(i + 1)), _ CDbl(intPointColl.Item(i + 2)), CDbl(intPointColl.Item(i + 3))) intHybBodyObj.AppendHybridShape intPointCoordObj intPointCoordObj.Name = CStr(intPointColl.Item(i)) intPartObj.Update '***ACHSENSYSTEM ERSTELLEN Set intAxisSysObj = intAxisSystemsObj.Add intAxisSysObj.OriginType = catAxisSystemOriginByPoint intAxisSysObj.OriginPoint = intPartObj.CreateReferenceFromObject(intPointCoordObj) intAxisSysObj.XAxisType = catAxisSystemAxisByCoordinates intAxisCoordDirArr(0) = CDbl(intPointColl.Item(i + 4)) intAxisCoordDirArr(1) = 0 intAxisCoordDirArr(2) = 0 intAxisSysObj.PutXAxis intAxisCoordDirArr intAxisSysObj.YAxisType = catAxisSystemAxisByCoordinates intAxisCoordDirArr(0) = 0 intAxisCoordDirArr(1) = CDbl(intPointColl.Item(i + 5)) intAxisCoordDirArr(2) = 0 intAxisSysObj.PutYAxis intAxisCoordDirArr intAxisSysObj.ZAxisType = catAxisSystemAxisByCoordinates intAxisCoordDirArr(0) = 0 intAxisCoordDirArr(1) = 0 intAxisCoordDirArr(2) = CDbl(intPointColl.Item(i + 6)) intAxisSysObj.PutZAxis intAxisCoordDirArr intAxisSysObj.Name = CStr(intPointColl.Item(i)) intPartObj.Update '***OBJEKTE LEEREN Set intPointCoordObj = Nothing Set intAxisSysObj = Nothing Next End Sub
------------------ 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 |
Ex-Mitglied
|
erstellt am: 02. Aug. 2010 13:39 <-- editieren / zitieren -->
Hallo Daniel, vielen Dank für deinen Hinweis. Ich werde das gleich mal ausprobieren... |
Ex-Mitglied
|
erstellt am: 02. Aug. 2010 14:05 <-- editieren / zitieren -->
Zitat: Original erstellt von DanielFr.: Hallo ,Schau dir mal das folgende Beispielscript an. Die *.xlsx Datei welche ich als Vorlage genommen habe befindet sich im Anhang des Posts. Die Richtungen der Koordinatensysteme werden über die Eigenschaft catAxisSystemAxisByCoordinates festgelegt. Hier musst du eventuell das Script auf deine Bedürfnisse anpassen [code] Option Explicit '
Hallo Daniel, ich kann das Makro bei mir nicht ausführen. Was mache ich falsch? Ich habe es einmal versucht als catvbs bzw. als CATScript zu starten... |
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: 02. Aug. 2010 16:25 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 02. Aug. 2010 16:29 <-- editieren / zitieren -->
Hallo Daniel, ich hab von programmieren ehrlich gesagt keine Ahnung. Kannst du mir helfen, damit ich dieses Makro auch als CATSkript zum laufen bringen kann? ... Vielen Dank |
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: 03. Aug. 2010 10:10 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 03. Aug. 2010 11:02 <-- editieren / zitieren -->
Hallo Daniel, vielen Dank für deinen Hinweis, jetzt funktioniert das Makro einwandfrei! |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|