(princ "\n\t REGULAR.FAS : DEBUT")

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; redessine tout correctement avec precision, coordonnees suivant le SCG
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


(defun c:regular_draw_scg (/ js n_count prec ent
;;;                           dxf_ent dxf_lst
) (setq js      (ssget
                  '((0
                     .
                     "FACE3D,ARC,ATTDEF,ATTRIB,CIRCLE,ELLIPSE,INSERT,LINE,POLYLINE,LWPOLYLINE,*TEXT,POINT,SHAPE,SOLID,TRACE,DIMENSION,HATCH,WIPEOUT"
                    )
                   )
                )
        n_count -1
  )
  (cond (js
         (initget 6)
         (setq redprecis (atof (getcfg "APPDATA/REDPRECIS")))
         (setq prec1 (getreal
                       (strcat "\nFACTEUR D'ARRONDI A APPLIQUER AU POINT DE DEFINITION DES OBJETS, RAYON ET HAUTEUR DE TEXTE ( EXEMPLES : 0.01 , 0.001 , 0.00002 ) <"
                               (rtos redprecis 2 8)
                               "> :? "
                       )
                     )
         )
         (if (/= prec1 nil)
           (setq prec prec1)
           (setq prec redprecis)
         )
         (setcfg "APPDATA/REDPRECIS" (rtos prec 2 8))
         (setq prec (/ 1 prec))
         (setvar "cmdecho" 0)
         (command-s "_.undo" "_group")
         (while (setq ent (ssname js (setq n_count (1+ n_count))))
           (setq dxf_ent (entget ent))
           (cond ((eq (cdr (assoc 0 dxf_ent)) "LWPOLYLINE")
                  (setq dxf_lst (cdr dxf_ent)
                        dxf_ent (list (car dxf_ent))
                  )
                  (while (cdr dxf_lst)
                    (if (eq 10 (caar dxf_lst))
                      (setq dxf_ent (cons (cons 10 (mapcar '(lambda (x) (round_number x prec)) (cdar dxf_lst))) dxf_ent))
                      (setq dxf_ent (cons (car dxf_lst) dxf_ent))
                    )
                    (setq dxf_lst (cdr dxf_lst))
                  )
                  (setq dxf_ent (reverse dxf_ent))
                 )
                 ((eq (cdr (assoc 0 dxf_ent)) "POLYLINE")
                  (while (eq (cdr (assoc 0 (setq dxf_ent (entget (entnext (cdar dxf_ent)))))) "VERTEX")
                    (setq dxf_ent (subst (cons 10 (mapcar '(lambda (x) (round_number x prec)) (cdr (assoc 10 dxf_ent))))
                                         (assoc 10 dxf_ent)
                                         dxf_ent
                                  )
                    )
                    (entmod dxf_ent)
                  )
                 )
                 ((eq (cdr (assoc 0 dxf_ent)) "HATCH")
                  (setq dxf_lst (cdr dxf_ent)
                        dxf_ent (list (car dxf_ent))
                  )
                  (while (cdr dxf_lst)
                    (if (eq 10 (caar dxf_lst))
                      (setq dxf_ent (cons (cons 10 (mapcar '(lambda (x) (round_number x prec)) (cdar dxf_lst))) dxf_ent))
                      (setq dxf_ent (cons (car dxf_lst) dxf_ent))
                    )
                    (if (eq 11 (caar dxf_lst))
                      (setq dxf_ent (cons (cons 11 (mapcar '(lambda (x) (round_number x prec)) (cdar dxf_lst))) dxf_ent))
                      (setq dxf_ent (cons (car dxf_lst) dxf_ent))
                    )
                    (setq dxf_lst (cdr dxf_lst))
                  )
                  (setq dxf_ent (reverse dxf_ent))
                 )
                 (t
                  (foreach n dxf_ent
                    (if (member (car n) '(10 11 12 13 14 40))
                      (if (listp (cdr n))
                        (setq dxf_ent (subst (cons (car n) (mapcar '(lambda (x) (round_number x prec)) (cdr n)))
                                             (assoc (car n) dxf_ent)
                                             dxf_ent
                                      )
                        )
                        (setq dxf_ent (subst (cons (car n) (round_number (cdr n) prec)) (assoc (car n) dxf_ent) dxf_ent))
                      )
                    )
                  )
                 )
           )
           (entmod dxf_ent)
           (entupd ent)
         )
         (command-s "_.undo" "_end")
         (setvar "cmdecho" 1)
         (princ (strcat "\n" (itoa n_count) " objet(s) transformé(s)."))
        )
        (t (princ "\Aucun objet valide trouvé."))
  )
  (prin1)
)




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; redessine tout correctement avec precision, coordonnees suivant le SCU
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun c:regular_draw_scu (/ js n_count prec ent dxf_ent dxf_lst)
  (setq js      (ssget
                  '((0
                     .
                     "FACE3D,ARC,ATTDEF,ATTRIB,CIRCLE,ELLIPSE,INSERT,LINE,POLYLINE,LWPOLYLINE,*TEXT,POINT,SHAPE,SOLID,TRACE,DIMENSION,HATCH,WIPEOUT"
                    )
                   )
                )
        n_count -1
  )
  (cond (js
         (initget 6)
         (setq redprecis (atof (getcfg "APPDATA/REDPRECIS")))
         (setq prec1 (getreal
                       (strcat "\nFACTEUR D'ARRONDI A APPLIQUER AU POINT DE DEFINITION DES OBJETS, RAYON ET HAUTEUR DE TEXTE ( EXEMPLES : 0.01 , 0.001 , 0.00002 ) <"
                               (rtos redprecis 2 8)
                               "> :? "
                       )
                     )
         )
         (if (/= prec1 nil)
           (setq prec prec1)
           (setq prec redprecis)
         )
         (setcfg "APPDATA/REDPRECIS" (rtos prec 2 8))
         (setq prec (/ 1 prec))
         (setvar "cmdecho" 0)
         (command-s "_.undo" "_group")
         (while (setq ent (ssname js (setq n_count (1+ n_count))))
           (setq dxf_ent (entget ent))
           (cond ((eq (cdr (assoc 0 dxf_ent)) "LWPOLYLINE")
                  (setq dxf_lst (cdr dxf_ent)
                        dxf_ent (list (car dxf_ent))
                  )
                  (while (cdr dxf_lst)
                    (if (eq 10 (caar dxf_lst))
                      (setq dxf_ent (cons (cons 10 (trans (mapcar '(lambda (x) (round_number x prec)) (trans (cdar dxf_lst) 0 1)) 1 0))
                                          dxf_ent
                                    )
                      )
                      (setq dxf_ent (cons (car dxf_lst) dxf_ent))
                    )
                    (setq dxf_lst (cdr dxf_lst))
                  )
                  (setq dxf_ent (reverse dxf_ent))
                 )
                 ((eq (cdr (assoc 0 dxf_ent)) "POLYLINE")
                  (while (eq (cdr (assoc 0 (setq dxf_ent (entget (entnext (cdar dxf_ent)))))) "VERTEX")
                    (setq dxf_ent (subst (cons 10
                                               (trans (mapcar '(lambda (x) (round_number x prec)) (trans (cdr (assoc 10 dxf_ent)) 0 1)) 1 0)
                                         )
                                         (assoc 10 dxf_ent)
                                         dxf_ent
                                  )
                    )
                    (entmod dxf_ent)
                  )
                 )
                 (t
                  (foreach n dxf_ent
                    (if (member (car n) '(10 11 12 13 14 40))
                      (if (listp (cdr n))
                        (setq dxf_ent (subst (cons (car n) (trans (mapcar '(lambda (x) (round_number x prec)) (trans (cdr n) 0 1)) 1 0))
                                             (assoc (car n) dxf_ent)
                                             dxf_ent
                                      )
                        )
                        (setq dxf_ent (subst (cons (car n)
                                                   ;;(trans
                                                   (round_number ;;(trans
                                                                 (cdr n)
                                                                 ;; 0 1)
                                                                 prec
                                                   )
                                                   ;;1 0)
                                             )
                                             (assoc (car n) dxf_ent)
                                             dxf_ent
                                      )
                        )
                      )
                    )
                  )
                 )
           )
           (entmod dxf_ent)
           (entupd ent)
         )
         (command-s "_.undo" "_end")
         (setvar "cmdecho" 1)
         (princ (strcat "\n" (itoa n_count) " objet(s) transformé(s)."))
        )
        (t (princ "\Aucun objet valide trouvé."))
  )
  (prin1)
)

(defun round_number (xr n /) (* (fix (atof (rtos (* xr n) 2 0))) (/ 1.0 n)))


(defun c:sc3 ()
  (command-s "scu" "n" "3")
  (setvar "ucsfollow" 0)
  (prompt (strcat "\nUCSFOLLOW EST INACTIF (0) "))
  (princ)
  )



(defun c:regular_draw_scu_scu ()
  (prompt "\nCLIQUER SUR L'OBJET POUR ORIENTER LE SCU :")
  (command-s "scu" "OB" pause "")
  (c:regular_draw_scu)
  (command-s "scu" "p")
)



(defun c:regular_draw_scu_sc3 () (c:sc3) (c:regular_draw_scu))


(princ " >>> : CHARGE")
