Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Automatische Erstellung von Thick Surface mit Parameterzuordnung

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:  Automatische Erstellung von Thick Surface mit Parameterzuordnung (2158 mal gelesen)
Dede
Mitglied



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

Beiträge: 29
Registriert: 20.04.2004

erstellt am: 06. Okt. 2010 10: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


CATScript.txt

 
Hallo,

ich habe ein CATPart mit sehr vielen Teilflächen (6000-7000). Jede Teilfläche wurde durch das Feature "Split" erzeugt. Die Teilflächen (d.h. die "Splits") sind alle umbenannt - in eine 6-stellige Zahl. Die Teilflächen befinden sich in unterschiedlichen GeoSets. Zusätzlich habe eine gleiche Anzahl an Parametern (Typ Länge) mit der gleichen Benennung (6-stellige Zahl). Jetzt möchte ich jede Teilfläche mit dem Befehl "Thick Surface" aufdicken und diese mit dem entsprechenden Parameter verknüpfen. In dem Parameter ist die Information der Dicke enthalten z.B. 2mm.

Beispiel: meine Teilfläche (erzeugt durch "Split") mit der Bezeichnung "250042" soll aufgedickt werden und mit dem Parameter "250042" verknüpft werden.

Ich habe bereits ein Makro erzeugt (siehe Anhang), welches mir den gewünschten Erfolg bringt. Jedoch muss ich Makro immer die GeoSets angeben, in dem meine Teilflächen liegen (hier "Frame Plateaus C25" im GeoSet "Frames")
Ich benötige jedoch eine Version die in allen GeoSets nach meinen Teilflächen "sucht".

Danke für die Hilfe

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: 06. Okt. 2010 13: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 Nur für Dede 10 Unities + Antwort hilfreich

Habe nicht ganz verstanden wo es klemmt.

GeoSets sind einfach HybridBodies und die würde ich in einer rekursiven Schleife durchackern, oder ein Selection.Search auf alle GeoSets machen.

------------------
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

Dede
Mitglied



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

Beiträge: 29
Registriert: 20.04.2004

erstellt am: 06. Okt. 2010 13:49    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


Tree.jpg

 
die Lösung hört sich gut. Ist evtl. auch ganz simpel. Jedoch fehlt mir die Erfahrung dieses im Makro umzusetzen.
Den bisherigen Code habe ich mir mit dem Makrorecorder zusammengebaut und eine kleine Schleife programmiert. Ich verzweifle jedoch an der übergeordneten Schleife, die über alle GeoSets läuft.

Um mein Problem besser zu verstehen anbei der Baum. In den GeoSets "Stringer Plateaus C..." und "Frame Plateaus C..." befinden sich die Teilflächen. Unter "External Parameters" habe ich je einen Parameter mit der gleichen Benennung.

Hier mein Code, der die Aufmassflächen für die Teilflächen mit der Benennung "250042" bis "250062" erzeugt, die sich in dem GeoSet "Frame Plateaus C25" befinden.

CODE:
-------------------
Language="VBSCRIPT"

Sub CATMain()

Set partDocument1 = CATIA.ActiveDocument
Set part1 = partDocument1.Part
Set shapeFactory1 = part1.ShapeFactory
Set reference1 = part1.CreateReferenceFromName("")

for i = 250042 to 250062 step 10

Set thickSurface1 = shapeFactory1.AddNewThickSurface(reference1, 0, 1.000000, 0.000000)

MsgBox(i)

Set length1 = thickSurface1.TopOffset
Set relations1 = part1.Relations
Set formula1 = relations1.CreateFormula("Formula." & i, "", length1, "`External Parameters\" & i & "` ")
formula1.Rename "Formula." & i
Set hybridBodies1 = part1.HybridBodies
Set hybridBody1 = hybridBodies1.Item("Frames")
Set hybridBodies2 = hybridBody1.HybridBodies
Set hybridBody2 = hybridBodies2.Item("Frame Plateaus C25")
Set hybridShapes1 = hybridBody2.HybridShapes
Set hybridShapeSplit1 = hybridShapes1.Item("" & i)      'will vermutlich Ziffernfolge haben daher "" + Zähler i
Set reference2 = part1.CreateReferenceFromObject(hybridShapeSplit1)
thickSurface1.Surface = reference2

thickSurface1.swap_OffsetSide  'Flächenaufdickung in andere Richtung

next

part1.Update

End Sub
---------------


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: 06. Okt. 2010 16:43    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 Dede 10 Unities + Antwort hilfreich

In deinem Code ist doch eine Zählschleife drin.

Bitte such mit einer Suchmaschine nach entsprechenden Hilfen (Schleifen, Rekursion), ich kann hier nicht jedem die Grundlagen beibringen, die nun wirklich trivial (okay Rekursion ist etwas schwieriger, aber bei Dir würden auch zwei verschachtelte Schleifen reichen) sind.
Alternativ würde ich Dir auch das Buch Makroprogrammierung von Zhieten und danach das Kochbuch V5 von Hansen empfehlen.
Das Zauberwort für Dich habe ich auch schon genannt: Die HybridBodies, des Part-Objektes. Das ist ne Collection und lässt sich sehr einfach iterieren.

Ansonsten, wenn's wirklich gut werden soll kann man auch ein Systemhaus beauftragen, die machen das dann auch in einem zehntel der Zeit und liefern guten Code ab.

Denke mal selbst wenn Du die Forumssuche verwendest findet sich genug Material die Baumstruktur von CATIA durchzuarbeiten.

Edit:
Zeichne doch einfach ein Selection.Search auf GeoSets auf und gehe dann alle Items der Selection druch.

------------------
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

[Diese Nachricht wurde von HoBLila am 06. Okt. 2010 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: 06. Okt. 2010 22:09    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 Dede 10 Unities + Antwort hilfreich

Hallo Dede,

mal ein Beispiel für dein Problem, ist aber ein vbaproject.
Parameter müssen aber External Parameter sein, sollte das nicht immer so sein mußt du noch mal ne Unterscheidung machen. Sollten sich die Nummern der Flächen ändern würde ich die Range vom Benutzer eingeben lassen. Mit der Search funktion geht´s natürlich auch ist einfacher (brauchst dann keine Rekursion) aber auch bissl langsamer...

Option Explicit

Sub CATMain()

Dim MyDocument  As Document
Dim MyPart      As Part
Dim MyHybBody  As HybridBody
Dim MyHybBodies As HybridBodies

Set MyDocument = CATIA.ActiveDocument
Set MyPart = MyDocument.Part
Set MyHybBodies = MyPart

'Prüfen ob Part aktiv ist
If TypeName(MyDocument) <> "PartDocument" Then
    MsgBox "Bitte Part im eigenen Fenster öffnen.", vbCritical, "Abbruch"
    End
End If

'GeoSets scannen
ScanHybBodies MyPart.HybridBodies, MyPart

'Fertig
CATIA.StatusBar = "Vorgang Abgeschlossen"
MsgBox "Vorgang abgeschlossen.", vbOKOnly, "Hinweis"

End Sub

Function ScanHybBodies(MyRootHybBodies As HybridBodies, MyPart As Part)
Dim MyHybBody  As HybridBody
Dim MyHybShape  As HybridShape
Dim i          As Double

'Schleife über alle GeoSets
For Each MyHybBody In MyRootHybBodies

    CATIA.StatusBar = "duchsuche: " & MyHybBody.Name
    'alle Shapes durchsuchen
    'Fehler übergehen, da items im HybBody Empty sein können
    'und nicht immer update des ThickSurface durchläuft
    On Error Resume Next
    For i = 250042 To 250062 Step 10
        Set MyHybShape = MyHybBody.HybridShapes.Item(CStr(i))
            If Not MyHybShape Is Nothing Then
                'Bearbeitung starten
                CATIA.StatusBar = "duchsuche: " & MyHybBody.Name & " -->  bearbeite: " & MyHybShape.Name
                DoIt MyHybShape, MyPart, MyHybBody
            End If
        Set MyHybShape = Nothing
    Next
    On Error GoTo 0
   
    'Rekursion über untere GeoSets
    ScanHybBodies MyHybBody.HybridBodies, MyPart
   
Next

End Function

Function DoIt(MyHybShape As HybridShape, MyPart As Part, MyHybBody As HybridBody)

Dim MyRelation      As Relation
Dim MyRelations    As Relations
Dim MyParameter    As Parameter
Dim MyValue        As Parameter
Dim MyParameters    As Parameters
Dim MyFormula      As Formula
Dim MyFactory      As ShapeFactory
Dim MyThickSur      As ThickSurface
Dim MyReference    As Reference
Dim sFormula        As String

'Thick erzeugen
MyPart.InWorkObject = MyPart.MainBody
Set MyFactory = MyPart.ShapeFactory
Set MyReference = MyPart.CreateReferenceFromObject(MyHybShape)
Set MyThickSur = MyFactory.AddNewThickSurface(MyReference, 0, 1, 0)
'MyThickSur.swap_OffsetSide  'Bei Bedarf aktivieren
MyThickSur.Name = MyHybShape.Name

'Verknüpfen
Set MyParameters = MyPart.Parameters
Set MyParameter = MyParameters.Item(MyPart.Name & "\External Parameters\" & MyHybShape.Name)
Set MyValue = MyThickSur.TopOffset
Set MyRelations = MyPart.Relations
sFormula = "`" & Replace(MyParameter.Name, MyPart.Name & "\", "", 1, 1) & "`"
Set MyFormula = MyRelations.CreateFormula(MyHybShape.Name & "_THICKSURFACE_" & MyRelations.Count + 1, "", MyValue, sFormula)

'Object updaten
MyPart.UpdateObject MyThickSur

End Function

mfG
Mario

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

Dede
Mitglied



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

Beiträge: 29
Registriert: 20.04.2004

erstellt am: 08. Okt. 2010 10:59    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

Vielen Dank an Mario und volle 10 Units.
Ich bin begeistert! Genau sowas habe ich benötigt. Außerdem ist der Code sehr professionel aufgebaut.
DANKE

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

Dede
Mitglied



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

Beiträge: 29
Registriert: 20.04.2004

erstellt am: 01. Nov. 2010 16:58    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 Mario,
ich versuche gerade das Script auch auf die Parameter anzuwenden, die sich nicht unter "External Parameters" befinden.
Dazu habe ich folgende Zeile umbenannt:

von "Set MyParameter = MyParameters.Item(MyPart.Name & "\External Parameters\" & MyHybShape.Name)"

in "Set MyParameter = MyParameters.Item(MyPart.Name & "\Parameters\" & MyHybShape.Name)"

Leider funktioniert es so nicht. Die Dicken werden erzeugt, jedoch wird der Wert für das Offset nicht mit dem Parameter verknüpft.

Hast du oder jemand anderes eine Idee, woran es liegt. Oder muss ich in einer anderen Zeile auch noch Änderungen vornehmen?

Viele Grüße
Dede

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

Dede
Mitglied



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

Beiträge: 29
Registriert: 20.04.2004

erstellt am: 01. Nov. 2010 17:30    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

Hab's schon selbst hinbekommen
"Set MyParameter = MyParameters.Item(MyHybShape.Name)"

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