Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  2D Spline als Makro

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:  2D Spline als Makro (1207 mal gelesen)
nikita92
Mitglied
Student


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

Beiträge: 20
Registriert: 17.11.2016

erstellt am: 17. Nov. 2016 16:41    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

Guten Tag,
ich muss für die Uni ein Makro in CatiaV5 erstellen. Leider hatten wir nur ein paar Wochen die Grundlagen erklärt bekommen und die Schnittstelle VB - Catia bringt mich zum verzweifeln.

Aktuell habe ich folgendes problem:

Ich möchte eine Skizze erstellen mit min. 3 Punkten und diese mithilfe eines 2d splines verbinden.

Die Skizze  erstellen ist kein Problem und auch die 3 Punkte habe ich.
Wenn ich die Hilfe richtig verstehe muss ich nun die Punkte einem array zuweisen?

Das sind meine Punkte:

point2df(0) = factory2d2.CreatePoint(100, 0.0)
point2df(1) = factory2d2.CreatePoint(50.0, 5))
point2df(2) = factory2d2.CreatePoint(0.0, 0.0)

wie kann ich diese nun mit einem 2d-Spline verbinden? Ich kann nichtmal ein array mit 2 Spaleten (x/y) deklarieren.

Laut Hilfe soll der typ "CATSafeArrayVariant" verwendet werden aber VB sagt den gibts nicht.

Tut mir Leid aber bin totaler Anfänger auf dem Gebiet und komme nicht voran.

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

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 17. Nov. 2016 17:10    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 nikita92 10 Unities + Antwort hilfreich

Hi nikita,

Zitat:
wie kann ich diese nun mit einem 2d-Spline verbinden? Ich kann nichtmal ein array mit 2 Spaleten (x/y) deklarieren

Übergeben musst ein Array von Punkt-Objekten, also ein-dimensional,

zB.

Dim arrPt2D()  'dynamisches Array von Variants(default) ohne Array-Dimensionen

Nachdem die Punktanzahl bekannt ist(aber vo:

Redim arrPt2D(iNumPt) 'redim ist eine Anweisung, keine Deklaration! iNumPt ist die anzahl der Punkte;

Das Array geht von arrPt2d(0) bis arrPt2d(iNumPt - 1).

Folgende Routine erzeugt 3D-Splines:

Code:

'---------------------------------------------------------------------------------------
' Procedure : CreateSpline
' DateTime  : 06.07.2014 01:00
' Author    : Joseph Herzog
' Purpose  : create a spline using an array of points; no tangents
' Parms    : arrPt() - point array
'---------------------------------------------------------------------------------------
'
Sub CreateSpline(arrPt() As HybridShapePointCoord)
  Dim n As Integer
 
  Dim ad As Document
  Set ad = CATIA.ActiveDocument
 
  Dim adp As Part
  Set adp = ad.Part
 
  Dim hSF1 As factory
  Set hSF1 = adp.HybridShapeFactory
 
  Dim hSSpl1 As HybridShapeSpline
  Set hSSpl1 = hSF1.AddNewSpline()
 
  hSSpl1.SetSplineType 0                                  'cubic spline
  hSSpl1.SetClosing 0                                      'do not close
 
  Dim hBs1 As hybridBodies
  Set hBs1 = adp.hybridBodies

  Dim hB1 As HybridBody
  Set hB1 = hBs1.Item("WireFrame")
 
  Dim Ref1 As Reference
 
  For n = 0 To UBound(arrPt)
      Set Ref1 = adp.CreateReferenceFromObject(arrPt(n))
      hSSpl1.AddPointWithConstraintExplicit Ref1, Nothing, -1#, 1, Nothing, 0#
  Next
 
  hB1.AppendHybridShape hSSpl1
  adp.InWorkObject = hSSpl1
  hSSpl1.Name = "Route_Spline"
  adp.Update
'---------------------------------------------------------------------------------------
'das einfärben muss nach dem update stehen!?!
  SetElementColor hSSpl1, 0, 255, 0                                  'green

End Sub
'---------------------------------------------------------------------------------------



Für 2D läuft's ähnlich.

Die entsprechende Funktion heisst:

Zitat:
aus CAA-Doku:

o Func CreateSpline( CATSafeArrayVariant  iPoles) As CATIASpline2D 

Creates and returns a 2D b-spline.
Parameters:
iPoles
An array of CATIAPoint2D forming the poles of the b-spline.



Allerdings musst das innerhalb eines geöffneten Sketches machen.
Siehe Forumsbeiträge zu Sketch.

Der Makro-Rekorder wird auch was aufzeichnen.
Fang am Besten damit an.

Tschau,
Joe

------------------
Inoffizielle Catia Hilfeseite

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

nikita92
Mitglied
Student


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

Beiträge: 20
Registriert: 17.11.2016

erstellt am: 18. Nov. 2016 07:07    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

Ich habe es jetzt geschafft:

        ref1 = MyPart.CreateReferenceFromObject(MyPart.OriginElements.PlaneZX) '#### Eine Referenz zur ZX-Grundebene erzeugen und ref1 zuweisen

        Sketch2 = Sketches1.Add(ref1) '#### eine neue Skizze auf ref1 erzeugen
        factory2d2 = Sketch2.OpenEdition '#### Die Skizze öffnen und die Fabrik für 2D-Elemente der Variablen factory2d1 zuweisen

        Dim spline As Spline2D
        Dim ref2() As Reference
        Dim Punkte(50) As Object


        Punkte(0) = factory2d2.CreateControlPoint(r(1), b(3))
        Punkte(1) = factory2d2.CreateControlPoint(50.0, b(7))
        Punkte(2) = factory2d2.CreateControlPoint(0.0, b(3))

        spline = factory2d2.CreateSpline(Punkte)

        spline.Name = "Spline"

        Sketch2.CloseEdition() '#### Skizze schließen
        MyPart.Update() '### Aktualisieren

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



Ingenieur Projekte Elektro-, Leit- und Kommunikationstechnik (w-m-d)

Bei den Hamburger Energiewerken zu arbeiten, heißt die Energiezukunft der Stadt mitzugestalten. Das Unternehmen versorgt mehr als 168.000 Kunden der Hansestadt mit Strom und Gas und liefert rund 25 Prozent der Hamburger Nutzwärme in Form von Fernwärme.
Bis spätestens 2030 werden wir Fernwärme kohlefrei erzeugen, bis 2045 klimaneutral. Damit leisten die Hamburger Energiewerke mit 900 Mitarbeitern den größten Einzelbeitrag zum Erreichen der städtischen Klimaschutzziele....

Anzeige ansehenElektrotechnik, Elektronik
joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 18. Nov. 2016 10:37    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 nikita92 10 Unities + Antwort hilfreich

Hi nikita,

na siehste!

Ein kleiner Hinweis zu Variablennamen:

Hüte Dich vor geschützten Namen, d.h solche, die in der Programmiersprache bereits eine Bedeutung haben.
Ich denke da an beispielsweise 'Spline'.

Eher hätt' ich da 'oSpln' oder oCrv' verwendet.
'o' um anzudeuten, dass es sich um ein Object handelt und 'Spln' bzw. 'Crv' um genauer zu spezifizieren, was für ein Element es ist.

Generell: Gewöhne Dir an, Deine Variablen entsprechend einer(Deiner) Nomenklatur zu benennen.
Warum? Weniger Bugs, leichteres Lesen, schnelleres (Wieder-)Verstehen.
Etwa wie hier:
http://dotnet.mvps.org/vb/articles/conventions/

Tschau,
Joe

------------------
Inoffizielle Catia Hilfeseite

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