Autor
|
Thema: 2D/3D Spline aus Excel-Makro (6103 mal gelesen)
|
K-Jay Mitglied Student
Beiträge: 18 Registriert: 09.01.2012 Centrino 1,73GHz; 1GB Win XP SP3 Catia V5 R19 SP6 MS Office 2007
|
erstellt am: 16. Feb. 2012 17:41 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich möchte einen 2D-Spline erzeugen (z-Koordinate=0), jedoch später eventuell einen 3D-Spline. In Meiner Excel-Tabelle stehen in der Spalte A die X-Werte, Spalte B die Y-Werte und Spalte C die Z-Werte. Die Punkte lassen sich erfolgreich generieren, jedoch bei der Spline-Erzeugung springt das Makro immer raus mit der Fehlermeldung: Objekt unterstützt diese Eigenschaft oder Methode nicht! Das passiert ziemlich zum Schluss und zwar bei Set SplineCtrPt = PtDoc.Part.HybridShapeFactory.AddNewControlPoint(ReferencesurPoint)! Der vollständige Text lautet: Sub CreationSpline() 'Limitation pt par spline Const NBMaxPtParSpline As Integer = 500 'recuperation de CATIA Dim PtDoc As Object Set PtDoc = GetCATIAPartDocument 'recup de l'HybridBody Dim myHBody As Object Set myHBody = PtDoc.Part.HybridBodies.Item(1) Dim iRang As Integer Dim iValide As Integer Dim X1 As Double Dim Y1 As Double Dim Z1 As Double Dim indice As Integer Dim TableauPtPassage(1 To NBMaxPtParSpline) As Object Dim spline As Object Dim ReferencesurPoint As Object Dim SplineCtrPt As Object iValide = 0 iRang = 1 'Analyse du fichier While iValide <> Cst_iEND 'reinitialisation du tableau de point de la spline indice = 0 'Suppression des enregistrements avant la rencontre du StartCurve While ((iValide <> Cst_iSTARTCurve) And (iValide <> Cst_iEND)) AnalyseChaine iRang, X1, Y1, Z1, iValide iRang = iRang + 1 Wend If (iValide <> Cst_iEND) Then 'On lit jusqu'a rencontre de endcurve -> Spline complete While ((iValide <> Cst_iENDCurve) And (iValide <> Cst_iEND)) AnalyseChaine iRang, X1, Y1, Z1, iValide iRang = iRang + 1 'point valide If (iValide = 0) Then indice = indice + 1 If (indice > NBMaxPtParSpline) Then MsgBox "Trop de point par Spline. Point supprime" Else Set TableauPtPassage(indice) = PtDoc.Part.HybridShapeFactory.AddNewPointCoord(X1, Y1, Z1) myHBody.AppendHybridShape TableauPtPassage(indice) End If End If Wend 'debut de la construction de la spline 'y a t il assez de point ? If (indice < 2) Then MsgBox "Pas assez de point par Spline. Spline supprime" Else Set spline = PtDoc.Part.HybridShapeFactory.AddNewSpline spline.SetSplineType 0 spline.SetClosing 0 'Creation puis ajout des points de passage a la spline For i = 1 To indice Set ReferencesurPoint = PtDoc.Part.CreateReferenceFromObject(TableauPtPassage(i)) Set SplineCtrPt = PtDoc.Part.HybridShapeFactory.AddNewControlPoint(ReferencesurPoint) spline.AddControlPoint SplineCtrPt Next i myHBody.AppendHybridShape spline End If End If Wend PtDoc.Part.Update End Sub Kann mir jemand bei meinem Problem helfen? ------------------ Gruß K-Jay 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: 16. Feb. 2012 19:18 <-- editieren / zitieren --> Unities abgeben: Nur für K-Jay
Servus Gemäß hier muss du die Zeilen umschreiben in: Code: Set ReferencesurPoint = PtDoc.Part.CreateReferenceFromObject(TableauPtPassage(i)) spline.AddPoint ReferencesurPoint
Sonderbar, dass dieses Problem in letzter Zeit niemand anders hatte (auch ich nicht).Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
K-Jay Mitglied Student
Beiträge: 18 Registriert: 09.01.2012 Centrino 1,73GHz; 1GB Win XP SP3 Catia V5 R19 SP6 MS Office 2007
|
erstellt am: 16. Feb. 2012 19:40 <-- editieren / zitieren --> Unities abgeben:
|
K-Jay Mitglied Student
Beiträge: 18 Registriert: 09.01.2012 Centrino 1,73GHz; 1GB Win XP SP3 Catia V5 R19 SP6 MS Office 2007
|
erstellt am: 28. Feb. 2012 22:42 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 28. Feb. 2012 22:53 <-- editieren / zitieren --> Unities abgeben: Nur für K-Jay
Servus Einfach mal die V5Automation öffnen, und nach AddNewSpline suche. Dann zu CATIAHybridshapeSpline weiterhangeln und die Methode SetClosing raus suchen. Diese musst du nur noch an geeigneter Stelle ins Makro einfügen. (zB spline.SetClosing(1))Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PAP Mitglied
Beiträge: 29 Registriert: 08.08.2012 CATIA V5 R19 Win 7 Prof. Intel Xeon 3.6Ghz 16Gb RAM Nvidia Quadro 2000
|
erstellt am: 16. Jun. 2016 20:07 <-- editieren / zitieren --> Unities abgeben: Nur für K-Jay
Hallo, ich verwende prinzipiell die gleiche funktion, jedoch funktioniert die Schleife bei mir nicht. Hier wie es geht: (eben nur für 3 Punkte aus der Collection)
Code:
Sub CreateSpline() Dim hybridShapeFactory1 As HybridShapeFactory Set hybridShapeFactory1 = PUBobjTargetPart.HybridShapeFactory Dim hybridShapeSpline1 As HybridShapeSpline Set hybridShapeSpline1 = hybridShapeFactory1.AddNewSpline() hybridShapeSpline1.SetSplineType 0 hybridShapeSpline1.SetClosing 0 Dim reference1 As Reference Set reference1 = PUBobjTargetPart.CreateReferenceFromObject(PUBcolPoints.Item(1)) hybridShapeSpline1.AddPoint reference1 Set reference1 = PUBobjTargetPart.CreateReferenceFromObject(PUBcolPoints.Item(2)) hybridShapeSpline1.AddPoint reference1 Set reference1 = PUBobjTargetPart.CreateReferenceFromObject(PUBcolPoints.Item(3)) hybridShapeSpline1.AddPoint reference1
PUBobjTargetGeoSet.AppendHybridShape hybridShapeSpline1 PUBobjTargetPart.InWorkObject = hybridShapeSpline1 PUBobjTargetPart.Update End Sub
Und so geht es nicht: (Schleife durch alle Objekte der Collection. Es kommt ein Fehler "Methode update part schlägt fehl", im Part ist ein Spline und der erste Punkt ist so oft wie die Anzahl der Punkte in der Col. Als Punkt im Array angegeben.)
Code:
Sub CreateSpline() Dim hybridShapeFactory1 As HybridShapeFactory Set hybridShapeFactory1 = PUBobjTargetPart.HybridShapeFactory Dim hybridShapeSpline1 As HybridShapeSpline Set hybridShapeSpline1 = hybridShapeFactory1.AddNewSpline() hybridShapeSpline1.SetSplineType 0 hybridShapeSpline1.SetClosing 0 Dim reference1 As Reference Dim i As Integer For i = 1 To PUBcolPoints.Count Set reference1 = PUBobjTargetPart.CreateReferenceFromObject(PUBcolPoints.Item(1)) hybridShapeSpline1.AddPoint reference1 Next
PUBobjTargetGeoSet.AppendHybridShape hybridShapeSpline1 PUBobjTargetPart.InWorkObject = hybridShapeSpline1 PUBobjTargetPart.Update End Sub
Ich verstehe nicht, warum so einfache Sachen nicht klappen?? Hat jemand eine Idee? Vielen Dank und viele 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: 16. Jun. 2016 20:25 <-- editieren / zitieren --> Unities abgeben: Nur für K-Jay
Servus Du verwendest immer das 1. Element, da muss der Zähler rein: Code: Set reference1 = PUBobjTargetPart.CreateReferenceFromObject(PUBcolPoints.Item(i))
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PAP Mitglied
Beiträge: 29 Registriert: 08.08.2012 CATIA V5 R19 Win 7 Prof. Intel Xeon 3.6Ghz 16Gb RAM Nvidia Quadro 2000
|
erstellt am: 17. Jun. 2016 16:08 <-- editieren / zitieren --> Unities abgeben: Nur für K-Jay
|