Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Erstellen einer Formel von einer selektierter Fläche

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:  Erstellen einer Formel von einer selektierter Fläche (978 mal gelesen)
Basti1379
Mitglied



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

Beiträge: 18
Registriert: 24.01.2019

CATIA V5

erstellt am: 24. Jan. 2019 18:10    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 würde gerne eine Formel erstellen mit einer Selektierten Fläche.Ich weiß jedoch noch nicht welche Methode ich anwenden muss.

Ich bräuchte von der Selektierten Fläche den Namen oder Path Centerofgravity('Geoset xyz/ Flächen.xyz').

Code:
Sub CATMain()
'************************************************************************Dokument****
Dim oCatia As Application
Dim oPartDocument As PartDocument
Dim oSelection As Selection
Dim oPart As Part

Set oPartDocument = Get_PartDocument

If oPartDocument Is Nothing Then

    Exit Sub

End If

Set oPart = oPartDocument.Part
'********************************************************************HybridBodies****
Dim oHybridShapeFactory As HybridShapeFactory
Dim oHhybridShapePointCoord As HybridShapePointCoord
Dim oHybridBodies As HybridBodies
Dim oHybridBody As HybridBody
Dim oReference As Reference
Dim oHybridShapePointExplicit As HybridShapePointExplicit

'***************************************************Search HybridBodies and Count****

Set oSelection = CATIA.ActiveDocument.Selection
oSelection.Clear

oSelection.Search ("CATGmoSearch.OpenBodyFeature.Name=CenterOfGravity,all")

If oSelection.Count < 1 Then

Set oHybridBodies = oPart.HybridBodies
Set oHybridBody = oPart.HybridBodies.Add
oHybridBody.Name = "CenterOfGravity"

Else

Set oHybridBodies = oPart.HybridBodies
Set oHybridBody = oHybridBodies.Item("CenterOfGravity")


End If
oSelection.Clear

'*********************************************************************AddNewPoint****
Set oHybridShapeFactory = oPart.HybridShapeFactory
Set oHybridShapePointCoord = oHybridShapeFactory.AddNewPointCoord(0, 0, 0)
oHybridShapePointCoord.Compute

'*****************************************************Create Reference from Point****

Set oReference = oPart.CreateReferenceFromObject(oHybridShapePointCoord)
Set oHybridShapePointExplicit = oHybridShapeFactory.AddNewPointDatum(oReference)
oHybridShapePointExplicit.Compute

oHybridBody.AppendHybridShape oHybridShapePointExplicit
oHybridShapeFactory.DeleteObjectForDatum oReference

'**********************************************************************Selection*****
Set oSelection = CATIA.ActiveDocument.Selection
Set oPartDocument = CATIA.ActiveDocument

If (Instr(oPartDocument.Name,".CATPart"))<> 0 Then
Set oPart= oPartDocument.Part
Set oSelection = CATIA.ActiveDocument.Selection

Dim sStatus As String
Dim sFilter(0) as String

Msgbox "Select a Face "
sFilter(0) = "Face"
sStatus = oSelection.SelectElement2(sFilter, "select a face", False)
If (sStatus = "Cancel") Then
Exit Sub

'Hier Hänge ich 

oSelection.Item(1).Value.Name

End If

'************************************************************************Formula*****
Dim oRelations As Relations
Set oRelations = oPart.Relations

Dim oFormula As Formula
Set oFormula = oRelations.CreateFormula("Formula.1", "", oHybridShapePointExplicit, "centerofgravity('hier soll die selektierte Fläche stehen    ') ")

oFormula.Rename "Gravity"
oSelection.Clear
oPart.Update

'*****************************************************************************Sub****
End Sub

'************************************************************************Function****
Private Function Get_PartDocument() As PartDocument

Dim oCatia As Application
Dim oDocument As Document
Dim oSelection As Selection
Dim oPart As Part

Set oCatia = CATIA


On Error Resume Next

    Set oDocument = CATIA.ActiveDocument
 
    If Err.Number <> 0 Then
 
        MsgBox "There Is No Active Document In Teh Current Session, Exitting Script."
       
 
    End If
 
On Error GoTo 0

Set oSelection = oDocument.Selection
oSelection.Clear

'---------------------------------------------------'

If (InStr(oDocument.Name, ".CATPart")) = 0 Then

    oSelection.Search ("type=Part,in")
 
    On Error Resume Next
 
        Set oPart = oSelection.FindObject("CATIAPart")
     
        If Err.Number <> 0 Then
     
            MsgBox "A Part or Part Instance Must be Active." & vbLf & "Exiting The Script"
            oSelection.Clear
         
            Exit Function
     
        End If
     
    On Error GoTo 0

Else

    Set oPart = oDocument.Part

End If

oSelection.Clear

'---------------------------------------------------'

Set Get_PartDocument = oPart.Parent

End Function


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: 24. Jan. 2019 18:17    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 Basti1379 10 Unities + Antwort hilfreich

Servus

Ich würde es mal mit:

Code:
sPathToFace = oPart.Parameters.GetNameToUseInRelation(oSelection.item2(1).value)
sFormula = "centerofgravity(" & sPathToFace  & ")"
Set oFormula = oRelations.CreateFormula("Formula.1", "", oHybridShapePointExplicit, sFormula))
probieren (ungetestet.

Gruß
Bernd

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

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

Basti1379
Mitglied



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

Beiträge: 18
Registriert: 24.01.2019

CATIA V5

erstellt am: 24. Jan. 2019 22:02    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

Zitat:
Original erstellt von bgrittmann:
Servus

Ich würde es mal mit:

Code:
sPathToFace = oPart.Parameters.GetNameToUseInRelation(oSelection.item2(1).value)
sFormula = "centerofgravity(" & sPathToFace  & ")"
Set oFormula = oRelations.CreateFormula("Formula.1", "", oHybridShapePointExplicit, sFormula))
probieren (ungetestet.

Gruß
Bernd


Vielen Dank für die schnelle Antwort.
Ich habe versucht dein Code Segment einzubauen jedoch sagt er mir :"Source CATIAParameters , Methode GetNameToUseInRelation failed"

Code:
Set oPartDocument = CATIA.ActiveDocument

If (Instr(oPartDocument.Name,".CATPart"))<> 0 Then
Set oPart= oPartDocument.Part
Set oSelection = CATIA.ActiveDocument.Selection

Dim sStatus As String
Dim sFilter(0) as String

Msgbox "Select a Face "
sFilter(0) = "Face"
sStatus = oSelection.SelectElement2(sFilter, "select a face", False)
If (sStatus = "Cancel") Then
Exit Sub

else

'*************************************************************************Formula*****
Dim oRelations As Relations
Dim oFormula As Formula
Dim sPathToFace As String

sPathToFace = oPart.Parameters.GetNameToUseInRelation(oSelection.item2(1).value)
sFormula = "centerofgravity(" & sPathToFace  & ")"

Set oRelations = oPart.Relations
Set oFormula = oRelations.CreateFormula("Formula.1", "", oHybridShapePointExplicit, sFormula )

oFormula.Rename "Gravity"

End If



Da ich erst 14 Tage am Skripten bin wäre ich für weitere Tipps dankbar.

Eine weitere Möglichkeit wäre vom selektierten Element die Struktur im Baum hoch zugehen sprich die Eltern zu suchen?

Grüße

Basti

[Diese Nachricht wurde von Basti1379 am 24. Jan. 2019 editiert.]

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: 24. Jan. 2019 22: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 Basti1379 10 Unities + Antwort hilfreich

Servus

Was hast du denn selektiert? Ein Feature im Baum oder eine (BREP)Fläche im 3D?
Die Methode GetNameToUseInRelation sollte nur mit ganzen Features gehen. (ggf deshalb den Filter bei der Selection anpassen)
ggf müssen noch ` in der Formel ergänzt werden (falls Sonderzeichen oder Leerzeichen im "Pfad" vorkommen):

Code:
sFormula = "centerofgravity(`" & sPathToFace  & "`)"
Gruß
Bernd

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

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

Basti1379
Mitglied



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

Beiträge: 18
Registriert: 24.01.2019

CATIA V5

erstellt am: 24. Jan. 2019 23: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

Hi,

Ja ich selektiere derzeit ein 3D Element(eins dieser ewigen langen  ) deswegen klappt es wohl nicht.

Entweder ich muss eine Selektion vor dem Start des Makros machen oder die Methode CreateReferenceFromBRepName machen?


Danke dir

[Diese Nachricht wurde von Basti1379 am 24. Jan. 2019 editiert.]

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: 25. Jan. 2019 10: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 Nur für Basti1379 10 Unities + Antwort hilfreich

Servus

Mit einem passenden Filter kann man auch im 3D ein Feature wählen (den passenden weiß ich im Moment nicht)
Willst du dich wirklich auf einen BREP beziehen (Updatestabilität)?

Gruß
Bernd

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

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

Basti1379
Mitglied



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

Beiträge: 18
Registriert: 24.01.2019

CATIA V5

erstellt am: 27. Jan. 2019 19:01    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

Zitat:
Original erstellt von bgrittmann:
Servus

Mit einem passenden Filter kann man auch im 3D ein Feature wählen (den passenden weiß ich im Moment nicht)
Willst du dich wirklich auf einen BREP beziehen (Updatestabilität)?

Gruß
Bernd


Ne du hast Recht macht keinen Sinn deshalb hab ich den Filter auf AnyObject geändert damit ich im Baum auswählen kann(Zum Probieren) ,aber selbst dann klappt es nicht.

Das Makro erstellt den Punkt jedoch ist keine Formel hinterlegt.

Gruß

Basti

[Diese Nachricht wurde von Basti1379 am 27. Jan. 2019 editiert.]

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: 27. Jan. 2019 19: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 Basti1379 10 Unities + Antwort hilfreich

Servus

Wie sieht die manuell erzeugte Formel aus?
Wie sehen sFormula und sPathToFace aus? Passt das zusammen?

Gruß
Bernd

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

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

Basti1379
Mitglied



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

Beiträge: 18
Registriert: 24.01.2019

CATIA V5

erstellt am: 28. Jan. 2019 22:07    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

Zitat:
Original erstellt von bgrittmann:
Servus

Wie sieht die manuell erzeugte Formel aus?
Wie sehen [i]sFormula
und sPathToFace aus? Passt das zusammen?

Gruß
Bernd

[/i]



Hallo Bernd

ich hab es mal mit

MsgBox ("centerofgravity(" & oPathToFace  & ")") probiert und hab den Fehler gefunden. 

Vielen Dank dir für deine Hilfe

Code:
Dim oStatus As String
Dim oFilter(0) as String

Msgbox "Select a Surface "
oFilter(0) ="AnyObject"
oStatus = oSelection.SelectElement2(oFilter, "Select a Surface", False)
If (oStatus = "Cancel") Then
Exit Sub


Mein Filter ist noch auf AnyObject eingestellt.
Gibt es ein Befehl damit nur Objekte im Baum ausgewählt werden können oder muss ich die Selektionsmethode ändern?

Ich würde das Makro gerne später auf alle Flächen die im GSD möglich sind anwenden.
d.h.:Extrude,Offset,Sweep,Fill,Multi,Blend und Shape fillet.

Ich hatte eine eine Select case Selektion gedacht.

Geht es auch einfacher ?

Viele Grüße

Basti

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. Jan. 2019 16:42    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 Basti1379 10 Unities + Antwort hilfreich

Servus

Ich wüsste nicht wie man die Selektion auf dem Baum beschränkt.
Du könntest als Filter "HybridShape" verwenden und das Ergebnis mit "GetGeometricalFeatureType" prüfen, danach ggf die Selektion erneut aufrufen.

Gruß
Bernd

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

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