Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Fläche verschieben mit Formel - HybridShapeTranslate

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:  Fläche verschieben mit Formel - HybridShapeTranslate (1710 mal gelesen)
Physimathi
Mitglied
Student


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

Beiträge: 88
Registriert: 07.09.2005

erstellt am: 08. Mai. 2007 18:57    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


Test.JPG

 
Hallo,
und wieder ein schweres Problem:

Ich will eine Fläche verschieben, doch ich bekomme die Formel nicht zugewiesen:

Fileskelett:
->Produkt + neues Teil
->Skizze
->Füllen
->Füllen kopieren
->Einfügen Spezial -> als Ergebnis
->Füllen löschen


Das Problem liegt bei "CreateFormula( CATBSTR  iName, CATBSTR  iComment, CATIAParameter  iOutputParameter, CATBSTR  iFormulaBody)

Der CATIAParameter muss als Z As Double vorliegen um ihn dem "hybridShapeTranslate1.DistanceValue = Z".

Doch ist Z As Double, dann gibt es einen "Type mismatch".
->klarer weise

Doch wie Lösen  ?

Hat jemand eine geniale Idee?????

Sub CATMain()

Dim documents1 As Documents
Set documents1 = CATIA.Documents

Dim partDocument1 As PartDocument
Set partDocument1 = documents1.Item("Part1.CATPart")

Dim part1 As Part
Set part1 = partDocument1.Part

Dim param(1) As Parameters
Set param(0) = part1.Parameters
Set param(1) = part1.Parameters

Dim vorXparam As Dimension
Set vorXparam = param(0).CreateDimension("VorX", "LENGTH", 60#)

Dim Startwertparam As Dimension
Set Startwertparam = param(1).CreateDimension("Startwert", "LENGTH", 200#)

Dim hybridBodies1 As HybridBodies
Set hybridBodies1 = part1.HybridBodies

Dim Wzk3Dhybrid As HybridShapeFactory
Set Wzk3Dhybrid = part1.HybridShapeFactory

Dim hybridShapeDirection1 As HybridShapeDirection
Set hybridShapeDirection1 = Wzk3Dhybrid.AddNewDirectionByCoord(1#, 0#, 0#)

Dim Z

Dim Fl1 As HybridShapeSurfaceExplicit
Set Fl1 = hybridBodies1.Item(1).HybridShapes.Item("Fläche.1")

Dim hybridShapeTranslate1 As HybridShapeTranslate
Set hybridShapeTranslate1 = Wzk3Dhybrid.AddNewEmptyTranslate()

Dim ref1 As Reference
Set ref1 = part1.CreateReferenceFromObject(Fl1)
       
hybridShapeTranslate1.ElemToTranslate = ref1

hybridShapeTranslate1.DistanceValue = Z
       
I = 3
Dim formel1 As Formula
Set formel1 = part1.Relations.CreateFormula("Formel.1", "", Z, "Startwert + " & I & "* VorX ")

End Sub


PS: Ich hoffe das Script ist zu verstehen. 

Danke für jeden Lösungsversuch.

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

Lusilnie
Mitglied



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

Beiträge: 1486
Registriert: 13.07.2005

erstellt am: 08. Mai. 2007 23:55    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 Physimathi 10 Unities + Antwort hilfreich

Hallo Physimathi,

es ist schon spät und ich steige nicht mehr vollständig hinter das, was Du als Code angibst.
Doch bei Deiner Fragestellung kommt mir die folgende Idee:
Wenn Du "Z" in der Formel als "Double" benötigst, kannst Du doch "CDbl(Z)" anstelle von "Z" eingeben. Falls das "Vorgabe-Format" ein anderes ist, sollte das Prinzip trotzdem funktionieren: anstelle von "Z" das "Format(Z)" eingeben, schon sollte es gehen!
Allerdings ist die Format-Umwandlung oft mit Problemen verbunden, hervorgerufen durch dieses Problem: "Dezimaltrennzeichen Komma oder Punkt?"


mfg,
Lusilnie

------------------

Alle Aussagen zu DassaultSystemes-Produkten sind sehr optimistisch, selbst diese!!!

frei nach größeren Geistern

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

Physimathi
Mitglied
Student


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

Beiträge: 88
Registriert: 07.09.2005

erstellt am: 09. Mai. 2007 11:52    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


Aktuell.JPG


wasestunsoll.JPG

 
Hallo,
danke für die Anregung. Das man Werte Umwandeln kann, dass wusste ich noch nicht. Toll, doch mein Problem besteht immer noch und ich habe es auch schon weiter eingekreist.

Es ist so:
HybridShapeTranslate hat die Eigenschaft "Distance.Value As Length" (Read Only)
Wenn ich es in Catia händisch eingebe, wird diesem Wert die Formel übergeben. Nur gelingt es mir nicht diesen Verschiebungsparameter mit der Formel zu belegen. -- Kann ja sein es geht nicht --

Der neue Code, wenn ich ihn mal so nennen kann 

Bestimmt ist es nicht sehr kompliziert, doch es ist ein Kniff dabei.

Danke fürs Anschauen.

Sub CATMain()

Dim documents1 As Documents
Set documents1 = CATIA.Documents

Dim partDocument1 As PartDocument
Set partDocument1 = documents1.Item("testskizze100507.CATPart")

Dim part1 As Part
Set part1 = partDocument1.Part
Dim hybridBodies1 As HybridBodies
Set hybridBodies1 = part1.HybridBodies

Dim Wzk3Dhybrid As HybridShapeFactory
Set Wzk3Dhybrid = part1.HybridShapeFactory

Dim hybridBody1 As HybridBody
Set hybridBody1 = hybridBodies1.Item("Geometrisches Set.1")

'Parameter erstellen
  Dim param(2) As Parameters
  Set param(0) = part1.Parameters
  Set param(1) = part1.Parameters
  Set param(2) = part1.Parameters
 
  Dim vorXparam As Dimension
  Set vorXparam = param(0).CreateDimension("VorX", "LENGTH", 60#)
 
  Dim Startwertparam As Dimension
  Set Startwertparam = param(1).CreateDimension("Startwert", "LENGTH", 200#)

' Verschieberichtung
  Dim hybridShapeDirection1 As HybridShapeDirection
  Set hybridShapeDirection1 = Wzk3Dhybrid.AddNewDirectionByCoord(1#, 0#, 0#)

Dim K1Flaeche1 As HybridShapeSurfaceExplicit
Set K1Flaeche1 = hybridBodies1.Item(1).HybridShapes.Item("Fläche.1")

' Translation erstllen und Fläche referentieren
  Dim hybridShapeTranslate1 As HybridShapeTranslate
  Set hybridShapeTranslate1 = Wzk3Dhybrid.AddNewEmptyTranslate()
 
  Dim ref1 As Reference
  Set ref1 = part1.CreateReferenceFromObject(K1Flaeche1)
       
' Formel erstellen und Partparametern zuweisen (das ist falsch)
  Dim zparam As Dimension
  Set zparam = param(2).CreateDimension("vor", "LENGTH", 0)
 
  I = 3

  Dim formel1 As Formula
  Set formel1 = part1.Relations.CreateFormula("Formel.1", "", zparam, "Startwert + " & I & "* VorX ")

' Eigenschaften der Verschiebung
  hybridShapeTranslate1.DistanceValue = 150#  'legt Verschiebungsweite per Wert auf 150 fest
 
  hybridShapeTranslate1.Distance.Value = 250# 'legt Verschiebungsweite per Wert auf 250 fest
  'es gibt einen Wert "Distance.OptionalRelation" welcher anscheinend eine Formel  ist
 
  hybridShapeTranslate1.ElemToTranslate = ref1
 
  hybridShapeTranslate1.VectorType = 0
 
  hybridShapeTranslate1.Direction = hybridShapeDirection1
 
  hybridShapeTranslate1.VolumeResult = False

' Verschiebung im Baum erstellen
  hybridBody1.AppendHybridShape hybridShapeTranslate1

part1.InWorkObject = hybridShapeTranslate1

part1.Update

End Sub

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

CAMiCADse
Mitglied



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

Beiträge: 177
Registriert: 17.02.2006

V5,R19,SP9

erstellt am: 09. Mai. 2007 14: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 Physimathi 10 Unities + Antwort hilfreich

Hallo Physimathi,

So sollte es klappen:

Code:
Dim VERSCHIEBUNG As Length
Set VERSCHIEBUNG = hybridShapeTranslate1.Distance

Set formel1 = Part1.Relations.CreateFormula("Formel.1", "", VERSCHIEBUNG, "Startwert + " & i & "* VorX ")


Gruß
CAMiCADse

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

Physimathi
Mitglied
Student


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

Beiträge: 88
Registriert: 07.09.2005

erstellt am: 09. Mai. 2007 14:26    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,

ich habe die Lösung. Es ist ja doch einfach gewesen. Nur draufkommen muss man.

Erstellt man eine AddNewTranslate(Objekt, Richtung, Weite), dann kann man die Formel dem Wert der Eigenschaft "Distance" gleich zugewiesen werden.

Erstellt man eine AddNewEmptyTranslate(), dann kann man die Formel dem Wert der Eigenschaft "Distance" erst zuweisen, wenn man einen Wert für "DistanceValue" zugeordnet hat.
Danach kann man der Eigenschaft "Distance" eine Formel zuweisen.

-> ohne vorherige ""DistanceValue" Wertezuordnung kommt immer eine "Runtime" Fehlermeldung und CATIA stürzt ab.

Lange gebraucht, doch endlich gelöst 

Sub CATMain()

Dim documents1 As Documents
Set documents1 = CATIA.Documents

Dim partDocument1 As PartDocument
Set partDocument1 = documents1.Item("Part1.CATPart")

Dim part1 As Part
Set part1 = partDocument1.Part
Dim hybridBodies1 As HybridBodies
Set hybridBodies1 = part1.HybridBodies

Dim Wzk3Dhybrid As HybridShapeFactory
Set Wzk3Dhybrid = part1.HybridShapeFactory

Dim hybridBody1 As HybridBody
Set hybridBody1 = hybridBodies1.Item("Geometrisches Set.1")

'Parameter erstellen
  Dim param(2) As Parameters
  Set param(0) = part1.Parameters
  Set param(1) = part1.Parameters
     
  Dim vorXparam As Dimension
  Set vorXparam = param(0).CreateDimension("VorX", "LENGTH", 60#)
 
  Dim Startwertparam As Dimension
  Set Startwertparam = param(1).CreateDimension("Startwert", "LENGTH", 200#)
 
' Verschieberichtung
  Dim hybridShapeDirection1 As HybridShapeDirection
  Set hybridShapeDirection1 = Wzk3Dhybrid.AddNewDirectionByCoord(1#, 0#, 0#)


Dim K1Flaeche1 As HybridShapeSurfaceExplicit
Set K1Flaeche1 = hybridBodies1.Item(1).HybridShapes.Item("Fläche.1")

' leere Translation erstllen und Fläche referentieren
  Dim ref1 As Reference
  Set ref1 = part1.CreateReferenceFromObject(K1Flaeche1)
 
  Dim hybridShapeTranslate1 As HybridShapeTranslate
  Set hybridShapeTranslate1 = Wzk3Dhybrid.AddNewEmptyTranslate()
 
' Eigenschaften der leeren Translation zuweisen
  hybridShapeTranslate1.VectorType = 0
 
  hybridShapeTranslate1.ElemToTranslate = ref1
 
  hybridShapeTranslate1.DistanceValue = vorXparam.Value 'Dieser Wert ist erst zuzuweisen, bevor Formel zuweisbar
 
  hybridShapeTranslate1.Direction = hybridShapeDirection1

  hybridShapeTranslate1.VolumeResult = False

' Formel zuweisen (Formel erst nach "hybridShapeTranslate1.DistanceValue = vorXparam.Value" zuweisbar
  Dim translateDistance1 As Length
  Set translateDistance1 = hybridShapeTranslate1.Distance

  Dim formel1 As Formula
  Set formel1 = part1.Relations.CreateFormula("Formel", "", translateDistance1, "Startwert")

  hybridBody1.AppendHybridShape hybridShapeTranslate1

part1.InWorkObject = hybridShapeTranslate1

part1.Update

End Sub

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



Werkzeugmacher*in / Feinwerkmechaniker*in (m/w/d)

Arbeitgeber: OptiMel Schmelzgußtechnik GmbH
Einsatzort: 58636 Iserlohn
Arbeitszeit:

  • Abwechslungsreiche und verantwortungsvolle Aufgaben in einem flexiblen Umfeld
  • Die Möglichkeit, sich mit eigenen Ideen einzubringen
  • Förderung der persönlichen Kompetenzen mit individuellen Fort- und Weiterbildungsmöglichkeiten
  • ...
Anzeige ansehenFertigung, Produktion
Physimathi
Mitglied
Student


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

Beiträge: 88
Registriert: 07.09.2005

erstellt am: 09. Mai. 2007 14:28    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 an alle 

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