Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Erstellung eines segmentierten Kreises

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
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Erstellung eines segmentierten Kreises (240 / mal gelesen)
kadirozen
Mitglied
Projektleiter


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

Beiträge: 30
Registriert: 13.07.2023

AutoCAD LT 2024

erstellt am: 18. Jan. 2024 16: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


Screenshot2024-01-18160750.png

 
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


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

Beiträge: 30
Registriert: 13.07.2023

AutoCAD LT 2024

erstellt am: 18. Jan. 2024 16:10    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


Screenshot2024-01-18155633.png

 
Ich weiß nicht warum, aber ich kann anscheinend nicht 2 Fotos in derselben Antwort hochladen. Deshalb ist das zweite Foto hier

------------------
Kadir

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

cadffm
Moderator
良い精神




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

Beiträge: 21998
Registriert: 03.06.2002

Alles

erstellt am: 18. Jan. 2024 16:18    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 kadirozen 10 Unities + Antwort hilfreich

Du kannst 3 Dateien anhängen, aber "gleichzeitig", also Anhängen -> Datei1 Datei2 Datei3 [Upload]

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

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



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

Beiträge: 2743
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 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 kadirozen 10 Unities + Antwort hilfreich

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

kadirozen
Mitglied
Projektleiter


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

Beiträge: 30
Registriert: 13.07.2023

AutoCAD LT 2024

erstellt am: 19. Jan. 2024 13:17    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


Screenshot2024-01-19132356.png

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

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)2024 CAD.de | Impressum | Datenschutz