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