Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Gewindetiefe über Support Depth im VBA festlegen

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:  Gewindetiefe über Support Depth im VBA festlegen (1669 / mal gelesen)
monka
Mitglied



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

Beiträge: 67
Registriert: 26.01.2012

Windows 7 Professional 64bit
Catia V5-6 R2014/R2016

erstellt am: 16. Nov. 2016 07:46    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


Gewindetiefe.png

 
Hallo zusammen

ich schreibe mir gerade ein Makro das mir diverse Bohrungen erstellt. Das setzen einzelner Bohrungen klappt schon super bis auf eine Kleinigkeit. Beim erstellen von Gewindedurchgangsbohrungen soll die Gewindetiefe durch die Option "Support Depth" fest gelegt werden (siehe Bild). Leider befürchte ich das dies nicht möglich ist.

Kann ich diese Option wirklich nicht über VBA setzten oder bin ich gerade nur blind?

Danke im vorraus
Gruß Monka

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

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 16. Nov. 2016 12:46    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 monka 10 Unities + Antwort hilfreich

Hi monka,

magst uns zeigen, was Du bisher hast?

(Damit wir leichter ins Thema finden)

Tschau,
Joe

------------------
Inoffizielle Catia Hilfeseite

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

monka
Mitglied



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

Beiträge: 67
Registriert: 26.01.2012

Windows 7 Professional 64bit
Catia V5-6 R2014/R2016

erstellt am: 16. Nov. 2016 13:31    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 Joe

Also im Großen und Ganzen möchte ich ein Makro erstellen welches mir Standardbohrbilder die bei uns im Betrieb häufiger vorkommen automatisieren. Das Makro soll wie folgt arbeiten:

1) Eingabe des Bohrparameter (Wie die Eingabe der Parameter aussehen soll ist noch offen)
2) Auswahl der Fläche im 3D auf welcher die Bohrung gesetzt wird
3) Auswahl der Flächen auf welche die Bohrung bemaßt werden
4) Auswahl der Richtung für das Pattern

Als erstes hab ich mich damit befasst die Bohrungen zusetzten und so siet der Code dazu aus.

Code:
Sub CATMain()

Dim Teil As Part
Set Teil = CATIA.ActiveDocument.Part

Dim Koerper As Body
Set Koerper = Teil.Bodies.Item("Gewinde")

Teil.InWorkObject = Koerper

Dim InputObjectType(0)
InputObjectType(0) = "Face"

Dim Auswahl
Set Auswahl = CATIA.ActiveDocument.Selection

Auswahl.Clear
Status = Auswahl.SelectElement2(InputObjectType, "Fläche für Bohrung wählen", True)

Dim Flaeche As Reference
Set Flaeche = Auswahl.Item(1).Value

Dim Bohrer As ShapeFactory
Set Bohrer = Teil.ShapeFactory

Dim Bohrung As Hole
Set Bohrung = Bohrer.AddNewHole(Flaeche, 22)

Dim BohrSkizze As Sketch

With Bohrung
    .Type = catSimpleHole
    '.AnchorMode = catExtremPointHoleAnchor
    .BottomType = catVHoleBottom
    .BottomLimit.LimitMode = catOffsetLimit
    .BottomAngle.Value = 120
    .ThreadingMode = catThreadedHoleThreading 'Gewindebohrung
    .CreateStandardThreadDesignTable catHoleMetricThickPitch
    .HoleThreadDescription.Value = "M6"
    '.ThreadingMode = catSmoothHoleThreading 'Einfache Bohrung
    '.Diameter.Value = 6
    .ThreadSide = catRightThreadSide
    Set BohrSkizze = .Sketch
End With

Auswahl.Clear
Status = Auswahl.SelectElement2(InputObjectType, "Erste Fläche für Bemaßung wählen", True)

Dim Abstand1 As Reference
Set Abstand1 = Auswahl.Item(1).Value

Auswahl.Clear
Status = Auswahl.SelectElement2(InputObjectType, "Zweite Fläche für Bemaßung wählen", True)

Dim Abstand2 As Reference
Set Abstand2 = Auswahl.Item(1).Value

Dim Punkt As Reference
Set Punkt = Teil.CreateReferenceFromObject(BohrSkizze.GeometricElements.Item(2))

Teil.InWorkObject = BohrSkizze

BohrSkizze.OpenEdition

Dim Bedingung As Constraint
Set Bedingung = BohrSkizze.Constraints.AddBiEltCst(catCstTypeDistance, Punkt, Abstand1)
Bedingung.Mode = catCstModeDrivingDimension
Bedingung.Dimension.Value = 10

Set Bedingung = BohrSkizze.Constraints.AddBiEltCst(catCstTypeDistance, Punkt, Abstand2)
Bedingung.Mode = catCstModeDrivingDimension
Bedingung.Dimension.Value = 10

BohrSkizze.CloseEdition

Auswahl.Clear
Auswahl.Add BohrSkizze
Auswahl.Add BohrSkizze.GeometricElements.Item("AbsoluteAxis").GetItem("Origin")
Auswahl.Add BohrSkizze.GeometricElements.Item("AbsoluteAxis").GetItem("HDirection")
Auswahl.Add BohrSkizze.GeometricElements.Item("AbsoluteAxis").GetItem("VDirection")
Auswahl.VisProperties.SetShow 1

Teil.InWorkObject = Koerper

InputObjectType(0) = "Edge"

Auswahl.Clear
Status = Auswahl.SelectElement2(InputObjectType, "Richtung fürs Pattern wählen", True)

Dim Richtung As Reference
Set Richtung = Auswahl.Item(1).Value

Dim A1 As Reference
Set A1 = Teil.CreateReferenceFromName("")
Dim A2 As Reference
Set A2 = Teil.CreateReferenceFromName("")

Dim Muster As RectPattern
Set Muster = Bohrer.AddNewRectPattern(Bohrung, 2, 1, 30, 30, 1, 1, Richtung, A2, True, True, 0)

Muster.SetFirstDirection Richtung

Teil.Update

Teil.InWorkObject = Teil.MainBody

End Sub


Um es gleich noch vorweg zu nehmen, eine PowerCopy kommt für mich nicht in Frage da ein Standardbohrbild sich über 2 Bodies erstreckt und eine PowerCopy dies nicht hinkriegt.

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

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 16. Nov. 2016 20:21    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 monka 10 Unities + Antwort hilfreich

Hi monka,

vorab ein paar Anmerkungen:
- status ist nicht deklariert
- wird bei der Abfrage der Fläche 'Esc' gedrückt, stürzt dad Makro ab
- für die Parameter-Eingabe würde ich eine UserForm mit ein paar DropDown- Listen verwenden
  (für Durchmesser, Type); für die Tiefe eventuell eine mit einem UpDown-Element verknüpfte Textbox)

Wenn Du, anstatt einen neuen Body anzulegen, einen vorhandenen verwendest, kannst LimitMode = catUpToLastLimit angeben.
Bei einem neu erzeugten Body geht das nicht. Da müsstest dann vorab die Bauteildicke ermitteln.
Dazu könntest eine Dummy-Bohrung setzen, die Tiefe ermitteln und zwischenspeichern und anschliessend die eigentlichen Gewinde setzen.
Die Dummy-Bohrung zuvor löschen und das Part updaten.

Code:

Set Koerper = Teil.Bodies.Item(1)
'Set Koerper = Teil.Bodies.Item("Gewinde")
Teil.InWorkObject = Koerper
InputObjectType(0) = "Face"

Set Auswahl = CATIA.ActiveDocument.Selection
Auswahl.Clear

Status = Auswahl.SelectElement2(InputObjectType, "Fläche für Bohrung wählen", True)

Set Flaeche = Auswahl.Item(1).Value
Set Bohrer = Teil.ShapeFactory
Set Bohrung = Bohrer.AddNewHole(Flaeche, 22)

With Bohrung
    .Type = catSimpleHole
    .BottomLimit.LimitMode = catUpToLastLimit
    Teil.Update 'damit catia die dicke ermitteln kann
    .ThreadingMode = catThreadedHoleThreading 'Gewindebohrung
    .CreateStandardThreadDesignTable catHoleMetricThickPitch
    .ThreadDepth.Value = .BottomLimit.Dimension.Value
    .HoleThreadDescription.Value = "M6"
    .ThreadSide = catRightThreadSide
    Set BohrSkizze = .Sketch
End With



Weiter interessant:

http://www.maruf.ca/files/caadoc/CAAScdPriUseCases/CAAPriChangeHoleVBA.htm#Step4
http://www.maruf.ca/files/caadoc/CAAScdPriUseCases
Hope it helps,
Joe

------------------
Inoffizielle Catia Hilfeseite

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

moppesle
Ehrenmitglied V.I.P. h.c.
Konstrukteur


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

Beiträge: 3418
Registriert: 28.05.2009

CATIA V5 R19 SP9
WIN 7 64bit

erstellt am: 17. Nov. 2016 07: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 Nur für monka 10 Unities + Antwort hilfreich

Hallo monka

Zitat:
Um es gleich noch vorweg zu nehmen, eine PowerCopy kommt für mich nicht in Frage da ein Standardbohrbild sich über 2 Bodies erstreckt und eine PowerCopy dies nicht hinkriegt.
,

Das sollte eigentlich funktionieren.
Kannst du das genauer erklären. Ein Bild wie das ausehen soll wäre nicht schlecht.

------------------
Gruß Uwe

Auch Catia ist nur ein Mensch!    

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

monka
Mitglied



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

Beiträge: 67
Registriert: 26.01.2012

Windows 7 Professional 64bit
Catia V5-6 R2014/R2016

erstellt am: 21. Nov. 2016 10: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


PowerCopy.png

 
Hallo

@Joe

Zitat:
- status ist nicht deklariert
- wird bei der Abfrage der Fläche 'Esc' gedrückt, stürzt dad Makro ab
- für die Parameter-Eingabe würde ich eine UserForm mit ein paar DropDown- Listen verwenden
  (für Durchmesser, Type); für die Tiefe eventuell eine mit einem UpDown-Element verknüpfte Textbox)

-Status hab ich nicht deklariert da ich nicht weis wie und die Selectelement2 Anweisung aus dem Forum hab
-Das kommt alles noch. Erstmal soll das Makro bei fehlerfreier Eingabe durchlaufen
-Userform hatte ich auch schon im Hinterkopf

Danke für deine Hilfe, wenn die Option "Support depth" nicht aktiviert werden kann werde ich der aufgrund der Einfachheit erstmal die Gewindetiefe gleich der Bohrtiefe setzen und diese als Eingabeparameter abfragen

@Uwe
In den Konstruktionsrichtlinien unserer Kunden ist der Strukturbaum fest vorgegeben. Hier müssen verschiedene Bohrungen in verschiedene Bodies (siehe Bild). Wenn ich nun eine PowerCopy erstellen will, wähle ich die Bohrung und das Pattern im ersten Body. Beim klick auf die Bohrung im zweiten Body passiert nichts mehr. Mit einer zweiten PowerCopy hätte ich auch nichts gewonnen.

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

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 21. Nov. 2016 11: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 monka 10 Unities + Antwort hilfreich

Zitat:

Status hab ich nicht deklariert da ich nicht weis wie und die Selectelement2 Anweisung aus dem Forum hab


Wenn bei allen Beispielen zu SelectElement2/3/4 'Status' ein String zugewiesen wird, würde ich halt den Typ 'String' annehmen.
Im Zweifelsfall geht auch 'Dim' ohne 'as'.
Nachdem ich grundsätzlich mit 'Option Explicit' programmiere,
fliegt das Makro bei nicht deklarierten Variablen sofort aus der Kurve.

Tschau,
Joe

------------------
Inoffizielle Catia Hilfeseite

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