| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Polyline Punkte Runden...? (2984 mal gelesen)
|
Bunnyguard Mitglied
Beiträge: 365 Registriert: 15.12.2009
|
erstellt am: 04. Jun. 2014 23:19 <-- editieren / zitieren --> Unities abgeben:
Also ich versuche mal hier verständlich zu erklären was ich benötige. Leider hab ich sogut wie keine Lisp Kenntnisse. Folgende Funktionen sollten gegeben sein: 1. Egal welches Objekt (LWPOLYLINE,LINE,Block...KREISE,TEXT usw. ausgeschlossen) sollen die Scheitelpunkte Gerundet werden, und die Dezimalstelle auf was gerundet werden soll auch veränderbar sein. Prinzip ab 5 aufwärts Runden und ab 4 abwärts, bis zu welcher Dezimalstelle gerundet werden soll. Ist dann festzulegen. 2. Das ganze soll in eine Haupt Lisp eingebunden werden und über ein Tastaturkurzbefehl z.b. "rd" abrufbar sein. 3. Das ganze soll auch in einer Blockreferenz funktionieren, somit fällt die DXF Option leider weg. 4. Man sollte einen Auswahlsatz zur verfügung haben, um mehrer Objekte gleichzeitig bearbeiten zu können. Das ganze soll unter Autocad 2014 laufen, Expresstools usw. vorhanden. Mir ist klar ich habe schon teils hilfe bekommen, die mich leider noch nicht an mein Ziel gebracht haben. Daher bitte ich nochmal um Hilfe, ich hoffe es erbahmt sich jemand mir zu helfen.
Einen kleinen Obolus, ist selbstverständlich machbar. Danke [Diese Nachricht wurde von Bunnyguard am 04. Jun. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 04. Jun. 2014 23:42 <-- editieren / zitieren --> Unities abgeben: Nur für Bunnyguard
|
Bunnyguard Mitglied
Beiträge: 365 Registriert: 15.12.2009
|
erstellt am: 04. Jun. 2014 23:57 <-- editieren / zitieren --> Unities abgeben:
Zweck, naja ich sag es mal milde, der Kunde Wünscht die Zeichnungen so... Ja richtig es sind teils Lösungen dabei, Problem ohne irgend Kenntnisse kann ich mir die nicht zusammenstellen wie ich Sie benötige. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 05. Jun. 2014 03:53 <-- editieren / zitieren --> Unities abgeben: Nur für Bunnyguard
Zitat: Original erstellt von Bunnyguard: ... Einen kleinen Obolus, ist selbstverständlich machbar. ...
Hallo Bunnyguard, ich finde es gut, dass du dir grundsätzlich darüber im Klaren bist, dass du hier eine Dienstleistung anfragst, und daher auch eine mögliche Vergütung in den Raum stellst. Wenn du nun ein Angebot möchtest, dann sprich doch bitte die bekannten Personen hier aus dem Forum, die sich professionell mit der Programmierung beschäftigen, direkt an. Zum einen ist das Forum für Hilfestellungen bei der Programmierung gedacht und zum anderen ist es ja auch blöd, die Obolus-Verhandlungen hier über das Forum zu führen. Grüße! Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 05. Jun. 2014 08:11 <-- editieren / zitieren --> Unities abgeben: Nur für Bunnyguard
"Kunde wünscht" ist natürlich für Dich als AN ein entscheidender Punkt. Als Programmierer sehe ich aber immer noch nicht den Nutzen, warum sich der Kunde das wünscht. Gibt es eine repräsentative Beispielzeichnung? Warum wurde die Zeichnung nicht bereits mit "gerundeten" Koordinaten gezeichnet?
------------------ Mit freundlichem Gruß Udo Hübner www.CAD-Huebner.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bunnyguard Mitglied
Beiträge: 365 Registriert: 15.12.2009
|
erstellt am: 05. Jun. 2014 09:15 <-- editieren / zitieren --> Unities abgeben:
Weil wir von einem "Super" Büro Vorlagen bekommen, die er mit dem Designer gemacht hat. Aber die Konstruktion nicht ausgereift ist, deshalb sind wir als Konstruktions Büro dabei um die Konstruktion am Ende umzusetzen die auch Produktionstechnisch machbar sind. Leider sind anscheind die im Büro in Niederlande nicht fähig gerundet zu zeichnen... Und alles nochmal Zeichnen damit dieses passt, ist Zeitlich nicht drin... Also die Lisp drüber jagen und schon hat man seine Vorlage wie man sie braucht... Das ist der Grund Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 05. Jun. 2014 19:02 <-- editieren / zitieren --> Unities abgeben: Nur für Bunnyguard
|
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 05. Jun. 2014 19:35 <-- editieren / zitieren --> Unities abgeben: Nur für Bunnyguard
|
Bunnyguard Mitglied
Beiträge: 365 Registriert: 15.12.2009
|
erstellt am: 08. Jun. 2014 22:15 <-- editieren / zitieren --> Unities abgeben:
Ich bekomme hier einen Fehler... "Fehler: Überzählige CDR-Exemplare in Listenpaar mit Punkttrennung in Eingabe" [CODE](defun koord_rnd (satz nachkomma) (foreach ent_data (mapcar 'entget (vl-remove-if-not '(lambda (dummy) (= (type dummy) 'ENAME)) (mapcar 'cadr (ssnamex satz)) ) ) (entmod (mapcar '(lambda (data) (print data) (princ) (if (or (= (car data) 10) (= (car data) 11)) (cons (car data) (mapcar '(lambda (wert) (atof (rtos wert 2 nachkomma)) ) (cdr data) ) ) data ) ) ent_data ) ) ) ) (defun c:rnd () (command "_undo" "_be") (koord_rnd (ssget '((-4 . " (0 . "LINE") (0 . "LWPOLYLINE") (0 . "INSERT") (-4 . "OR>") ) ) (getint "Nachkommastellen : ") ) (command "_undo" "_e") (princ) ) [/CODE Vllt. hat jemand ne Idee ?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 09. Jun. 2014 10:23 <-- editieren / zitieren --> Unities abgeben: Nur für Bunnyguard
|
Bunnyguard Mitglied
Beiträge: 365 Registriert: 15.12.2009
|
erstellt am: 09. Jun. 2014 11:10 <-- editieren / zitieren --> Unities abgeben:
Code:
(defun koord_rnd (satz nachkomma) (foreach ent_data (mapcar 'entget (vl-remove-if-not '(lambda (dummy) (= (type dummy) 'ENAME)) (mapcar 'cadr (ssnamex satz)) ) ) (entmod (mapcar '(lambda (data) (print data) (if (or (= (car data) 10) (= (car data) 11)) (cons (car data) (mapcar '(lambda (wert) (atof (rtos wert 2 nachkomma)) ) (cdr data) ) ) data ) ) ent_data ) ) ) ) (defun c:rnd () (command "_undo" "_be") (koord_rnd (ssget '((-4 . " (0 . "LINE") (0 . "LWPOLYLINE") (0 . "INSERT") (-4 . "OR>") ) ) (getint "Nachkommastellen : ") ) (command "_undo" "_e") )
Ergab leider keine abhilfe...
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 09. Jun. 2014 13:54 <-- editieren / zitieren --> Unities abgeben: Nur für Bunnyguard
Hallo Bunnyguard, anbei der Code wie es passt, in der Liste für SSGET war der Fehler drin. Code:
(defun c:rnd () (command "_undo" "_be") (koord_rnd (ssget '((-4 . "<OR") (0 . "LINE") (0 . "LWPOLYLINE") (0 . "INSERT") (-4 . "OR>")) ) (getint "Nachkommastellen : ") ) (command "_undo" "_e") )
Vielleicht solltest Du den Visual-LISP-Editor verwenden, allein durch die Farbgebung siehst Du schon auf den ersten Blick, das hinter Deinem Gruppencode -4 etwas nicht stimmen kann (ich habe ein Screenshot beigefügt). ------------------ viele Grüße Jörn http://www.bosse-engineering.com Orthogonalvermassung Youtube Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bunnyguard Mitglied
Beiträge: 365 Registriert: 15.12.2009
|
erstellt am: 09. Jun. 2014 14:29 <-- editieren / zitieren --> Unities abgeben:
Danke funktioniert jetzt Ist es auch möglich, das ich auf 0,5 runden lass und nicht nur auf volle ? Sagen wir die zu rundende Zahl wäre 3313,3888 Wie sage ich dem das er die mir auf 3313,5 runden soll und nicht auf 3313? Denn wenn ich nach 2 Kommastellen runden mache, rundet er mir ja auf 3313,4... Möchte aber immer 0.5 Schritte haben...ist das möglich ? Danke Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 09. Jun. 2014 17:33 <-- editieren / zitieren --> Unities abgeben: Nur für Bunnyguard
Mein Vorschlag dazu: SKALIEREN (Befehl Varia) Skaliere die ganze Zeichnung um Faktor 2, runde dann auf 0 Nachkommastellen ab und skaliere dann auf Originalgröße zurück um 0.5 (Dann hast du Koordinaten auf 0.5 abgerundet). Das müsste auch mit der DXF Export Variante (also VARIA 2 , DXFOUT 0 > DXFÖFFNEN > VARIA 0.5) die gewünschten Ergebnisse bringen.
------------------ Mit freundlichem Gruß Udo Hübner www.CAD-Huebner.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 10. Jun. 2014 07:24 <-- editieren / zitieren --> Unities abgeben: Nur für Bunnyguard
Hallo Bunnyguard, runden auf 5 eventuell so? Code:
(defun c:runden5 ( / NACHKOMMA VORKOMMA WERT) (if(setq wert (getreal "\nWert eingeben:")) (progn (setq vorkomma (fix wert)) (cond((> (- wert vorkomma) 0.75) (setq vorkomma (+ vorkomma 1) nachkomma 0.0)) ((> (- wert vorkomma) 0.25) (setq nachkomma 0.5)) ('T (setq nachkomma 0.0))) (+ vorkomma nachkomma)) ) )
Mußt Du aber noch prüfen ob in allen Varianten die korrekten Ergebnisse rauskommen. ------------------ viele Grüße Jörn http://www.bosse-engineering.com Orthogonalvermassung Youtube Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bunnyguard Mitglied
Beiträge: 365 Registriert: 15.12.2009
|
erstellt am: 10. Jun. 2014 09:24 <-- editieren / zitieren --> Unities abgeben:
|
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 10. Jun. 2014 13:39 <-- editieren / zitieren --> Unities abgeben: Nur für Bunnyguard
Komisch (atof (rtos wert 2 nachkomma)) macht doch genau das, wenn nachkomma auf 1 steht Oder hab ich da was nicht verstanden. ------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 10. Jun. 2014 13:48 <-- editieren / zitieren --> Unities abgeben: Nur für Bunnyguard
Zitat: Original erstellt von Andreas Kraus: (atof (rtos wert 2 nachkomma)) macht doch genau das, wenn nachkomma auf 1 steht Oder hab ich da was nicht verstanden.
Offensichtlich: Oder Hier noch mal die Aufgabenstellung anders formuliert: Runden von übergebener Zahl, also Variable wird die Anzahl der Nachkommastellen angegeben. Mit der Besonderheit, dass die letzte Stelle auf 0 oder 5 ab/aufgerundet werden soll. ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 10. Jun. 2014 14:04 <-- editieren / zitieren --> Unities abgeben: Nur für Bunnyguard
Aha, letzte Stelle nur 0 oder 5 und nicht nur einfach runden. Jetzt hab ichs auch. Langes WE mit viel Sonne. So was vertrag ich nicht. Zitat aus: Otto: Der Ritter und die Jungfrau Die Sonne hat sein Gehirn schon so ein Bisschen .... aber sonst geht's ihm noch ganz gut. ------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 10. Jun. 2014 14:43 <-- editieren / zitieren --> Unities abgeben: Nur für Bunnyguard
mal ne Rundungsfunktion ;;; - ------------------------------------------------------------------------------ - ; ;;; - Funktionsname : DT:ROUND2 - ; ;;; - Beschreibung : Rundungsfunktion - Rundet den übergebenen Wert auf ein - ; ;;; - Vielfaches der unter BASIS angegeben Zahl. - ; ;;; - Bei fehlerhaften Argumenten wird "nil" zurückgeliefert - ; ;;; - Parameter : ZAHL [INT/REAL] - ; ;;; - BASIS [INT/REAL] - ; ;;; - Rückgabe : RUNDUNGSWERT [wie BASIS] - ; ;;; - Beispiel : (ROUND2 12.63 0.5) -> 12.5 od. (ROUND2 162.7 5) -> 165 - ; ;;; - ------------------------------------------------------------------------------ - ; (defun DT:ROUND2 (ZAHL BASIS / TEMP ) (if (and(numberp ZAHL) (=(numberp BASIS))(> BASIS 0)) (progn (setq TEMP (/ (abs ZAHL) BASIS)) (cond ( (> (- TEMP (fix TEMP)) 0.5) (setq TEMP (+ (fix TEMP) 1))) ( (< (- TEMP (fix TEMP)) 0.5) (setq TEMP (fix TEMP) )) ( (= (- TEMP (fix TEMP)) 0.5) (if (equal (/ (fix TEMP) 2.0) (fix(/ (fix TEMP) 2.0)) 0.001) (setq TEMP (fix TEMP) ) (setq TEMP (+ (fix TEMP) 1)) ) ) ) (setq TEMP (* BASIS TEMP (if (< Zahl 0 ) -1.0 1.0))) ) ) (if (=(type BASIS)'INT) (fix TEMP) TEMP) ) ------------------ Also ich finde Unities gut ... und andere sicher auch --------------------------------------- - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 11. Jun. 2014 09:43 <-- editieren / zitieren --> Unities abgeben: Nur für Bunnyguard
Noch eine Idee. Allerdings ohne die Abfragen ob eine Zahl übergeben wurde usw. Code:
(defun c:round2 (zahl basis) (cond ((= (rem zahl basis) 0.0) zahl ) ((< (rem zahl basis) basis) (- zahl (rem zahl basis)) ) ((> (rem zahl basis) basis) (+ zahl (- basis (rem zahl basis))) ) ) )
------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de [Diese Nachricht wurde von Andreas Kraus am 11. Jun. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 11. Jun. 2014 10:07 <-- editieren / zitieren --> Unities abgeben: Nur für Bunnyguard
Grade gesehen. es geht noch kürzer. (und irgendwie geht c:round2 nicht, ich habs zu c:round geändert) Code:
(defun c:round (zahl basis) (cond ((<= (rem zahl basis) basis) (- zahl (rem zahl basis)) ) ((> (rem zahl basis) basis) (+ zahl (- basis (rem zahl basis))) ) ) )
------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 11. Jun. 2014 10:34 <-- editieren / zitieren --> Unities abgeben: Nur für Bunnyguard
|
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 11. Jun. 2014 12:38 <-- editieren / zitieren --> Unities abgeben: Nur für Bunnyguard
Huch .. ja Berechnung korrigiert mit: (/ basis 2.0) ABER Das ist ja ein Sch... Wen ich z.B. die 123.65 nehme und 0.1 als Basis habe bekomme ich (rem zahl basis) -> 0.05 und (/ basis 2.0) -> 0.05 Aber wenn ich (> (/ basis 2.0) (rem zahl basis)) mache bekomme ich ein T Was soll denn das ? (= (/ basis 2.0) (rem zahl basis)) -> Nil Da versteckt sich doch ein Rundungsfehler oder ? Wenn ich zeichenketten vergleiche geht's. (defun c:round (zahl basis) (cond ((< (rtos (rem zahl basis) 2 8) (rtos (/ basis 2.0) 2 8) ) (- zahl (rem zahl basis)) ) ((>= (rtos (rem zahl basis) 2 8)(rtos (/ basis 2.0) 2 8) ) (+ zahl (- basis (rem zahl basis))) ) (t zahl) ) ) Ist doch doof oder ? ------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 11. Jun. 2014 12:53 <-- editieren / zitieren --> Unities abgeben: Nur für Bunnyguard
|
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 11. Jun. 2014 13:11 <-- editieren / zitieren --> Unities abgeben: Nur für Bunnyguard
Und was ist mit dem größer als/kleiner als ? Das geht ja auch nicht. Mir fällt da spontan keine andere Alternative ein als mit rtos zu arbeiten. ------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 12. Jun. 2014 18:11 <-- editieren / zitieren --> Unities abgeben: Nur für Bunnyguard
Meine Version: Code: (defun f#runden (#zahl #auf / ) (* (atof (rtos (/ #zahl #auf) 2 0)) #auf) )
Befehl: (f#runden 163.35 0.5) 163.5 Befehl: (f#runden 163.15 0.5) 163.0 Befehl: (f#runden 163.15 0.2) 163.2 Befehl: (f#runden 163.28 0.2) 163.2 ------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 13. Jun. 2014 08:49 <-- editieren / zitieren --> Unities abgeben: Nur für Bunnyguard
|
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 13. Jun. 2014 12:08 <-- editieren / zitieren --> Unities abgeben: Nur für Bunnyguard
Sorry Thomas, vielleicht steh ich auf der Leitung, aber warum willst Du einmal bei x.x5 (2.25) ab - und ein andermal (2.35) aufrunden? Ich würds so sehen (und wollts auch so haben): 2.15 - 2.24 => 2.20 2.25 - 2.34 => 2.30 ... ------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 13. Jun. 2014 12:22 <-- editieren / zitieren --> Unities abgeben: Nur für Bunnyguard
|
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 13. Jun. 2014 12:27 <-- editieren / zitieren --> Unities abgeben: Nur für Bunnyguard
http://de.wikipedia.org/wiki/Rundung#Kaufm.C3.A4nnisches_Runden "Das Kaufmännische Runden geschieht wie folgt: Ist die Ziffer an der ersten wegfallenden Dezimalstelle eine 0,1,2,3 oder 4, dann wird abgerundet. Ist die Ziffer an der ersten wegfallenden Dezimalstelle eine 5,6,7,8 oder 9, dann wird aufgerundet."
http://de.wikipedia.org/wiki/Rundung#Mathematisches_Runden
"Die Mathematische [i](auch geodätische oder unverzerrte) Rundung ist wie folgt definiert:[1] Folgt auf die letzte beizubehaltende Ziffer eine 0, 1, 2, 3 oder 4, so wird abgerundet. Folgt auf die letzte beizubehaltende Ziffer eine 5 (gefolgt von weiteren Ziffern, die nicht alle null sind), 6, 7, 8 oder eine 9, so wird aufgerundet. Folgt auf die letzte beizubehaltende Ziffer lediglich eine 5 (oder eine 5, auf die nur Nullen folgen), so wird derart gerundet, dass die letzte beizubehaltende Ziffer gerade wird."[/i] ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 13. Jun. 2014 12:46 <-- editieren / zitieren --> Unities abgeben: Nur für Bunnyguard
Mathematisches Runden - so hätte ich das auch gesehen ... aber die 3. Regel Zitat: Folgt auf die letzte beizubehaltende Ziffer lediglich eine 5 (oder eine 5, auf die nur Nullen folgen), so wird derart gerundet, dass die letzte beizubehaltende Ziffer gerade wird
kannte ich bis jetzt nicht. (könnte es sein, dass es die in meiner Schulzeit noch nicht gab? und während meiner aktiven Zeit ist sie mir auch nie untergekommen. Jedenfalls wieder was gelernt ...) ------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bunnyguard Mitglied
Beiträge: 365 Registriert: 15.12.2009
|
erstellt am: 17. Jun. 2014 09:13 <-- editieren / zitieren --> Unities abgeben:
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 17. Jun. 2014 09:18 <-- editieren / zitieren --> Unities abgeben: Nur für Bunnyguard
|
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 17. Jun. 2014 14:34 <-- editieren / zitieren --> Unities abgeben: Nur für Bunnyguard
Möglich ist alles. Ich hatte im Beitrag das hier schon geschrieben: Code: (defun round (zahl basis) (cond ((< (rtos (rem zahl basis) 2 8) (rtos (/ basis 2.0) 2 8)) (- zahl (rem zahl basis)) ) ((>= (rtos (rem zahl basis) 2 8) (rtos (/ basis 2.0) 2 8)) (+ zahl (- basis (rem zahl basis))) ) (t zahl) ) ) Dabei wird eine Zahl auf den nächsten Wert in einem "Raster" gebracht. Ist die Zahl genau mittig wird aufgerundet. Wenn du aus dem >= ein > machst wird eine Zahl die genau mittig ist nicht verändert. Allerdings ist ein Nachkommawert von 0.366 (aus deinem Beispiel) bei einem Raster von 0.25 näher an der 0.25 als an der 0.5, also wird abgerundet. Erst bei 0.375 würde aufgerundet auf 0.5. Klar würde man 0.366 aufrunden aber bei der "normalen" Rundung ist das Raster anders. Wenn du das änderst, ändert sich auch das Ergebnis. Bei einem Raster von 0.5 wird natürlich aufgerundet, halbierst du das Raster bekommst du weitere Zwischenwerte.
------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |