Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Join aus ausgewählten Objekten erzeugen

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:  Join aus ausgewählten Objekten erzeugen (3140 mal gelesen)
davischr
Mitglied
Student

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

Beiträge: 9
Registriert: 04.01.2011

@work
Intel(R) Core(TM)2 Duo CPU T7700 @ 2.40GHz
4GB RAM
NVIDIA Quadro FX 1600M
Windows XP SP2 64bit
CATIAv5 R19 SPK3 HF50 64bit

erstellt am: 04. Jan. 2011 09:06    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 zusammen,

Ich möchte ein Makro machen, dass mir durch zwei Benutzer Selektionen einen Join an einem bestimmten Ort erzeugt.

Der Code den ich bis jetzt geschrieben habe funktioniert soweit, dass es keine Fehlermeldung ausgibt. Jedoch wird kein Join erzeugt. Kann mir da jemand helfen?

Code:
Language="VBSCRIPT"

Sub CATMain()

Dim partDocument1 As Document
Set partDocument1 = CATIA.ActiveDocument

Dim selection1 As Selection
Set selection1 = partDocument1.Selection
Dim selection2 As Selection
Set selection2 = partDocument1.Selection

Dim part1 As Part
Set part1 = partDocument1.Part

Dim NameArray1() as String
Dim TypeArray1() as AnyObject

Dim NameArray2() as String
Dim TypeArray2() as AnyObject

Dim strFilter(0)

Dim oParent1 as AnyObject
Dim oParent2 as AnyObject

Dim ref1 as Reference
Dim ref2 as Reference

Dim sObject1 as Object 'first Object to select
Dim sObject2 as Object 'Second Object to select

Set sObject1 = selection1
Set sObject2 = selection2

'####################
' Objekt selektieren
'####################
ReDim NameArray1(1)
ReDim TypeArray1(1)
ReDim NameArray2(1)
ReDim TypeArray2(1)
strFilter(0) = "AnyObject"

sObject1.SelectElement2 strFilter, "Bitte selektiere etwas",False
NameArray1(1) = sObject1.item(1).value.name
Set obj1 = partDocument1.GetItem(NameArray1(1))
Set ref1 = obj1.CreateReferenceFromName(NameArray1(1))

sObject2.SelectElement2 strFilter, "Bitte selektiere etwas",False
NameArray2(1) = sObject2.item(1).value.name
Set obj2 = partDocument1.GetItem(NameArray2(1))
Set ref2 = obj2.CreateReferenceFromName(NameArray2(1))

Dim hybridShapeFactory1 As Factory
Set hybridShapeFactory1 = part1.HybridShapeFactory

Dim hybridShapeAssemble1 As HybridShapeAssemble
Set hybridShapeAssemble1 = hybridShapeFactory1.AddNewJoin(ref1, ref2)

hybridShapeAssemble1.SetConnex 0

hybridShapeAssemble1.SetManifold 0

hybridShapeAssemble1.SetSimplify 0

hybridShapeAssemble1.SetSuppressMode 0

hybridShapeAssemble1.SetDeviation 0.001000

hybridShapeAssemble1.SetAngularToleranceMode 0

hybridShapeAssemble1.SetAngularTolerance 0.500000

hybridShapeAssemble1.SetFederationPropagation 0


Dim hybridBody1 as HybridBody
Set hybridBody1 = sObject2.item(1).value
hybridBody1.AppendHybridShape hybridShapeAssemble1

part1.InWorkObject = hybridShapeAssemble1

part1.Update 

End Sub


Vielen Dank schon im Voraus

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

davischr
Mitglied
Student

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

Beiträge: 9
Registriert: 04.01.2011

@work
Intel(R) Core(TM)2 Duo CPU T7700 @ 2.40GHz
4GB RAM
NVIDIA Quadro FX 1600M
Windows XP SP2 64bit
CATIAv5 R19 SPK3 HF50 64bit

erstellt am: 04. Jan. 2011 10:35    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 nach längerem Versuchen bemerkt, dass der Join in den zweiten selektierten Join erzeugt wird.
Nun habe ich den letzten Teil des Programms geändert, so dass nun ein GeoSet ausgewählt und der Join in diesem erstellt wird:

Code:

...
sObject3.SelectElement2 strFilter, "Bitte selektiere GeoSet für Join",False

Dim hybridBody1 as HybridBody
Set  hybridBody1 = sObject3.item(1).value
hybridBody1.AppendHybridShape hybridShapeAssemble1
...


Mein Problem ist nun, dass der Join leer ist, ich vermute einmal, dass das mit den Referenzen nicht hinhaut.

Hat da jemand eine Idee??

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

davischr
Mitglied
Student

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

Beiträge: 9
Registriert: 04.01.2011

@work
Intel(R) Core(TM)2 Duo CPU T7700 @ 2.40GHz
4GB RAM
NVIDIA Quadro FX 1600M
Windows XP SP2 64bit
CATIAv5 R19 SPK3 HF50 64bit

erstellt am: 04. Jan. 2011 14: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 zusammen,

Ich habe es jetzt selber geschafft einen Join zu erzeugen. Grundlegen für mein Problem war die Zeile:

Code:

...
Set ref1 = part1.CreateReferenceFromObject(sObject1.Item(1).Value)
...


Und da vorallem das Argument der Funktion also sObject1.Item(1).Value

Hier noch der vollständige Code:

Code:

'###################################
' Script um zwei Elemente/Objekte in einen Join zusammenzufassen.
' Dieser Join wird an einer auszuwählenden Stelle angelegt.
'###################################

Language="VBSCRIPT"

Sub CATMain()

Dim partDocument1 As Document
Set partDocument1 = CATIA.ActiveDocument

Dim part1 As Part
Set part1 = partDocument1.Part

Dim selection1 As Selection
Set selection1 = partDocument1.Selection

Dim selection2 As Selection
Set selection2 = partDocument1.Selection

Dim selection3 As Selection
Set selection3 = partDocument1.Selection

Dim strFilter(0)

Dim ref1 as Reference
Dim ref2 as Reference

Dim sObject1 as Object 'first Object to select
Dim sObject2 as Object 'Second Object to select
Dim sObject3 as Object 'GeoSet to select

Set sObject1 = selection1
Set sObject2 = selection2
Set sObject3 = selection3

'####################
' Objekte selektieren
'####################
strFilter(0) = "AnyObject"

'####################
' Erstes Objekt
'####################

sObject1.SelectElement2 strFilter, "Bitte selektiere etwas",False

Set ref1 = part1.CreateReferenceFromObject(sObject1.Item(1).Value)

msgbox(ref1.displayname)

'####################
' Zweites Objekt
'####################

sObject2.SelectElement2 strFilter, "Bitte selektiere etwas",False

Set ref2 = part1.CreateReferenceFromObject(sObject2.Item(1).Value)

MsgBox(ref2.displayname)

'####################
' creating Join
'####################

Dim hybridShapeFactory1 As Factory
Set hybridShapeFactory1 = part1.HybridShapeFactory

Dim hybridShapeAssemble1 As HybridShapeAssemble
Set hybridShapeAssemble1 = hybridShapeFactory1.AddNewJoin(ref1, ref2)

hybridShapeAssemble1.SetConnex 0

hybridShapeAssemble1.SetManifold 0

hybridShapeAssemble1.SetSimplify 0

hybridShapeAssemble1.SetSuppressMode 0

hybridShapeAssemble1.SetDeviation 0.001000

hybridShapeAssemble1.SetAngularToleranceMode 0

hybridShapeAssemble1.SetAngularTolerance 0.500000

hybridShapeAssemble1.SetFederationPropagation 0

'######################
' Selektion des GeoSet für den Join
'######################

sObject3.SelectElement2 strFilter, "Bitte selektiere GeoSet für Join",False

Dim hybridBody1 as HybridBody
Set  hybridBody1 = sObject3.item(1).value
hybridBody1.AppendHybridShape hybridShapeAssemble1

part1.InWorkObject = hybridShapeAssemble1

part1.Update

End Sub



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

ThomasJay
Mitglied
Dipl-Ing


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

Beiträge: 159
Registriert: 19.04.2011

CATIA V5 R19

erstellt am: 19. Apr. 2011 12:38    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 davischr 10 Unities + Antwort hilfreich

Hallo, ich möchte genau das selbe machen, aber wenn ich deinen Code in meinen VBA Editor kopiere funktioniert es nicht. In welchem Editor hast du dass den geschrieben?
Ich habe den Code abgeändert. Jetzt geht es soweit dass er mir einen Join erzeugt. Dieser enthält dann aber nur eines der 2 ausgewählten Elemente, dafür aber doppelt.
Kannst du mir sagen wo mein Fehler ist?


Sub CATMain()


Dim Document As Document
Set Document = CATIA.ActiveDocument
Dim MyPart As Part
Set MyPart = Document.Part


Dim Selection(1) As Object
Set Selection(0) = CATIA.ActiveDocument.Selection
Selection(0).Clear
Set Selection(1) = CATIA.ActiveDocument.Selection
Selection(1).Clear


Dim E
Dim F
Dim Was(0)
Was(0) = "Face"

E = Selection(0).SelectElement2(Was, "auswahl", False)
F = Selection(1).SelectElement2(Was, "2.auswahl", False)


Dim myobj As Object
Set myobj = Selection(0).Item(1).Value

Dim myobj2 As Object
Set myobj2 = Selection(1).Item(1).Value

Dim k1 As String
Dim k2 As String


'Referenzen

k1 = Selection(0).Item(1).Value.Name
k2 = Selection(1).Item(1).Value.Name
Dim ref1 As Reference
Set ref1 = MyPart.CreateReferenceFromName(k1)
Dim ref2 As Reference
Set ref2 = MyPart.CreateReferenceFromName(k2)

'Factory

Dim HBodies As HybridBodies
Set HBodies = MyPart.HybridBodies
Dim GeoSet As HybridBody
Set GeoSet = HBodies.Add
GeoSet.Name = "Neuer Join"

Dim Factory As HybridShapeFactory
Set Factory = MyPart.HybridShapeFactory


'  Join erzeugen

Dim Join As HybridShapeAssemble
Set Join = Factory.AddNewJoin(ref1, ref2)
Join.AddElement myobj
Join.AddElement myobj2


GeoSet.AppendHybridShape Join

End Sub

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: 19. Apr. 2011 12: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 Nur für davischr 10 Unities + Antwort hilfreich

Servus
IMHOIn my humble oppinion (Meiner Meinung nach) liegt es daran, dass es in einem Dokument nur eine Selektion gibt.
Also zunächst ein Element selektieren lassen, dieses an ein Objekt übergeben (oder gleich die Referenz erzeugen?) und danach das 2. Element selektieren lassen.

Gruß
Bernd

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

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

ThomasJay
Mitglied
Dipl-Ing


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

Beiträge: 159
Registriert: 19.04.2011

CATIA V5 R19

erstellt am: 20. Apr. 2011 08:47    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 davischr 10 Unities + Antwort hilfreich

Vielen Dank, so funktionierts!

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