Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Part in Baugruppe deckungsgleich auf anderem Part positionieren

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:  Part in Baugruppe deckungsgleich auf anderem Part positionieren (2457 mal gelesen)
Florian Held
Mitglied
Teamleiter CAD-Solutions


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

Beiträge: 81
Registriert: 07.09.2006

Catia V5 R19
WinXP 64Bit unter VBA

erstellt am: 19. Aug. 2011 09:44    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


held_017.jpg

 
Hallo,

ich weis ich habe hier so etwas in der Art schon gelesen aber meine Suchen führen zu keinem Ergebnis.

Ich habe eine Baugruppe wie diese im Bild und ich möchte einfach das Part2 im Raum postionieren, wo Part1 liegt.
Ohne Bedingungen oder Verknüpfung etc. einfach die "Koordinaten/Ausrichtungen von Part1 für Part2" übernehmen.

Quasi in etwa so etwas:
oPart2.LageImRaum = oPart1.LageImRaum

Das müsste doch gehen, oder?
Danke für alle Antworten!

------------------
MfG,
Florian Held

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

RSchulz
Moderator²
Head of CAD, Content & Collaboration / IT-Manager



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

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 19. Aug. 2011 09:51    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 Florian Held 10 Unities + Antwort hilfreich

Hallo Florian,
muss das denn per Makro geschehen? Einfachste Methode wäre eigentlich auf jedes ein Fix zu setzen und jedes Fix auf den Nullpunkt zu definieren. Evtl. geht das auch per Makro. Deine Anstrebung die LAgeposition zu finden, geht allerdings in die Falsche Richtung, da die einzelnen Parts keine Informationen von den Teileverwendungen haben. Daher auch nicht die Lageposition innerhalb eines Produktes. Wenn, dann könnte der Wert nur über das Produkt selbst zufinden sein.

------------------
MFG
Rick Schulz

Nettiquette (CAD.de)  -  Was ist die Systeminfo?  -  Wie man Fragen richtig stellt.  -  Unities

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

Florian Held
Mitglied
Teamleiter CAD-Solutions


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

Beiträge: 81
Registriert: 07.09.2006

erstellt am: 19. Aug. 2011 14:24    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,

danke für die Infos.

1. per Makro nicht unbedingt. Habe das Szenario im Rahmen von Datenaufbereitungen nur öfters und wollte mir Arbeit sparen.

2. Wenn ich dich richtig verstehe meinst du auf jedes ein Fix zu setzen und anschließend das Fix zu definieren?
Diese Variante wäre natürlich auch möglich nur wie kann ich dann die Definition des Fix vom einen Part auf die definition des Fix des anderen Parts zu ändern.

3. Klar, die Position des Exemplar des Parts bekomme ich nur über das gemeinsamme Product. Vielleicht etwas schlecht von mir formuliert, mein Imaginärcode wäre also eigentlich eher wie folgt:

oProduct.oPart2.LageImRaum = oProduct.oPart1.LageImRaum

oder wie vorgeschlagen über das Fix vom oPart2 und dem fix von oPart1 im gemeinsamen Produkt oProduct wenn ich dich richtig verstanden habe und das so ginge?

Habe auch schon mit dem Gedanken gespielt per Makro das Part mit der Zielpostion zu fixieren, die 3 Achsen beider Parts kongruent zu setzen, eine aktualisierung auszulsen und danach diese temporär erzeugten Bedingungen wieder zu löschen.
Allerdings sind dann manchmal die Achsen teilweise nicht konkruent sondern genau invers (Z-Achse 1 180deg zu Z-Achse 2 etc.)

------------------
MfG,
Florian Held

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

RSchulz
Moderator²
Head of CAD, Content & Collaboration / IT-Manager



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

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 19. Aug. 2011 14:34    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 Florian Held 10 Unities + Antwort hilfreich

Die Frage ist doch, von welchem Punkt aus du die Teile ineinander lagern möchtest. Wenn du vom Nullpunkt des Parts ausgehst, dann brauchst du nur das Fix auf 0,0,0 zu setzen. Das bedeutet folgende Reihenfolge...

> Part einfügen
> 2. Part einfügen
> Fix auf das erste Part
> rechte Maustaste auf das Fix > Definition
> Koordinaten auf 0 setzen
> Fix2 auf das zeweite Part
> rechte Maustaste auf das Fix2 > Definition
> Koordinaten auf 0 setzen

Die Makroaufzeichnung hat folgendes ergeben beim setzen eines Fixes...

Code:

Sub CATMain()

Dim productDocument1 As ProductDocument
Set productDocument1 = CATIA.ActiveDocument

Dim product1 As Product
Set product1 = productDocument1.Product

Dim constraints1 As Constraints
Set constraints1 = product1.Connections("CATIAConstraints")

Dim reference1 As Reference
Set reference1 = product1.CreateReferenceFromName("Product1/Teil1.1/!Product1/Teil1.1/")

Dim constraint1 As Constraint
Set constraint1 = constraints1.AddMonoEltCst(catCstTypeReference, reference1)

Dim dimension1 As Dimension
Set dimension1 = constraint1.Dimension

dimension1.Value = 0#

Dim parameters1 As Parameters
Set parameters1 = product1.Parameters

Dim dimension2 As Dimension
Set dimension2 = parameters1.Item("Product1\Bedingungen\Fixieren.1\Fixieren.1\pos_y")

dimension2.Value = 0#

Dim parameters2 As Parameters
Set parameters2 = product1.Parameters

Dim dimension3 As Dimension
Set dimension3 = parameters2.Item("Product1\Bedingungen\Fixieren.1\Fixieren.1\pos_z")

dimension3.Value = 0#

constraint1.ReferenceType = catCstRefTypeFixInSpace

End Sub


Daher sollte es ohne Probleme möglich sein, das auch per Makro zu verwirkliche. Allerdings geht es eben auch manuell sehr schnell...

------------------
MFG
Rick Schulz

Nettiquette (CAD.de)  -  Was ist die Systeminfo?  -  Wie man Fragen richtig stellt.  -  Unities

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. Aug. 2011 14: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 Nur für Florian Held 10 Unities + Antwort hilfreich

Servus
Eigentlich sollte dein Vorhaben mit den Befehlen GetPositon und SetPosition gehen: (ungetestet)
Code:

Sub CATMain()
dim Part1 as Product
dim Part2 as Product

Set Part1 = CATIA.ActiveDocument.Product.Products.item(1)
Set Part2 = CATIA.ActiveDocument.Product.Products.item(2)

Part1.Position.GetComponents oAxisComponentsArray
Part2.Position.SetComponents oAxisComponentsArray

End Sub


Gruß
Bernd

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

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

tberger
Mitglied
Application Manager CATIA V5 / V6


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

Beiträge: 1385
Registriert: 13.01.2007

WIN 7 64bit
V5R21SP3HF49
3DX/V6 R2016x

erstellt am: 19. Aug. 2011 14:44    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 Florian Held 10 Unities + Antwort hilfreich

Damit sollte es gehen:

Sub CATMain()

Dim OPENED_PRODUCT As Document
Set OPENED_PRODUCT = CATIA.ActiveDocument

Dim Selection As Object
Set Selection = OPENED_PRODUCT.Selection
Selection.Clear

Dim status As String
Dim InputObjectType(0)
Dim selectedElement1 As Product
Dim selectedElement2 As Product

InputObjectType(0) = "Product"

status = Selection.SelectElement2(InputObjectType, "Bitte das erste Teil anklicken, das die Position vorgibt  . . .", False)

If (status <> "Normal") Then
    Exit Sub
Else
    Set selectedElement1 = Selection.Item(1).Value
    Selection.Clear

End If
  
status = Selection.SelectElement2(InputObjectType, "Bitte das zweite Teil anklicken, das die Position des 1.Teils einnehmen soll  . . .", False)

If (status <> "Normal") Then
    Exit Sub
Else
    Set selectedElement2 = Selection.Item(1).Value
    Selection.Clear

End If

Dim Matrix1(11)

Dim PositionObject1 As Position
Set PositionObject1 = selectedElement1.Position

PositionObject1.GetComponents Matrix1     'restricted in vba!

Dim PositionObject2 As Position
Set PositionObject2 = selectedElement2.Position

PositionObject2.SetComponents Matrix1

MsgBox "Fertig"

End Sub

Voraussetzung: deine zu bewegende Komponente hat keine Bedingungen. Das Script läuft nur als CATScript, nicht im vba (GetComponents ist restricted).

------------------
Grüße aus dem Thurgau
Thomas

+++++++++++++++++++++++++++++++++

CATIA - eine Laune der Natur ...

[Diese Nachricht wurde von tberger am 19. Aug. 2011 editiert.]

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

Florian Held
Mitglied
Teamleiter CAD-Solutions


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

Beiträge: 81
Registriert: 07.09.2006

erstellt am: 24. Aug. 2011 10:39    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,

erstmal Danke an an alle, besonders an bgrittmann (das war was ich schon mal gelesen hatte aber nicht mehr finden konnte) und nochmals besonderen Dank an tberger für das lauffähige Beispiel. Es funktioniert genau so wie ich dass wollte und was ich gesucht hatte. Durch das restricted in VBA jedoch eher suboptimal, möchte eher ungern aus meinem VBA heraus ein CATScript anstoßen nur um die Restriktion zu umgehen.

Das Beispiel von RSchulz mit dem Fix funktioniert für mich dahingehend nicht, da das Teil nicht auf 0,0,0 gesetzt werden darf sondern auf die Koordinaten (x,Y,Z) UND die Ausrichtung (RotX, RotY, RotZ) des anderen Parts.
Aber folgendes müsste dann funktionieren:
Wenn ich das Zielpart Fixiere habe ich ein oTargetFix mit den 6 Werten.
Nun Fixiere ich das zu positionierende Part als oSourceFix und kann die 6 Werte von diesem Fix gleich denen des oTargetFix setzen.
Das oTargetFix aktualisieren und beide Fixes wieder löschen - Fertig (zumindest in der Theorie).

Werde dies im Laufe der Woche mal umsetzen und ausprobieren und mich wieder melden (mit dem Skript).
Außer jemand hat derweil noch eine bessere Idee oder weis dass dies so nicht funktioniert wie ich mir dies denke?

------------------
MfG,
Florian Held

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

HoBLila
Mitglied
Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx


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

Beiträge: 1118
Registriert: 29.05.2008

DELL PRECISION T3500
Intel(R) Xeon(R) CPU W3540 @ 2.93GHz
12285 MB RAM
NVIDIA Quadro FX 1800
Microsoft Windows 7 Enterprise Service Pack 1
CATIA V5 R19 SP09 HF69
VB6.5
CAA RADE CDC

erstellt am: 24. Aug. 2011 17:24    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 Florian Held 10 Unities + Antwort hilfreich

Versuch mal das Tool aus dem beitrag http://ww3.cad.de/foren/ubb/Forum137/HTML/004670.shtml  wenn das tut, was Du willst, wenn Du manuell die Zahlen überträgst, dann baue ich demnächst noch einen Button ein um die gleich zu setzen.

------------------
Mit freundlichen Grüßen,
Henry Schneider
alias Lila

Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren:
Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen,
die Natur versucht, immer bessere Idioten zu bauen

Xing

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

Florian Held
Mitglied
Teamleiter CAD-Solutions


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

Beiträge: 81
Registriert: 07.09.2006

erstellt am: 29. Aug. 2011 18: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

Hallo,

also hat soweit geklappt wie ich mir das gedacht habe.
Anbei der Code in Rohform (z.B. Beide Parts müssen in gleichem Product und nicht in Unterbaugruppe sein ist nicht abgefangen etc.)

Code:

Public Sub Assembly_PositionierePartByPart()

    'Umgebendes Product
    Dim oProduct As Product
    Dim oProductConstraints As Constraints
   
    Set oProduct = CATIA.ActiveDocument.Product
    Set oProductConstraints = oProduct.Connections("CATIAConstraints")

    'Falls nicht wie in meinem Fall bereits zuvor überprüft: Beide Parts müssen in diesem Product sein kein Unterproduct!
   
    'Zielpostition
    Dim oRefZielPos As Reference
    Dim oFixZielPos As Constraint
    Dim sZPath As String
   
    Set oRefZielPos = oProduct.CreateReferenceFromName("PosPartByPart/Zielposition/!PosPartByPart/Zielposition/")
    Set oFixZielPos = oProductConstraints.AddMonoEltCst(catCstTypeReference, oRefZielPos)
    oFixZielPos.ReferenceType = catCstRefTypeFixInSpace

    sZPath = "PosPartByPart\Bedingungen\" & oFixZielPos.Name & "\" & oFixZielPos.Name

    'Startpostion
    Dim oRefSourcePos As Reference
    Dim oFixSourcePos As Constraint
    Dim sSPath As String
   
    Set oRefSourcePos = oProduct.CreateReferenceFromName("PosPartByPart/Startposition/!PosPartByPart/Startposition/")
    Set oFixSourcePos = oProductConstraints.AddMonoEltCst(catCstTypeReference, oRefSourcePos)

    sSPath = "PosPartByPart\Bedingungen\" & oFixSourcePos.Name & "\" & oFixSourcePos.Name
   
   
    'Startpostition: Koordinaten/Ausrichtung von Fixierung des Zielparts übernehmen
    oProduct.Parameters.Item(sSPath & "\pos_x").Value = oProduct.Parameters.Item(sZPath & "\pos_x").Value
    oProduct.Parameters.Item(sSPath & "\pos_rotx").Value = oProduct.Parameters.Item(sZPath & "\pos_rotx").Value
   
    oProduct.Parameters.Item(sSPath & "\pos_y").Value = oProduct.Parameters.Item(sZPath & "\pos_y").Value
    oProduct.Parameters.Item(sSPath & "\pos_roty").Value = oProduct.Parameters.Item(sZPath & "\pos_roty").Value
   
    oProduct.Parameters.Item(sSPath & "\pos_z").Value = oProduct.Parameters.Item(sZPath & "\pos_z").Value
    oProduct.Parameters.Item(sSPath & "\pos_rotz").Value = oProduct.Parameters.Item(sZPath & "\pos_rotz").Value


    'Fertig, Zweites Fix aktualisieren
    '
    ' wie ???
    '
   
   
    'Aufräumen
    Dim oSelection As Selection
    Set oSelection = CATIA.ActiveDocument.Selection
    oSelection.Clear

    oSelection.Add oProduct.Connections("CATIAConstraints").Item(oFixSourcePos.Name)
    oSelection.Add oProduct.Connections("CATIAConstraints").Item(oFixZielPos.Name)
   
    oSelection.Delete

End Sub


Weis vielleicht noch jemand wie ich meinem zweiten Fix oFixSourcePos  nach dessen Erstellung sagen kann dass es sich bitte aktualisieren möchte?

------------------
MfG,
Florian Held

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: 29. Aug. 2011 19: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 Nur für Florian Held 10 Unities + Antwort hilfreich

Servus
Du könntest doch auch einfach in Thomas Makro die Variablen PositionObject1 und PositionObject2 als Object dimensionieren.
Dann sollte das Makro auch in VBA durchlaufen. (siehe auch hier)

Gruß
Bernd

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

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

Florian Held
Mitglied
Teamleiter CAD-Solutions


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

Beiträge: 81
Registriert: 07.09.2006

erstellt am: 30. Aug. 2011 09: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

Da mit dem Object anstelle von Position funktioniert einwandfrei und somit läuft das Makro auch in VBA.

Danke für den Tip und den Link, muss ich mir merken.

------------------
MfG,
Florian Held

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