Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Get Current Solid

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:  Get Current Solid (1932 mal gelesen)
roccat
Mitglied
Konstrukteur


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

Beiträge: 172
Registriert: 19.02.2010

WinXP/Win7
Office XP/2007
Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR
VB .Net 2010

erstellt am: 10. Mrz. 2016 11:56    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 versuche nachtraglich in mehreren "UserPattern" die eingetragenen Objekte (die Elemente die gepattert werden sollen) gegen den Eintrag "Current Solid" zu tauschen. (RMT => "Get Current Solid")

Hat jemand eine Idee wie man an das "Current Solid" per VBA rankommt?

Anbei mal ein kleiner TestCode. Dummy soll das Current Solid übergeben.

Code:
Option Explicit

Sub CATMain()

Dim MyDocument      As PartDocument
Dim MySelection    As Selection
Dim MyPart          As Part
Dim MyPattern      As UserPattern

Dim i              As Integer
Dim Dummy

Set MyDocument = CATIA.ActiveDocument
Set MyPart = MyDocument.Part
Set MySelection = MyDocument.Selection
MySelection.Search "((CATPrtSearch.UserPattern + CATGmoSearch.UserPattern) + CATSpdSearch.UserPattern),all"

For i = 1 To MySelection.Count2
    Set MyPattern = MySelection.Item2(i).Value
    Debug.Print MyPattern.Name
   
    Set MyPattern.ItemToCopy = Dummy 'Dummy soll das Current Solid übergeben

   
Next

End Sub


Vielen Dank.

mfG
Mario

------------------
Wenn das die Lösung sein soll,
will ich mein Problem zurück !!

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

ptit.tom
Mitglied
CAD-Berater


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

Beiträge: 114
Registriert: 11.02.2005

win10, CATIA R19 bis R30

erstellt am: 10. Mrz. 2016 13:00    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 roccat 10 Unities + Antwort hilfreich

Hallo,

Ich habe mit den Makro-Recorder versucht: lässt man das Argument iShapeToCopy der Methode AddNewRectPattern bei der Erzeugung leer, wird das Current Solid genommen. In der Eigenschaft ItemToCopy erscheint ein mysteriöse Solid.1 Feature, ohne Eltern.

Ich vermute, dass CATIA im Hintergrund seine eigene Suppe kocht, um das Feature Solid.1 zu generieren.
Ich kenne keinen Weg, das Objekt "current Solid" aufzurufen.

[Diese Nachricht wurde von ptit.tom am 10. Mrz. 2016 editiert.]

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

roccat
Mitglied
Konstrukteur


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

Beiträge: 172
Registriert: 19.02.2010

WinXP/Win7
Office XP/2007
Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR
VB .Net 2010

erstellt am: 10. Mrz. 2016 15:23    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 Tom,

und Danke für deine Antwort.

Auf das "Solid" kann man mit

Code:
Set Dummy = MyPart.FindObjectByName("Solid.1")

zugreifen wenn ich den Namen bzw. den Zähler des Solids nur immer wüsste. Habs mit den "InternalName" versucht, der ist's aber auch nicht.

Ich habe versucht ein neues Pattern zu erzeugen, ohne ein Objekt zuzuweisen, in der Hoffnung CATIA setzt automatisch das "Current Solid" mir gelingt die Erzeugung leider noch nicht.

Ich probier noch etwas...

mfG
Mario

------------------
Wenn das die Lösung sein soll,
will ich mein Problem zurück !!

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

Randle
Mitglied
CAD/PLM Consultant


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

Beiträge: 695
Registriert: 12.04.2003

Win10 x64
CATIA V5 R18, R19, R21, R27-29

erstellt am: 11. Mrz. 2016 10: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 Nur für roccat 10 Unities + Antwort hilfreich

Hallo,

Kann man nicht mit/über "InWorkObject" irgendwie an das Parentobjekt rankommen? Der folgende Code liefert mir den Namen des Körpers (natürlich nur in meinem Testmodell) Hier müsste man noch eine Typenabfrage einbauen bis man das Solidobjekt hat.

Sub CATMain
Dim oPart As Part
Dim oBody As Body
Set oPart = CATIA.ActiveDocument.Part
Set oBody = oPart.MainBody

MsgBox oPart.InWorkObject.Parent.Parent.Name
End Sub

oder habe ich was falsch verstanden?

Gruß
Randle

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

roccat
Mitglied
Konstrukteur


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

Beiträge: 172
Registriert: 19.02.2010

WinXP/Win7
Office XP/2007
Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR
VB .Net 2010

erstellt am: 11. Mrz. 2016 13:20    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 Randle,

vielen Dank für deine Antwort.

Ohne es jetzt testen zu können glaube ich nicht das es so einfach ist.

Ich versuch es mal zu erklären.

Folgende Beispiel Struktur

Body.10
I
I--Hole.1
I--Hole.3
I--Userpattern.5

1. Wähle ich im Userpattern.5 das Hole.3 wird auch nur Hole.3 gepattert und ich bekomme beim Auslesen mittels ItemToCopy Hole.3 zurück.

2. Wählt man mittels RMT => "Get Current Solid" oder lässt die Auswahl frei wird alles gepattert was vor dem Userpattern.5 steht, allerdings bekommt man beim Auslesen mittels ItemToCopy  "Solid.???" zurück.

Momentan versuche ich ein DummyPattern anzulegen das enstandene Solid auszulesen auszulesen und im eigendlichen Pattern zu setzen. Das Funktioniert leider nur bei einem Pattern im Part, da ich aus irgendwelchen Gründen immer "Solid.1" erhalte.

Ich hoffe das war einigermaßen Verständlich.

Ich werde das morgen mal übers Workobject versuchen.

mfG
Mario

------------------
Wenn das die Lösung sein soll,
will ich mein Problem zurück !!

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

Randle
Mitglied
CAD/PLM Consultant


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

Beiträge: 695
Registriert: 12.04.2003

Win10 x64
CATIA V5 R18, R19, R21, R27-29

erstellt am: 11. Mrz. 2016 14:20    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 roccat 10 Unities + Antwort hilfreich

interessante Aufgabe. Hatte gerade mal ein wenig getestet (mit Reference, Selection, ModelElement, ShapeFactory), bislang alles ohne Erfolg.
Aber viel Erfolg, bin gespannt auf die Lösung/den Workaround)
Randle

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

roccat
Mitglied
Konstrukteur


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

Beiträge: 172
Registriert: 19.02.2010

WinXP/Win7
Office XP/2007
Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR
VB .Net 2010

erstellt am: 12. Mrz. 2016 11:00    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,

habe es leider nicht hinbekommen das Solid zu ermitteln. Momentan Erzeuge ich ein neues Pattern mit den Referenzen des alten und lösche das alte Pattern. Das Funktioniert soweit auch ganz gut bis auf ein Problem mit den Deaktivierten Positionen.

Meine Frage dazu:
Wie kann ich die deaktivierten Positionen im vorhandenen UserPattern auslesen und im neuen setzen?


Code:
Option Explicit

Sub CATMain()

Dim MyDocument      As PartDocument
Dim MySelection     As Selection
Dim MyPart          As Part
Dim MyNewPattern    As UserPattern

Dim i               As Integer
Dim MyShape         As Shape
Dim MyBody          As Body
Dim MyTempObject    As Object
Dim MyShapefac      As ShapeFactory
Dim MyPatterns()    As UserPattern

Dim MyAnchor        As Object
Dim MySketch        As Sketch
Dim MyName          As String

'Allgemeins
Set MyDocument = CATIA.ActiveDocument
Set MyPart = MyDocument.Part
Set MyTempObject = MyPart.InWorkObject

'UserPattern suchen
Set MySelection = MyDocument.Selection
MySelection.Search "((CATPrtSearch.UserPattern + CATGmoSearch.UserPattern) + CATSpdSearch.UserPattern),all"

ReDim MyPatterns(MySelection.Count2 - 1)
For i = 1 To MySelection.Count2
    Set MyPatterns(i - 1) = MySelection.Item2(i).Value
Next
MySelection.Clear

'UserPattern bearbeiten
For i = 0 To UBound(MyPatterns)
   
    'Referenzen holen
    Set MyBody = MyPatterns(i).Parent.Parent
    Set MyShape = MyPatterns(i).ItemToCopy
    Set MyAnchor = MyPatterns(i).AnchorPoint
    Set MySketch = MyPatterns(i).FeatureToLocatePositions.Factory2D
    MyName = MyPatterns(i).Name
   
    'Altes Pattern löschen
    MySelection.Clear
    MySelection.Add MyPatterns(i)
    MySelection.Delete
   
    MyPart.InWorkObject = MyBody
   
    'Neues Pattern erzeugen
    Set MyShapefac = MyPart.ShapeFactory
    Set MyNewPattern = MyShapefac.AddNewUserPattern(Nothing, 1)
    MyNewPattern.AddFeatureToLocatePositions MySketch
    MyNewPattern.AnchorPoint = MyAnchor
    MyNewPattern.Name = MyName
   
    'Punkte deaktivieren ???
    MyNewPattern.DesactivatePosition 2, 0
  
Next

'Update
MyPart.InWorkObject = MyTempObject
MyPart.Update

End Sub


Vielen Dank

mfG
Mario

------------------
Wenn das die Lösung sein soll,
will ich mein Problem zurück !!

[Diese Nachricht wurde von roccat am 12. Mrz. 2016 editiert.]

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