| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für PTC CREO |
| |
| Märkisches Werk GmbH - Ventilhersteller hebt Digitalisierungspotentiale, ein Anwenderbericht
|
Autor
|
Thema: Gewinde auf Zylinderfläche (1265 / mal gelesen)
|
Jan Niestroj Mitglied
Beiträge: 4 Registriert: 02.08.2021 Creo Elements/Direct Modeling (x64) 20.1.3.0 mit Power Extensions V20.1 ModelManager 20.1.0.0 mit Power Extensions - Manager V20.1.xx
|
erstellt am: 02. Aug. 2021 09:36 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich bin ein kompletter Neuling auf dem Gebiet der Lispprogrammierung, doch wurde ich mit der Aufgabe betraut Gewindestangen über eine Lisp zu erstellen. Hierfür erfolgt zunächst die Extrusion eines Zylinders, dessen Mantelfläche darauf hin mit einem metrischen Gewinde versehen werden soll. Code: (use-package :OLI) (use-package :custom) (defun gewindestange ()
(create_part :name "Testteil" :model_name "Testteil" complete) (set_pers_context :none uic_new_wp_with_cgeo) (CIRCLE :CEN_RAD 0,0 10) (extrude :testteil :A03 :Distance 100) ;;Zylinderflaeche bestimmen (let (fl fll) (setf fll (sd-call-cmds (get_selection :focus_type *sd-cylinder-seltype* :allow_face_part :select :in_part (sd-inq-curr-part)))) ;;Gewinde anlegen (dolist (fl fll) (sd-define-thread fl :nominal-diameter 20.0 :core-diameter 18.8 itch 1.25 :thread-type :OUTER :thread-unit :METRIC :thread-color (sd-color-to-rgb 16711680) :thread-hand :RIGHT-HAND :thread-profile :M :include-chamfer T :thread-direction :CYL-AXIS :thread-name :GEW_NAME );;sd-define-thread );;dolist );;let )
Wenn ich die Funktion aufrufe erfolgt zwar die Extrusion des Zylinders, aber das Gewinde wird nicht erstellt. Stattdessen wird der Fehler "Unzulässiger Aufruf einer Aktionsroutine" Ausgegeben. Füge ich den Code hingegen nach dem Bestimmen der Zylinderfläche in eine eigene lsp.-Datei ein, so wird das Gewinde erstellt. Daher also die Frage wie die Gewindeerstellung korrekt in die Funktion eingebaut wird? Viele Grüße, Jan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StephanWörz Mitglied Maschinenbautechniker
Beiträge: 785 Registriert: 11.10.2000 exone - Win10 i9-12900K 3187MHz 32GB Ram nVidia RTX A5000 creo elements/direct V20.5.1.0 SolidPower V20.4 ModelSearch KeyShot 11 CADdoktor SX PHOENIX V11
|
erstellt am: 02. Aug. 2021 14:49 <-- editieren / zitieren --> Unities abgeben: Nur für Jan Niestroj
Hallo Jan, die Gewindeerstellung ist schon korrekt in die Funktion eingebaut! sd-call-cmds darf halt nicht ohne User-Action (Dialog) aufgerufen werden!! https://support.ptc.com/help/creo/ced_modeling/r20.1.1.0/en/ced_modeling/baggage/documentation/integration_kit/reference/sd-call-cmds.html >> This macro can only be used in the context of a user action Aufgerufen mit GewSt_Test in der Eingabezeile liefs bei mir:
Code: (use-package :OLI) (use-package :custom) (sd-defdialog 'GewSt_TEST :Dialog-title "GewSt" :Dialog-control :sequential :toolbox-button T :Ok-action '(Gewindestange) );;sd-defdialog
(defun gewindestange () (create_part :name "Testteil" :model_name "Testteil") (uic_new_wp_with_cgeo) (CIRCLE :CEN_RAD 0,0 10) (extrude :testteil :A03 :Distance 100) ;;Zylinderflaeche bestimmen (let (fl fll) (setf fll (sd-call-cmds (get_selection :focus_type *sd-cylinder-seltype* :allow_face_part :select :in_part (sd-inq-curr-part) ) ) );;setf ;;Gewinde anlegen (dolist (fl fll) (sd-define-thread fl :nominal-diameter 20.0 :core-diameter 18.8 :Pitch 1.25 :thread-type :OUTER :thread-unit :METRIC :thread-color (sd-color-to-rgb 16711680) :thread-hand :RIGHT-HAND :thread-profile :M :include-chamfer T :thread-direction :CYL-AXIS :thread-name :GEW_NAME );;sd-define-thread );;dolist );;let );;defun
------------------ ...viele Grüße Stephan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jan Niestroj Mitglied
Beiträge: 4 Registriert: 02.08.2021 Creo Elements/Direct Modeling (x64) 20.1.3.0 mit Power Extensions V20.1 ModelManager 20.1.0.0 mit Power Extensions - Manager V20.1.xx
|
erstellt am: 03. Aug. 2021 07:20 <-- editieren / zitieren --> Unities abgeben:
|
der_Wolfgang Moderator Tastenhauer
Beiträge: 2219 Registriert: 3.20. ● PE60+80@home ● W10 Pro Build10.0.19045.4780 ● Drafting V17~V20.7 ● Modeling V17~V20.7 ● Windchill 12.1.2.6 ● UWGM Client 13.0.0.1
|
erstellt am: 03. Aug. 2021 17:53 <-- editieren / zitieren --> Unities abgeben: Nur für Jan Niestroj
Hi Jan, man kann ja mal davon ausgehen das du nicht immer nur 100mm lange M20 Gewindestangen basteln willst. ;-) .. Also kommen solche Wert EH aus einem Dialog und dann kannst Du Deine Funktion mit 3 ..4 Parametern rufen. Wenn Du deine Funktion, wie von Stephan geschrieben aufrufst hast du auch nur EINEN Undo Step.
Wenn der get_selection funktioniert hätte, hättest du schon mal 4 Undo steps alleine um den zylinder zu erzeugen. ;-) Ich würde dir nicht empfehlen uic_new... funktionen für programmatische Dinge zu verwenden. Back-to-the-roots : (CREATE_WORKPLANE :new) ;oder so ähnlich
Und beim recordern immer brav links auf die Buttons drücken und dann den Wert dazu eingeben/bestimmen; so wie bei ':distance 100' Der Extrude sieht mir komisch aus :testteil ?? und ein :keep_wp :no wäre vielleicht nützlich.
Code: (extrude :auto_direction :yes :keep_wp :no :sel_part (sd-inq-curr-part) :type :DISTANCE_TYPE :Distance 42 :Direction :+W)
------------------ ● Firefox ESR ● Java Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en) ● NotePad++ ● BuFDi ● Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jan Niestroj Mitglied
Beiträge: 4 Registriert: 02.08.2021 Creo Elements/Direct Modeling (x64) 20.1.3.0 mit Power Extensions V20.1 ModelManager 20.1.0.0 mit Power Extensions - Manager V20.1.xx
|
erstellt am: 04. Aug. 2021 11:41 <-- editieren / zitieren --> Unities abgeben:
Hallo Wolfgang, da liegst Du richtig der Hintergrund meiner Frage ist tatsächlich der, dass die genaue Ausführung meiner Gewindestange nach DIN 976-1 Form B variabel sein soll. Ähnlich wie in https://ww3.cad.de/foren/ubb/Forum92/HTML/000405.shtml#000034 soll auch bei mir das Teil über den Solid Power Normteilkatalog und eine Familientabelle aufgerufen werden. Daher benötige ich die Dialogfunktion für Nutzereingaben eigentlich nicht. Führe ich den Code über die CAD-Aktion aus, kann mit einem Undo Step das Teil gesamt entfernt werden. So sieht mein Code aktuell aus, wo ich ihn jetzt noch um die Erstellung zweier Fasen auf den Kanten ergänzt habe:
Code: (use-package :OLI) (use-package :TS-STRINGS) (use-package :TS-CATALOG-LADEN) (use-package :TS-CATALOG-MODUL)(export '(Gewindestange)) (sd-defdialog 'GewSt_TEST :Dialog-title "GewSt" :Dialog-control :sequential :toolbox-button T :Ok-action '(gewindestange) );;sd-defdialog
(defun gewindestange () (create_part :name "Testteil" :model_name "Testteil") (create_workplane :new :name "Gewindestangenebene") (CIRCLE :CEN_RAD 0,0 10) (sd-call-cmds (extrude :auto_direction :yes :keep_wp :no :sel_part (sd-inq-curr-part) :type :DISTANCE_TYPE :Distance 42 :Direction :+W)) ;;Zylinderflaeche bestimmen (let (fl fll) (setf fll (sd-call-cmds (get_selection :focus_type *sd-cylinder-seltype* :allow_face_part :select :in_part (sd-inq-curr-part) ) ) );;setf ;;Gewinde anlegen (dolist (fl fll) (sd-define-thread fl :nominal-diameter 20.0 :core-diameter 18.8 :Pitch 1.25 :thread-type :OUTER :thread-unit :METRIC :thread-color (sd-color-to-rgb 16711680) :thread-hand :RIGHT-HAND :thread-profile :M :include-chamfer T :thread-direction :CYL-AXIS :thread-name :GEW_NAME );;sd-define-thread );;dolist );;let ;;Kanten fuer Fase bestimmen (let (Kante Kant) (setf Kant (sd-call-cmds (get_selection :focus_type *sd-edge-3d-seltype* :select :in_part (sd-inq-curr-part) ) ) );;setf ;;Fase anlegen (dolist (Kante Kant) (chamfer Kante :DIST_ANGLE :new_angle_dist 3 45 :check) );;dolist );;let );;defun
Deine Anregungen zur Arbeitsebene und dem Extrude habe ich ebenfalls eingefügt. Danke sehr! Das funktioniert bei mir soweit. Jetzt muss ich noch schauen wie ich die Werte meiner Parametertabelle an die Funktion in Form von Variablen übergeben kann.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
vobu Mitglied Maschinenbautechniker
Beiträge: 276 Registriert: 26.09.2008 Windows 10 Enterprie 64 Bit SP 1 HP Z4 G4 Workstation Intel(R) Xeon(R) W-2225 CPU 4,10GHz 32,00GB Ram<P> Creo Elements/Direct Modeling SolidPower Release 20.4 Windchill 12.1.1
|
erstellt am: 04. Aug. 2021 15:01 <-- editieren / zitieren --> Unities abgeben: Nur für Jan Niestroj
|
der_Wolfgang Moderator Tastenhauer
Beiträge: 2219 Registriert: 3.20. ● PE60+80@home ● W10 Pro Build10.0.19045.4780 ● Drafting V17~V20.7 ● Modeling V17~V20.7 ● Windchill 12.1.2.6 ● UWGM Client 13.0.0.1
|
erstellt am: 08. Aug. 2021 11:42 <-- editieren / zitieren --> Unities abgeben: Nur für Jan Niestroj
Zitat: Original erstellt von Jan Niestroj: da liegst Du richtig der Hintergrund meiner Frage ist tatsächlich der, ...über den Solid Power Normteilkatalog und eine Familientabelle aufgerufen werden...
Dann hätte ich wohl der Funktion von vornherein 2 Parameter spendiert und aus Stephan's Testdialog dann ein Code: :Ok-action '(Gewindestange 20 100)
gerufen. ---- undo
Aus meiner Sicht hast du immer noch 4 Undos wenn du den mini test dialog nutzt. mach aus:
Code: (create_part :name "Testteil" :model_name "Testteil") (create_workplane :new :name "Gewindestangenebene") (CIRCLE :CEN_RAD 0,0 10) (sd-call-cmds (extrude :auto_direction :yes :keep_wp :no...))
besser Code: (sd-call-cmds (create_part :name "Testteil" :model_name "Testteil") (create_workplane :new :name "Gewindestangenebene") (CIRCLE :CEN_RAD 0,0 10) (extrude :auto_direction :yes :keep_wp :no...) )
Also die komplette Zylindererzeugung in einem sd-call-cmds. Das mal eher wegen der Lernkurve. --- chamfer erzeugen .. Da brauchst du keine Dolist und den Chamfer X mal aufrufen (ok. X ist nur 2 , aber wehret den Anfängen!) Der Chamfer verkraftet beim Aufruf mehrere Kanten auf einmal! Aber du könntest das auch alles dem Chamfer überlassen. Dein Zylinder hat nur 2 Kreisrunde Kanten . also:
Code: (chamfer :select :in_part (sd-inq-curr-part) :all :DIST_ANGLE :new_angle_dist 3 45 :check)
Also keine Loop und gar kein get_selection. die genaue syntax musst du selber (via recorder) raussuchen . Ich schreibe hier nur. ---- Ich würde es etwas rumdrehen. Erst die Geometrie komplett erzeugen und zum Schluss die Gewindefläche markieren. Ich denke das wäre etwas sicherer. Das ist aber ein bischen Bauchgefühl von mir, gebe ich zu. ------------------ ● Firefox ESR ● Java Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en) ● NotePad++ ● BuFDi ● Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Moderator Tastenhauer
Beiträge: 2219 Registriert: 3.20. ● PE60+80@home ● W10 Pro Build10.0.19045.4780 ● Drafting V17~V20.7 ● Modeling V17~V20.7 ● Windchill 12.1.2.6 ● UWGM Client 13.0.0.1
|
erstellt am: 08. Aug. 2021 11:59 <-- editieren / zitieren --> Unities abgeben: Nur für Jan Niestroj
|
Jan Niestroj Mitglied
Beiträge: 4 Registriert: 02.08.2021 Creo Elements/Direct Modeling (x64) 20.1.3.0 mit Power Extensions V20.1 ModelManager 20.1.0.0 mit Power Extensions - Manager V20.1.xx
|
erstellt am: 11. Aug. 2021 09:29 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, der parametrische Aufruf funktioniert nun wie es soll über den Normteilkatalog. Vielen Dank für die weiteren Tipps und Hinweise. Die habe ich mit in das Programm im Anhang eingepflegt. Den Aspekt mit der Gewindeerzeugung ohne Loop jedoch nicht, da ich keine Möglichkeit mehr habe es zu testen (Praktikum abgeschlossen -> kein Zugang mehr zu Creo). Wurde das Programm vorher hineingeladen, ruft die CAD-Aktion "gewindestange Name Gewindegroesse Laenge" dann bei entsprechend gestalteter Parametertabelle das Programm auf, wie auch auf dem Bild zu sehen. Beste Grüße, Jan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |