| | |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | |  | Jetzt verfügbar: NVIDIA RTX PRO 6000 Blackwell Server Edition, eine Pressemitteilung
|
|
Autor
|
Thema: Erstellung eines segmentierten Kreises (906 / mal gelesen)
|
kadirozen Mitglied Projektleiter

 Beiträge: 31 Registriert: 13.07.2023 AutoCAD LT 2024
|
erstellt am: 18. Jan. 2024 16:09 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen ich versuche, eine Automatisierung für die kreisförmige Steinverkleidung zu erstellen. Momentan ist es sehr arbeitsintensiv und verursacht viele menschliche Fehler während der Berechnungen und des Zeichnungsprozesses. Ich habe es geschafft, die minimale Anzahl von Segmenten in Abhängigkeit vom Radius des Kreises und der Dicke des Steins zu berechnen. (mit Hilfe von einfacher Trigonometrie) Ich bin ein wenig verwirrt über die Erstellung der Linien, die den meisten Sinn macht und am einfachsten zu schreiben. Einige Beispielfotos und den ersten Berechnungscode sehen Sie unten.
Mein Ziel ist es, die einzelnen Polygone nur mit der Steindicke und dem Radius des gewünschten Kreises zu erstellen, um Zeit zu sparen. Ich bin in der Lage, einzelne Linien und deren Winkel zu berechnen, aber ich komme nicht dahinter, wie ich sie am besten alle auf einmal zeichnen kann. Äußere Linie und innere Linie werden als Rechteck geschlossen und ihre innere Verbindung wird beschnitten, während die äußere Verbindung um 1 mm verschoben wird. Wäre es besser, alle Punkte des einen Polygons als einzelne Punkte zu denken, sie dann zu verbinden und mit Polgon befehl zu wiederholen? oder mit Linien zu arbeiten?
Code: (defun c:SegmentRechner ( / viertelradius steinstärke minsegmentcount tsegment degreeinhalfarch linelenght TriangleH midpotl segmentoffset segmentminsmalledge small1 ) (setq viertelradius (getint "Enter Viertelradius") steinstärke (getint "Enter Steinstärke") minsegmentcount nil tsegment 1 degreeinhalfarch nil segmentoffset 3 segmentminsmalledge 10 small1 0) (while (< small1 segmentminsmalledge) (setq degreeinhalfarch (/ pi 4 tsegment) linelenght (* (sin degreeinhalfarch) 2 viertelradius) TriangleH (* (cos degreeinhalfarch) viertelradius) midpotl (- TriangleH (- (+ viertelradius segmentoffset) steinstärke)) small1 (1+ (/ midpotl (cos degreeinhalfarch))) ) (if (< small1 segmentminsmalledge) (setq tsegment (1+ tsegment)) ) ) (princ) )
------------------ Kadir Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kadirozen Mitglied Projektleiter

 Beiträge: 31 Registriert: 13.07.2023 AutoCAD LT 2024
|
erstellt am: 18. Jan. 2024 16:10 <-- editieren / zitieren --> Unities abgeben:         
|
cadffm Moderator 良い精神
       

 Beiträge: 22689 Registriert: 03.06.2002 Alles
|
erstellt am: 18. Jan. 2024 16:18 <-- editieren / zitieren --> Unities abgeben:          Nur für kadirozen
|
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin

 Beiträge: 2880 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Plateia, Canalis Visual Basic
|
erstellt am: 18. Jan. 2024 18:53 <-- editieren / zitieren --> Unities abgeben:          Nur für kadirozen
Hallo Kedir, Du hast uns nur den Code für die Berechnung eingestellt, gezeichnet wird dabei ja noch nichts. Was mich etwas wundert ist die While-Schleife, denn eigentlich brauchst Du die für die Berechnung doch gar nicht. Die Mindestaußenstärke ist doch immer 3 (mm?), damit bekommt man mit Radius und Steinstärke die benötigten Längen. So ganz habe ich auch noch nicht verstanden warum die Steinplatten dann nicht ganz auf der Schablone aufliegen aber vermutlich wegen Schutzfließ.
Zitat: Wäre es besser, alle Punkte des einen Polygons als einzelne Punkte zu denken, sie dann zu verbinden und mit Polgon befehl zu wiederholen? oder mit Linien zu arbeiten?
Kommt darauf an, was du alles automatisieren möchtest. Im Prinzip würde ich hier die beiden Elemente (Schablone für Viertelkreis und Steinsegment) als Polygon oder Block erzeugen. Den kann man dann beliebig verschieben, kopieren, drehen. Die Einzelwerte hast Du ja, mußt nur das Coordinatenarray zusammensetzen. Grüße Klaus
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| | Anzeige: | Infos zum Werbeplatz >> | GeoTools CAD APP für Tiefbau, Facility Management, GIS, Vermessung und Kartografie GeoTools is a geo-data application that is useful to view, create, modify, analyze and report on CAD data that is geographic in nature. Useful for GIS data creation, surveying, mapping, facilities management, infrastructure, landscape development, city planning or similar, workflows.
|
|
kadirozen Mitglied Projektleiter

 Beiträge: 31 Registriert: 13.07.2023 AutoCAD LT 2024
|
erstellt am: 19. Jan. 2024 13:17 <-- editieren / zitieren --> Unities abgeben:         
Hallo cadffm, KlaK Es tut mir wirklich leid für die lange Nachricht. Es ist ein bisschen kompliziert zu erklären. (ich habe das erste geschrieben, was mir eingefallen ist, die Variable auf 0-360 zu begrenzen, aber wenn Sie eine bessere Idee haben, bin ich offen für Vorschläge, die Benutzereingabe auf positive Eingaben und den Grad auf 0-360 zu begrenzen) (ich werde später "initget" Bitwerte hinzufügen) Wir brauchen 2 mm Unterschied zwischen den Steinstücken, um Platz für den Kleber zu haben. Es ist mir gelungen, einzelne Segmente zu erstellen, die alle Produktionsanforderungen erfüllen. Der Code kann automatisch die erforderliche Anzahl von Segmenten (Minimum erforderlich) abhängig von der Benutzereingabe anpassen. Im üblichen Arbeitsablauf versetzen wir die Innenkante des Polygons, um die Außenkontur der Schablone zu erhalten, richten sie an der X-Achse aus und fügen zusätzliche 50 mm in der Höhe und 20 mm an den Seiten hinzu und schneiden alle widersprüchlichen Linien ab. Das Problem ist, dass die CNC nur bis zu 200 mm arbeiten kann, so dass die Schablone nicht über diesen Wert hinausgehen kann. Ich bin tatsächlich in der Lage, innere Punkte der Segmente zu erhalten, aber sie sind in der While-Schleife enthalten, ich muss irgendwie alle diese zusätzlichen Punkte in einer Liste hinzufügen und sie in einem anderen Polylinienbefehl verwenden. Vielleicht funktioniert Liste, aber ich bin nicht sicher. Und um Schablone symmetrisch zu machen, denke ich, ich muss sicherstellen, dass die Segmentanzahl gerade ist. Wie kann ich erzwingen, dass ein Wert eine gerade Zahl ist?
Dieser Code funktioniert bis zum letzten Schritt wie gewünscht.
Code: (defun c:SegmentRechner ( / viertelradius steinstärke minsegmentcount tsegment degreeinhalfarch ;linelenght TriangleH midpotl segmentoffset segmentminsmalledge small1 centerpt pt1 pt2 pt3 pt4 pt5 pt6 pointincrement OSM segmentform turns turnsdegree i apt1 apt2 apt3 segmentformuserinput ) (defun *error* ( msg ) ;(command-s "_.UNDO" "_back" "n") (setvar "filedia" 1) (setvar 'Cmdecho 1) ;(turnon) ;(setvar 'osmode 16383) (if OSM (setvar "osmode" OSM ));OSnap mode other than nil, change it back to OSM (and msg (not (wcmatch (strcase msg) "*CANCEL*,*QUIT*,*BREAK*")) (princ (strcat "\n" msg)) ) (princ) (exit) ) (setq OSM (getvar 'osmode) ;os mode saved viertelradius (getint "Enter Viertelradius") steinstärke (getint "Enter Steinstärke") segmentformuserinput 361 ;(getint "Enter Segment Degree 90 for Quarter 180 for half 360 for Circular etc.") ;segmentform (* (/ segmentformuserinput 180.00) pi) turns 0 turnsdegree nil i 1 minsegmentcount nil tsegment 1 degreeinhalfarch nil segmentoffset 3 segmentsectionoffset 1 segmentminsmalledge 10 small1 0 pointincrement pi pt1 nil pt2 nil pt3 nil pt4 nil pt5 nil pt6 nil apt1 nil apt2 nil apt3 nil centerpt (getpoint "Centerpoint for the circle");'(0.0 0.0 0.0); Segmentwith3offset (+ viertelradius segmentoffset) segmentwith1offset (+ viertelradius segmentsectionoffset) ) (while (or (<= segmentformuserinput 0) (> segmentformuserinput 360)) (setq segmentformuserinput (getreal "Enter Segment Degree 90 for Quarter 180 for half 360 for Circular etc.") segmentform (* (/ segmentformuserinput 180.00) pi) ) ) (setvar 'Cmdecho 0) (setvar 'osmode 0);osmode null (while (or (<= small1 segmentminsmalledge) (> small1 steinstärke)) (setq degreeinhalfarch (/ segmentform 2 tsegment) ;linelenght (* (sin degreeinhalfarch) 2 viertelradius) TriangleH (* (cos degreeinhalfarch) viertelradius) midpotl (- TriangleH (- (+ viertelradius segmentoffset) steinstärke)) small1 (1+ (/ midpotl (cos degreeinhalfarch))) turnsdegree (* 2 degreeinhalfarch) turns (/ segmentform turnsdegree) ) (if (or (<= small1 segmentminsmalledge) (> small1 steinstärke)) (setq tsegment (1+ tsegment)) ) (terpri)(princ small1)(terpri);(princ segmentform) ) ;(terpri)(princ degreeinhalfarch)(terpri)(princ segmentform) (terpri)(princ turns)(terpri)(princ turnsdegree)(terpri) ;(alert "after while") (while (<= i turns) (setq pt1 (polar centerpt pointincrement (/ (- Segmentwith3offset steinstärke) (cos degreeinhalfarch))) pt2 (polar centerpt pointincrement segmentwith1offset) pt3sidelenght (- Segmentwith3offset (* segmentwith1offset (cos degreeinhalfarch))) pt3 (polar pt2 (- pointincrement degreeinhalfarch) pt3sidelenght) pt4 (polar pt3 (- pointincrement degreeinhalfarch (/ pi 2)) (* 2 (- (* (/ Segmentwith3offset (cos degreeinhalfarch)) (sin degreeinhalfarch)) (* (/ pt3sidelenght (cos degreeinhalfarch)) (sin degreeinhalfarch))))) pt5 (polar pt4 (- pointincrement degreeinhalfarch pi) pt3sidelenght) pt6 (polar centerpt (- pointincrement (* 2 degreeinhalfarch)) (/ (- Segmentwith3offset steinstärke) (cos degreeinhalfarch))) apt1 (polar centerpt pointincrement viertelradius) apt2 (polar centerpt (- pointincrement degreeinhalfarch) viertelradius) apt3 (polar centerpt (- pointincrement turnsdegree) viertelradius) ) (command-s "_.pline" pt1 pt2 pt3 pt4 pt5 pt6 pt1 "") (command-s "_.arc" apt1 apt2 apt3 "") (setq pointincrement (- pointincrement turnsdegree) i (1+ i) ) ) (command "_.point" centerpt) (princ) (*error* "Program finished succesfully /n") )
------------------ Kadir
[Diese Nachricht wurde von kadirozen am 19. Jan. 2024 editiert.] [Diese Nachricht wurde von kadirozen am 19. Jan. 2024 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |