Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Variablen dynamisch erstellen und damit rechnen

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:  Variablen dynamisch erstellen und damit rechnen (1532 mal gelesen)
iddqdidkfa
Mitglied
Student

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

Beiträge: 4
Registriert: 13.01.2015

Catia V5 R19

erstellt am: 01. Feb. 2015 12: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

Hallo alle zusammen!

Dieses Forum gefällt mir sehr gut und es hat mir schon viel geholfen, ohne mich aktiv mit Beiträgen zu beteiligen.
Aber leider komme ich jetzt nicht weiter und brauche Hilfe…

Zuerst meine Fragen:
Kann ich in einem Catia V5 Makro in einer Schleife Variablen dynamisch erstellen?
Kann der Variablenname in der Schleife hochgezählt werden?
Kann ich auf diese Variablen nach der Schleife gezielt zugreifen und mit ihnen rechnen?
Wie geht das?

Der Sachverhalt:
Ich habe ein Makro, das auf einem Spline Punkte erstellt. Die Punkte werden benannt:

Code:
Punkt.Name = „Startpunkt.“ & Nr  'Nr ist die Laufvariable die bei der gezielten Benennung hilft

Später werden die erstellten Punkte gesucht und selektiert.
Code:
selection1.Search "Name = *Startpunkt.* ,all"

Und über
Code:
GetCoordinates
bekomme ich die Koordinaten der Punkte.
So weit so gut.
Ich möchte die Koordinaten in den dynamisch erstellten Variablen speichern und danach gezielt auf sie zugreifen und mit ihnen weiterrechnen, z.B. Mittelwerte bilden.
Hier komme ich nun leider nicht weiter.

Ich bin für jeden Hilfeansatz dankbar!

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: 01. Feb. 2015 12:45    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 iddqdidkfa 10 Unities + Antwort hilfreich

Servus
Willkommen im Forum.
Du könntest die Punkte zB in einem Array (ggf mehrdimensional) oder einer Collection zwischenspeichern.

Gruß
Bernd

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

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

iddqdidkfa
Mitglied
Student

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

Beiträge: 4
Registriert: 13.01.2015

Catia V5 R19

erstellt am: 01. Feb. 2015 19:27    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

Danke für den Schubs in die richtige Richtung!

Auf die Gefahr hin, dass ich dumme Fragen stelle,
ich bin jetzt soweit:

Code:
Dim Koord(3) As Integer
Dim Arraygroesse As Integer
Set Arraygroesse = selection1.Count
Dim x_Speicher()
Dim y_Speicher()
Dim z_Speicher()
ReDim x_Speicher( Arraygroesse) As Integer
ReDim y_Speicher( Arraygroesse) As Integer
ReDim z_Speicher( Arraygroesse) As Integer


for i = 1 To selection1.Count
Set element = selection1.Item(i)
Set point = element.Value
point.GetCoordinates(Koord)'Koordinaten werden korrekt an Koord übergeben

'Nun sollen die Koordinaten an das jeweilige Array weitergegeben werden, das klappt jedoch nicht

x_Speicher(i) = Koord(0)
y_Speicher(i) = Koord(1)
z_Speicher(i) = Koord(2)

Dim Rechnung  as Integer
'Rechnung = 0

Rechnung = x_Speicher(1) + x_Speicher(2)

'Ausgabe in MsgBox zur Kontrolle
MsgBox ("Ausgabe Variable x_Speicher: " & x_Speicher(2))
MsgBox ("Ausgabe Variable Rechnung: " & Rechnung)
'Box gibt nur den Text wieder, keinen Wert


Ich seh meinen Fehler nicht.

Kann ich die Arraygröße nicht über selection1.Count angeben?
Und/oder ist das i als Pointer für das Array falsch?

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: 01. Feb. 2015 20:18    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 iddqdidkfa 10 Unities + Antwort hilfreich

Hallo,

Die ersten Bugs sind:

Code:

Dim Arraygroesse As Integer
Set Arraygroesse = selection1.Count


Fehlermeldung: 'Object required';
-> Arraygroesse = selection1.Count
Code:

Dim x_Speicher()
Dim y_Speicher()
Dim z_Speicher()
ReDim x_Speicher( Arraygroesse) As Integer
ReDim y_Speicher( Arraygroesse) As Integer
ReDim z_Speicher( Arraygroesse) As Integer


Fehlermeldung: 'Can't change data types'
-> Dim x_Speicher()as integer etc.
Code:

Set point = element.Value


Fehlermeldung: 'Argument not optional';
'Point' is eine VB-Funktion!
-> Set MyPoint = element.Value

Weiter komm' ich ohne Catia nicht.

Ich finde im Code auch nicht, wo Du die Elemente abholst/übergibst.

So wie das im Moment dasteht, bezweifele ich, dass es überhaupt gelaufen ist.

Tschau,
Joe

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

iddqdidkfa
Mitglied
Student

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

Beiträge: 4
Registriert: 13.01.2015

Catia V5 R19

erstellt am: 01. Feb. 2015 21:14    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 das Ganze mal zusammengekürzt:
Code:
'CatScript
'Punkt(e) mit Namen "Startpunkt." muss (müssen) vorhanden sein

Sub CATMain()

On Error Resume Next
Set document = CATIA.ActiveDocument
Set filesys = CATIA.FileSystem

Dim selection1 As Selection
Set selection1 = document.Selection

selection1.Search "Name = *Startpunkt.* ,all"

if err <> 0 Then
msgbox("Keine Punkte selektiert!")
End If

Dim Koord(3) As Integer
Dim Arraygroesse As Integer
Set Arraygroesse = selection1.Count
Dim x_Speicher()
Dim y_Speicher()
Dim z_Speicher()
ReDim x_Speicher( Arraygroesse) As Integer
ReDim y_Speicher( Arraygroesse) As Integer
ReDim z_Speicher( Arraygroesse) As Integer

for i = 1 To selection1.Count
Set element = selection1.Item(i)
Set point = element.Value
point.GetCoordinates(Koord)

x_Speicher(i) = Koord(0)
y_Speicher(i) = Koord(1)
z_Speicher(i) = Koord(2)

if  i <> selection1.Count Then

End If

Next

Dim Rechnung_1  As Integer
Dim Rechnung_2 As Integer

Rechnung_1 = Koord(0)
Rechnung_2 = x_Speicher(1) + x_Speicher(2)
msgbox ("Script wurde ausgeführt ")

MsgBox ("Ausgabe Rechnung_1 - (Koord(0): " & Rechnung_1)
MsgBox ("Ausgabe Rechnung_2 (x_Speicher(1) + x_Speicher(2)) -: " & Rechnung_2)

End Sub


In CATScript läuft es durch. Koord enthält die richtigen Koordinaten, die Weitergabe an x_Speicher(i) funktioniert aber nicht. MsgBox mit Rechnung_1 ist korrekt, die Andere gibt nur den Text zurück und keinen Wert.
In MS VBScript kommen Fehlermeldungen.
Es tut mir leid, dass das in CATScript ist hätte ich vorher sagen müssen!

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: 01. Feb. 2015 21:33    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 iddqdidkfa 10 Unities + Antwort hilfreich

Servus
Schalte am besten mal die Fehlerbehandlung mit "On error goto 0" wieder ein, sonst werden dir keine Fehler angezeigt.
Wenn du die Tipps von Joe einbaust läuft dein Code durch. (ggf noch manche Dimensionen anpassen (zB Double statt Integer).

Gruß
Bernd

PS: Vorsicht, bei Arrays läuft der Zähler bei 0 los.

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

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: 01. Feb. 2015 21:33    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 iddqdidkfa 10 Unities + Antwort hilfreich

Kommentier mal 'On Error ...' aus und schau, ob's dann auch durchläuft
oder nur die Fehler ignoriert.

Tschau,
Joe

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: 01. Feb. 2015 22:59    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 iddqdidkfa 10 Unities + Antwort hilfreich

Etwas versteh ich noch nicht ganz:

Du hast die Punkte eben erstellt, d.h. Du kennst sowohl Name als auch Anzahl und Ablageort(Geom. Set/HybridBody).

Anstatt die Punkte später nochmal zu suchen, könntest sie gleich in ein Array schreiben und später der Routine das Array übergeben.

In der Routine greifst dann über

Hybridbodies.Item(<AblageOrt> ).Hybridshapes.Item(<Name> )

auf die Punkte zu.

Die Redims sind dann überflüssig, die Selektion auch.

Tschau,
Joe

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

iddqdidkfa
Mitglied
Student

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

Beiträge: 4
Registriert: 13.01.2015

Catia V5 R19

erstellt am: 03. Feb. 2015 20:48    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 Abend!

Ich hab leider mal wieder zu kompliziert gedacht.
Die Variablen spreche ich nun direkt über:

Code:
HybridBodies.Item("SetName").HybridShapes.Item("PunktName." &i)

Danke für den Tipp!
Es funktioniert nun auch, dass die Werte aus dem Koord Array in einen anderen übergeben werden, der Start des Arrays bei 0 wird nun auch berücksichtigt.

Danke für Eure Hilfe!

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