(princ "\n\t SPECIAL SELECTIONS.FAS : DEBUT")
;;; Special_Selections -Gille Chanteau- d(gile)
;;; Quelques routines pour créer des jeux de sélection particuliers.

;;;===============================================================;;;

;; Sélection par calque
(defun c:selection_meme_calque (/ ss ent)
  (and (or (and (setq ss (cadr (ssgetfirst))) (= 1 (sslength ss)) (setq ent (ssname ss 0)))
           (and (sssetfirst nil nil) (setq ent (car (entsel))))
       )
       (sssetfirst nil (ssget "_X" (list (assoc 8 (entget ent)))))
  )
  (princ)
)

;;;===============================================================;;;

;; Sélection par type d'entité
(defun c:selection_type_entite (/ ss)
  (and (or (and (setq ss (cadr (ssgetfirst))) (= 1 (sslength ss)) (setq ent (ssname ss 0)))
           (and (sssetfirst nil nil) (setq ent (car (entsel))))
       )
       (sssetfirst nil (ssget "_X" (list (assoc 0 (entget ent)))))
  )
  (princ)
)

;;;===============================================================;;;

;; Sélection par couleur
(defun c:selection_meme_couleur (/ ent col)
  (and (or (and (setq ss (cadr (ssgetfirst))) (= 1 (sslength ss)) (setq ent (ssname ss 0)))
           (and (sssetfirst nil nil) (setq ent (car (entsel))))
       )
       (or (setq col (assoc 62 (entget ent))) (setq col (cons 62 256)))
       (sssetfirst nil (ssget "_X" (list col)))
  )
  (princ)
)

;;;===============================================================;;;

;; Sélection par type de ligne
(defun c:selection_meme_type_de_ligne (/ ent tl)
  (and (or (and (setq ss (cadr (ssgetfirst))) (= 1 (sslength ss)) (setq ent (ssname ss 0)))
           (and (sssetfirst nil nil) (setq ent (car (entsel))))
       )
       (or (setq tl (assoc 6 (entget ent))) (setq tl (cons 6 "BYLAYER")))
       (sssetfirst nil (ssget "_X" (list tl)))
  )
  (princ)
)

;;;===============================================================;;;

;; Sélection par attribut
(defun c:ssatt2 (/ att elst tag val name ss1 ss2 n ent)
  (and (setq att (car (nentsel "\nSélectionnez l'attribut source: ")))
       (setq elst (entget att))
       (setq tag  (cdr (assoc 2 elst))
             val  (cdr (assoc 1 elst))
             name (assoc 2 (entget (cdr (assoc 330 elst))))
             ss2  (ssadd)
       )
       (setq ss1 (ssget "_X" (list '(0 . "INSERT") name)))
       (repeat (setq n (sslength ss1))
         (setq ent (ssname ss1 (setq n (1- n)))
               att (entnext ent)
         )
         (while (= (cdr (assoc 0 (setq elst (entget att)))) "ATTRIB")
           (if (and (= (cdr (assoc 2 elst)) tag) (= (cdr (assoc 1 elst)) val))
             (ssadd ent ss2)
           )
           (setq att (entnext att))
         )
       )
       (sssetfirst nil ss2)
  )
  (princ)
)

;;;===============================================================;;;

(defun c:ssatt (/ doc att elst tag val name ss1 ss2)
  (vl-load-com)
  (and (setq doc (vla-get-activedocument (vlax-get-acad-object)))
       (setq att (car (nentsel "\nSélectionnez l'attribut source: ")))
       (setq att (vlax-ename->vla-object att))
       (= (vla-get-objectname att) "AcDbAttribute")
       (setq tag  (vla-get-tagstring att)
             val  (vla-get-textstring att)
             blk  (vla-objectidtoobject doc (vla-get-ownerid att))
             name (if (vlax-property-available-p blk 'effectivename)
                    (vla-get-effectivename blk)
                    (vla-get-name blk)
                  )
             ss2  (ssadd)
       )
       (princ "\nSélectionnez les blocs ou <tout>: ")
       (or (ssget (list '(0 . "INSERT") '(66 . 1) (cons 2 (strcat name ",`*U*"))))
           (ssget "_X" (list '(0 . "INSERT") '(66 . 1) (cons 2 (strcat name ",`*U*"))))
       )
       (vlax-for blk (setq ss1 (vla-get-activeselectionset doc))
         (if (= name
                (if (vlax-property-available-p blk 'effectivename)
                  (vla-get-effectivename blk)
                  (vla-get-name blk)
                )
             )
           (foreach a (vlax-invoke blk 'getattributes)
             (if (and (= (vla-get-tagstring a) tag) (= (vla-get-textstring a) val))
               (ssadd (vlax-vla-object->ename blk) ss2)
               t
             )
           )
           t
         )
       )
       (not (vla-delete ss1))
       (sssetfirst nil ss2)
  )
  (princ)
)


;;;ssatt sélectionne tous les blocs de même nom ayant la même valeur d'attribut que l'attribut source sélectionné.
;;;
;;;sstag (ci dessous) sélectionne tous les blocs ayant un attribut dont l'étiquette correspond à la chaîne entrée (non sensible à la casse et acceptant les caractères génériques).
;;;SSTAG entré en ligne de commande sélectionne et 'gripe' les blocs.
;;;(sstag "etiquette") entré à l'invite "Choix des objets: " d'une commande de modification, ajoute les blocs au jeu de sélection.

(defun sstag (tag / ss res ref name blk)
  (vl-load-com)
  (or *acad* (setq *acad* (vlax-get-acad-object)))
  (or *acdoc* (setq *acdoc* (vla-get-activedocument *acad*)))
  (setq res (ssadd))
  (if (ssget "_X" '((0 . "INSERT") (66 . 1)))
    (progn (vlax-for ref (setq ss (vla-get-activeselectionset *acdoc*))
             (setq has nil)
             (foreach att (vlax-invoke ref 'getattributes)
               (if (wcmatch (strcase (vla-get-tagstring att)) (strcase tag))
                 (setq has t)
               )
             )
             (if has
               (ssadd (vlax-vla-object->ename ref) res)
             )
           )
           (vla-delete ss)
    )
  )
  (if (< 0 (sslength res))
    res
  )
)

(defun c:sstag (/ tag)
  (if (setq tag (getstring "\Entrez l'étiquette: "))
    (sssetfirst nil (sstag tag))
  )
  (princ)
)





(defun sstags (tag / ss res ref name blk)
  (vl-load-com)
  (or *acad* (setq *acad* (vlax-get-acad-object)))
  (or *acdoc* (setq *acdoc* (vla-get-activedocument *acad*)))
  (setq res (ssadd))
  (if (ssget '((0 . "INSERT") (66 . 1)))
    (progn (vlax-for ref (setq ss (vla-get-activeselectionset *acdoc*))
             (setq has nil)
             (foreach att (vlax-invoke ref 'getattributes)
               (if (wcmatch (strcase (vla-get-tagstring att)) (strcase tag))
                 (setq has t)
               )
             )
             (if has
               (ssadd (vlax-vla-object->ename ref) res)
             )
           )
           (vla-delete ss)
    )
  )
  (if (< 0 (sslength res))
    res
  )
)

(defun c:sstags (/ tag)
  (setq nomattri (getcfg "APPDATA/nomattri"))
  (setq com1 (getstring t (strcat "\nVEUILLEZ ENTRER LE NOM DE L ATTRIBUT <" nomattri "> : ")))
  (if (/= com1 "")
    (setq nomattri com1)
  )
  (setcfg "APPDATA/nomattri" nomattri)
  (sssetfirst nil (sstags nomattri))
;;;  (if (setq tag (getstring "\Entrez l'étiquette: "))
;;;    
;;;  )
  (princ)
)






(defun sstagsn (nomattri valeurattri / ss res ref name blk)
  (vl-load-com)
  (or *acad* (setq *acad* (vlax-get-acad-object)))
  (or *acdoc* (setq *acdoc* (vla-get-activedocument *acad*)))
  (setq res (ssadd))
  (if (ssget '((0 . "INSERT") (66 . 1)))
    (progn (vlax-for ref (setq ss (vla-get-activeselectionset *acdoc*))
             (setq has nil)
             (foreach att (vlax-invoke ref 'getattributes)
               (setq test31 att)
               (if (and (wcmatch (strcase (vla-get-tagstring att)) (strcase nomattri))
                        (wcmatch (strcase (vla-get-textstring att)) (strcase valeurattri))
                   )
                 (setq has t)
               )
             )
             (if has
               (ssadd (vlax-vla-object->ename ref) res)
             )
           )
           (vla-delete ss)
    )
  )
  (if (< 0 (sslength res))
    res
  )
)


(defun sstagsnENPARTIE (nomattri valeurattriENPARTIE / ss res ref name blk)
  (vl-load-com)
  (or *acad* (setq *acad* (vlax-get-acad-object)))
  (or *acdoc* (setq *acdoc* (vla-get-activedocument *acad*)))
  (setq res (ssadd))
  (if (ssget '((0 . "INSERT") (66 . 1)))
    (progn (vlax-for ref (setq ss (vla-get-activeselectionset *acdoc*))
             (setq has nil)
             (foreach att (vlax-invoke ref 'getattributes)
               (setq test31 att)
               (if (and (wcmatch (strcase (vla-get-tagstring att)) (strcase nomattri))
                        (wcmatch (strcase (vla-get-textstring att)) (strcase (strcat "*" valeurattriENPARTIE "*") ))
                   )
                 (setq has t)
               )
             )
             (if has
               (ssadd (vlax-vla-object->ename ref) res)
             )
           )
           (vla-delete ss)
    )
  )
  (if (< 0 (sslength res))
    res
  )
)






(defun c:sstagsn (/ nomattri valeurattri)
  (setq nomattri (getcfg "APPDATA/nomattri"))
  (setq boite "MODIFICATION DU NOM DE L'ATTRIBUT")
  (setq message "VEUILLEZ ENTRER LE NOM DE L'ATTRIBUT A MODIFIER")
  (inputbox2 boite message nomattri)
  (if (/= ret "")
    (setq nomattri ret)
  )
  (setcfg "APPDATA/nomattri" nomattri)
  (setq valeurattri (getcfg "APPDATA/valeurattri"))
  (setq boite "MODIFICATION DE LA VALEUR DE L'ATTRIBUT")
  (setq message "VEUILLEZ ENTRER LA VALEUR DE L'ATTRIBUT A MODIFIER")
  (inputbox2 boite message valeurattri)
  (if (/= ret "")
    (setq valeurattri ret)
  )
  (setcfg "APPDATA/valeurattri" valeurattri)
  (sssetfirst nil (sstagsn nomattri valeurattri))
  (princ)
)


(defun c:sstagsnenpartie (/ nomattri valeurattriENPARTIE)
  (setq nomattri (getcfg "APPDATA/nomattri"))
  (setq boite "MODIFICATION DU NOM DE L'ATTRIBUT")
  (setq message "VEUILLEZ ENTRER LE NOM DE L'ATTRIBUT A CHERCHER")
  (inputbox2 boite message nomattri)
  (if (/= ret "")
    (setq nomattri ret)
  )
  (setcfg "APPDATA/nomattri" nomattri)
  (setq valeurattriENPARTIE (getcfg "APPDATA/valeurattriENPARTIE"))
  (setq boite "MODIFICATION DE LA VALEUR DE L'ATTRIBUT")
  (setq message "VEUILLEZ ENTRER LA PARTIE DE LA VALEUR DE L'ATTRIBUT A CHERCHER")
  (inputbox2 boite message valeurattriENPARTIE)
  (if (/= ret "")
    (setq valeurattriENPARTIE ret)
  )
  (setcfg "APPDATA/valeurattriENPARTIE" valeurattriENPARTIE)
  (sssetfirst nil (sstagsnENPARTIE nomattri valeurattriENPARTIE))
  (princ)
)















;; Sélection par motif de hachure
(defun c:sshp (/ ss ent elst)
  (and (or (and (setq ss (cadr (ssgetfirst))) (= 1 (sslength ss)) (setq ent (ssname ss 0)))
           (and (sssetfirst nil nil) (setq ent (car (entsel "\nSélectionnez une hachure: "))))
       )
       (= (cdr (assoc 0 (setq elst (entget ent)))) "HATCH")
       (sssetfirst nil (ssget "_X" (list '(0 . "HATCH") (assoc 2 elst))))
  )
  (princ)
)




;;;;; Sélection par type bloc
;;;(defun c:ssbl (/ ss ent elst)
;;;  (and
;;;    (or
;;;      (and
;;;        (setq ss (cadr (ssgetfirst)))
;;;        (= 1 (sslength ss))
;;;        (setq ent (ssname ss 0))
;;;      )
;;;      (and
;;;        (sssetfirst nil nil)
;;;        (setq ent (car (entsel "\nSélectionnez un bloc : ")))
;;;      )
;;;    )
;;;    (= (cdr (assoc 0 (setq elst (entget ent)))) "insert")
;;;    (sssetfirst nil (ssget "_X" (list '(0 . "insert") (assoc 2 elst))))
;;;  )
;;;  (princ)
;;;)














;; SSCU (gile) 31/03/07
;; Sélection mutiple par cible, fenêtre ou capture
;; Le cadre de la fenêtre est parallèle au plan du SCU courant
;; La sélection est terminée en faisant Entrée, Espace ou clic droit

(defun c:sscu (/ sel
;;;               sst
               loop
;;;               p1
               gr p2 p3 p4 po ss n ent)
  (defun ssd_err (msg)
    (if (= msg "Fonction annulée")
      (princ)
      (princ (strcat "\nErreur: " msg))
    )
    (sssetfirst nil nil)
    (redraw)
    (setq *error* m:err
          m:err nil
    )
    (princ)
  )
  ;; Retourne un jeu de sélection, un point ou nil
  (defun sel (/ loop gr pt)
    (setq loop t)
    (while (and (setq gr (grread t 12 2)) (/= (car gr) 3) loop)
      (cond ((= (car gr) 5) (setq pt (cadr gr)))
            ((or (member gr '((2 13) (2 32))) (or (= (car gr) 11) (= (car gr) 25)))
             (setq loop nil
                   pt   nil
             )
            )
      )
    )
    (if pt
      (cond ((ssget pt))
            (pt)
      )
    )
  )
  (setq m:err   *error*
        *error* ssu_err
  )
  (sssetfirst nil nil)
  (setq sst (ssadd))
  (while (and (princ "\nChoix des objets: ") (setq p1 (sel)))
    (if (listp p1)
      (progn (princ "\nSpécifiez le coin opposé: ")
             (setq p1 (list (car p1) (cadr p1)))
             (while (and (setq gr (grread t 12 0)) (/= (car gr) 3))
               (if (= 5 (car gr))
                 (progn (redraw)
                        (setq p2 (list (caadr gr) (cadr p1))
                              p3 (list (caadr gr) (cadadr gr))
                              p4 (list (car p1) (cadadr gr))
                        )
                        (if (< (car p1) (car p2))
                          (progn (setq po "_WP") (grvecs (list 255 p1 p2 255 p2 p3 255 p3 p4 255 p4 p1)))
                          (progn (setq po "_CP") (grvecs (list -255 p1 p2 -255 p2 p3 -255 p3 p4 -255 p4 p1)))
                        )
                 )
               )
             )
             (redraw)
             (if (setq ss (ssget po (list p1 p2 p3 p4)))
               (repeat (setq n (sslength ss))
                 (setq ent (ssname ss (setq n (1- n))))
                 (if (not (ssmemb ent sst))
                   (ssadd ent sst)
                 )
                 (sssetfirst nil sst)
               )
             )
      )
      (progn (ssadd (ssname p1 0) sst) (sssetfirst nil sst))
    )
  )
  (sssetfirst nil sst)
  (setq *error* m:err
        m:err nil
  )
  (princ)
)


;;;===============================================================;;;

;;; SelByObj -Gilles Chanteau- 06/10/06
;;; Crée un jeu de sélection avec tous les objets contenus ou 
;;; capturés, dans la vue courante, par l'objet sélectionné
;;; (cercle, ellipse, polyligne fermée).
;;; Arguments :
;;; - un nom d'entité (ename) 
;;; - un mode de sélection (Cp ou Wp)
;;; - un filtre de sélection ou nil
;;;
;;; modifié le 19/07/07 : fonctionne avec les objets hors fenêtre

(defun selbyobj (ent opt fltr / obj dist n lst prec dist p_lst ss)
  (vl-load-com)
  (if (= (type ent) 'ename)
    (setq obj (vlax-ename->vla-object ent))
    (setq obj ent
          ent (vlax-vla-object->ename ent)
    )
  )
  (cond ((member (vla-get-objectname obj) '("AcDbCircle" "AcDbEllipse"))
         (setq dist (/ (vlax-curve-getdistatparam obj (vlax-curve-getendparam obj)) 50)
               n    0
         )
         (repeat 50
           (setq lst (cons (trans (vlax-curve-getpointatdist obj (* dist (setq n (1+ n)))) 0 1) lst))
         )
        )
        ((and (= (vla-get-objectname obj) "AcDbPolyline") (= (vla-get-closed obj) :vlax-true))
         (setq p_lst (vl-remove-if-not '(lambda (x) (or (= (car x) 10) (= (car x) 42))) (entget ent)))
         (while p_lst
           (setq lst (cons (trans (append (cdr (assoc 10 p_lst)) (list (cdr (assoc 38 (entget ent))))) ent 1) lst))
           (if (/= 0 (cdadr p_lst))
             (progn (setq prec (1+ (fix (* 25 (sqrt (abs (cdadr p_lst))))))
                          dist (/ (- (if (cdaddr p_lst)
                                       (vlax-curve-getdistatpoint obj (trans (cdaddr p_lst) ent 0))
                                       (vlax-curve-getdistatparam obj (vlax-curve-getendparam obj))
                                     )
                                     (vlax-curve-getdistatpoint obj (trans (cdar p_lst) ent 0))
                                  )
                                  prec
                               )
                          n    0
                    )
                    (repeat (1- prec)
                      (setq lst
                             (cons (trans (vlax-curve-getpointatdist
                                            obj
                                            (+ (vlax-curve-getdistatpoint obj (trans (cdar p_lst) ent 0)) (* dist (setq n (1+ n))))
                                          )
                                          0
                                          1
                                   )
                                   lst
                             )
                      )
                    )
             )
           )
           (setq p_lst (cddr p_lst))
         )
        )
  )
  (cond (lst
         (vla-zoomextents (vlax-get-acad-object))
         (setq ss (ssget (strcat "_" opt) lst fltr))
         (vla-zoomprevious (vlax-get-acad-object))
         ss
        )
  )
)


;;;===============================================================;;;

;;; SSOC pour sélectionner tous les objets capturés, suivant
;;; la vue, par le cercle, l'ellipse ou la polyligne.

(defun c:ssoc (/ ss opt)
  (and (or (and (setq ss (cadr (ssgetfirst))) (= 1 (sslength ss)))
           (and (sssetfirst nil nil)
                (setq ss (ssget "_:S:E"
                                (list '(-4 . "<OR")
                                      '(0 . "CIRCLE")
                                      '(-4 . "<AND")
                                      '(0 . "ELLIPSE")
                                      '(41 . 0.0)
                                      (cons 42 (* 2 pi))
                                      '(-4 . "AND>")
                                      '(-4 . "<AND")
                                      '(0 . "LWPOLYLINE")
                                      '(-4 . "&")
                                      '(70 . 1)
                                      '(-4 . "AND>")
                                      '(-4 . "OR>")
                                )
                         )
                )
           )
       )
       (sssetfirst nil (ssdel (ssname ss 0) (selbyobj (ssname ss 0) "Cp" nil)))
  )
  (princ)
)

;;;===============================================================;;;

;;; SSOF pour sélectionner tous les objets contenus, suivant
;;; la vue, dans le cercle, l'ellipse ou la polyligne.

(defun c:ssof (/ ss opt)
  (and (or (and (setq ss (cadr (ssgetfirst))) (= 1 (sslength ss)))
           (and (sssetfirst nil nil)
                (setq ss (ssget "_:S:E"
                                (list '(-4 . "<OR")
                                      '(0 . "CIRCLE")
                                      '(-4 . "<AND")
                                      '(0 . "ELLIPSE")
                                      '(41 . 0.0)
                                      (cons 42 (* 2 pi))
                                      '(-4 . "AND>")
                                      '(-4 . "<AND")
                                      '(0 . "LWPOLYLINE")
                                      '(-4 . "&")
                                      '(70 . 1)
                                      '(-4 . "AND>")
                                      '(-4 . "OR>")
                                )
                         )
                )
           )
       )
       (vl-cmdf "zoom" "ob" ss "")
       (sssetfirst nil (selbyobj (ssname ss 0) "Wp" nil))
  )
  (princ)
)

;;;===============================================================;;;

;;; Inv_sel Inverse le jeu de sélection courant

(defun c:inv_sel (/ ssa ssf n)
  (setq ssa (ssget "_A" (list '(0 . "~VIEWPORT") (cons 410 (getvar "ctab")))))
  (if (setq ssf (cadr (ssgetfirst)))
    (repeat (setq n (sslength ssf)) (ssdel (ssname ssf (setq n (1- n))) ssa))
  )
;;;  (sssetfirst)
  (sssetfirst nil ssa)
)


;;;-----------------------------------
;;;SELECTION SPECIALE
;;;-----------------------------------

(defun c:selection_speciale ()
  (setvar "cmdecho" 0)
  (setq typeactionselecspe (getcfg "APPDATA/typeactionselecspe"))
  (prompt "\n 1 : POUR SELECTIONNER TOUS LES BLOCS EN FONCTION D'UN ATTRIBUT")
  (prompt "\n 2 : POUR SELECTIONNER TOUS LES BLOCS EN FONCTION DU TEXTE D'UN ATTRIBUT")
  (prompt "\n 3 : POUR SELECTIONNER TOUS LES BLOCS DONT LE TEXTE D'UN ATTRIBUT COMPORTE CE MOT EN FONCTION DU NOM D'UN ATTRIBUT" )
  (prompt "\n 4 : POUR SELECTIONNER TOUS LES BLOCS DONT LE NOM COMPORTE CE MOT DANS SON NOM [ TOUT = MODEL / PRESENTATION ]"  )
  (prompt "\n 5 : POUR SELECTIONNER TOUS LES BLOCS DU MEME NOM QUE L'ORIGINAL [ TOUT = MODEL / PRESENTATION ]"  )
  (prompt "\n 6 : POUR SELECTIONNER TOUS LES BLOCS DONT LE NOM COMPORTE CE MOT DANS SON NOM [ TOUT = MODEL ]"  )
  (prompt "\n 7 : POUR SELECTIONNER TOUS LES BLOCS DU MEME NOM QUE L'ORIGINAL [ TOUT = MODEL ]")
  (prompt "\n 8 : POUR SELECTIONNER TOUS LES TEXTES COMPORTANT CE MOT DEDANS [ TOUT = MODEL / PRESENTATION ]"  )
  (prompt "\n 9 : POUR SELECTIONNER TOUS LES TEXTES COMPORTANT CE MOT DEDANS [ TOUT = MODEL ]")
  (prompt "\n10 : POUR SELECTIONNER TOUS LES TEXTES COMPORTANT CE MOT DEDANS [ TOUT = PRESENTATION ]")
  (initget "1 2 3 4 5 6 7 8 9 10 11 12 13")
  (setq tmp (getkword
              (strcat "\nSELECTIONNER LE TYPE D'ACTION DESIRE ( 1 2 3 4 5 6 7 8 9 ) <" typeactionselecspe "> : ")
            )
  )
  (if tmp
    (setq typeactionselecspe tmp)
  )
  (setcfg "APPDATA/typeactionselecspe" typeactionselecspe)
  (if (= typeactionselecspe "1")
    (progn (c:sstags))
  )
  (if (= typeactionselecspe "2")
    (progn (c:sstagsn))
  )
  (if (= typeactionselecspe "3")
    (progn (c:sstagsnenpartie))
  )
  (if (= typeactionselecspe "4")
    (progn (c:selectionner_bloc_meme_nom_en_partie))
  )
  (if (= typeactionselecspe "5")
    (progn (c:selectionner_bloc_meme_nom))
  )
  (if (= typeactionselecspe "6")
    (progn (c:selectionner_bloc_meme_nom_en_partie_model))
  )
  (if (= typeactionselecspe "7")
    (progn (c:selectionner_bloc_meme_nom_model))
  )
  (if (= typeactionselecspe "8")
    (progn (c:selectionner_texte_mot_en_partie))
  )
  (if (= typeactionselecspe "9")
    (progn (c:selectionner_texte_mot_en_partie_model))
  )
  (if (= typeactionselecspe "10")
    (progn (c:selectionner_texte_mot_en_partie_presentation))
  )
  (princ)
)














;; sélectionne/grippe les blocs sélectionné dont le nom effectif correspond au bloc source
(defun c:selectionner_bloc_meme_nom () (sssetfirst nil (ssbname)) (princ))



;; sélectionne/grippe les blocs sélectionné dont le nom effectif correspond au bloc source
(defun c:selectionner_bloc_meme_nom_en_partie () (sssetfirst nil (ssbnameenpartie)) (princ))


;; sélectionne/grippe les blocs sélectionné dont le nom effectif correspond au bloc source sur model
(defun c:selectionner_bloc_meme_nom_en_partie_model ()
  (sssetfirst nil (ssbnameenpartie_model))
  (princ)
)


;; sélectionne/grippe les blocs sélectionné dont le nom effectif correspond au bloc sourcesur model
(defun c:selectionner_bloc_meme_nom_model () (sssetfirst nil (ssbname_model)) (princ))





;; sélectionne/grippe les blocs sélectionné dont le nom effectif correspond au bloc source
(defun c:selectionner_bloc_meme_nom_de_liste ()
  (setq listenamebloc (list "MARCOG" "COTNIVG" "MARCOD"))
  (sssetfirst nil (ssbnameliste listenamebloc))
  (princ)
)


;; sélectionne/grippe les blocs sélectionné dont le nom effectif correspond au bloc source
(defun c:selectionner_bloc_meme_nom_de_liste_bis ()
  (setq listenamebloc (list "MARCOG" "COTNIVG" "MARCOD"))
  (ssbnameliste listenamebloc)
  (princ)
)



;; sélectionne/grippe les blocs sélectionné dont le nom effectif correspond au bloc source
(defun c:testdeplacer_selectionner_bloc_meme_nom_de_liste_bis ()
  (setq listenamebloc (list "MARCOG" "COTNIVG" "MARCOD"))
  (ssbnameliste listenamebloc)
  (command-s "DEPLACER" selinsert "" "0,0" "2000,0")
  (princ)
)

;; sélectionne/grippe les TEXTES sélectionné dont le MOT EST DEDANS
(defun c:selectionner_TEXTE_MOT_en_partie () (sssetfirst nil (ssTEXTEMOTenpartie)) (princ))

;; sélectionne/grippe les TEXTES sélectionné dont le MOT EST DEDANS
(defun c:selectionner_TEXTE_MOT_en_partie_model () (sssetfirst nil (ssTEXTEMOTenpartiemodel)) (princ))

;; sélectionne/grippe les TEXTES sélectionné dont le MOT EST DEDANS
(defun c:selectionner_TEXTE_MOT_en_partie_presentation () (sssetfirst nil (ssTEXTEMOTenpartiepresentation)) (princ))




;; -------------
;; selection de bloc par bout de nom de bloc
;; -------------


(defun c:blno ()
  (setvar "cmdecho" 0)
  (setq nombloc (getcfg "APPDATA/nombloc"))
  (setq com1 (getstring t (strcat "\nVEUILLEZ ENTRER LA NOUVELLE PARTIE DU NOM DE BLOC <" nombloc "> : ")))
  (if (/= com1 "")
    (setq nombloc com1)
  )
  (setq nombloc1 (strcat "*" nombloc "*"))
  (setq tousbloc (ssget (list (cons 0 "INSERT") (cons 2 nombloc1))))
  (command "SELECT" "p")
  (setcfg "APPDATA/nombloc" nombloc)
  (princ)
)




;;; SSNF pour sélectionner tous les BLOCS PAR LEUR NOMS


(defun c:ssnb (/ ss elst)
  (and (or (and (setq ss (cadr (ssgetfirst)))
                (= 1 (sslength ss))
                (= (cdr (assoc 0 (setq elst (entget (ssname ss 0))))) "INSERT")
           )
           (and (sssetfirst nil nil)
                (setq ss (ssget "+.:E:S" '((0 . "INSERT"))))
                (setq elst (entget (ssname ss 0)))
           )
       )
       (setq tousbloc (sssetfirst nil (ssget "_X" (list (assoc 0 elst) (assoc 2 elst) (assoc 410 elst)))))
       (command "SELECT" "p" "")
  )
  (princ)
)








;;;
;;;--------------------------------------------------
;;;selectionner bloc par nom effectivenanme
;;;--------------------------------------------------



(defun c:selection_bloc_meme_nom_bis (/)
  (setvar "cmdecho" 0)
  (setvar "CURSORSIZE" 10)
  (setq osm (getvar "osmode"))
  (if (and (setq source (car (entsel "\nCLIQUER SUR LE BLOC DE REFERENCE : ")))
           (setq source (vlax-ename->vla-object source))
           (= (vla-get-objectname source) "AcDbBlockReference")
      )
    (progn (setq namebloc (vla-get-effectivename source)))
  )
  (setq compt 0
        selinsertname (ssadd)
  )
  (prompt "\nSELECTIONNER LES BLOCS :")
  (setq selinsert (ssget (list (cons 0 "INSERT"))))
  (setq com (sslength selinsert))
  (while (< compt com)
    (if (= (vla-get-effectivename (vlax-ename->vla-object (cdr (assoc -1 (entget (ssname selinsert compt))))))
           namebloc
        )
      (progn (ssadd (cdr (assoc -1 (entget (ssname selinsert compt)))) selinsertname))
    )
    (setq compt (1+ compt))
  )
  (command "SELECT" selinsertname)
  (command "SELECT" "p")
  (setvar "CURSORSIZE" 100)
  (setvar "osmode" osm)
  (princ)
)








;;;Salut,
;;;
;;;Je te propose d'extraire une fonction de ta commande, fonction qui renvoie un jeu de sélection (ou nil).
;;;Tu peux utiliser cette fonction directement en ligne commande en réponse à une invite ou dans d'autres fonctions LISP comme dans la commande que tu essayes de faire.

;;;
;;;--------------------------------------------------
;;;selectionner bloc par nom effectivenanme
;;;--------------------------------------------------


;; renvoie un jeu de sélection filtré par le nom effectif du bloc source
(defun ssbname (/ source namebloc selinsert i ent)
  (if (and (setq source (car (entsel "\nCLIQUER SUR LE BLOC DE REFERENCE : ")))
           (setq source (vlax-ename->vla-object source))
           (= (vla-get-objectname source) "AcDbBlockReference")
      )
    (progn (setq selinsert nil
                 namebloc (vla-get-effectivename source))
           (prompt (strcat "\nNOM DU BLOC SOURCE : " namebloc ))
           (prompt "\nSELECTIONNER LES BLOCS :")
           (if (setq selinsert (ssget (list (cons 0 "INSERT") (cons 2 (strcat "`*U*," namebloc)))))
             (repeat (setq i (sslength selinsert))
               (setq ent (ssname selinsert (setq i (1- i))))
               (if (/= (vla-get-effectivename (vlax-ename->vla-object ent)) namebloc)
                 (ssdel ent selinsert)
               )
             )
           )
    )
  )
  (setq com (sslength selinsert))
  (prompt (strcat "\nNOMBRE DE BLOCS DU MEME TYPE SELECTIONNES : " (rtos com 2 0)))
  selinsert
)



;; renvoie un jeu de sélection filtré par une partie dans le nom 
(defun ssbnameenpartie (/ source namebloc1 selinsert i ent)
  (setq partienombloc (getcfg "APPDATA/partienombloc"))
  (setq boite "RECHERCHE BLOC")
  (setq message "VEUILLEZ ENTRER LA NOUVELLE PARTIE DU NOM DE BLOC")
  (inputbox2 boite message partienombloc)
  (if (/= ret "")
    (setq partienombloc ret)
  )
  (setcfg "APPDATA/partienombloc" partienombloc)
  (setq namebloc1 (strcat "*" partienombloc "*"))
  (prompt "\nSELECTIONNER LES BLOCS :")
  (if (setq selinsert (ssget (list (cons 0 "INSERT")
                                   ;;(cons 2 (strcat "`*U*," namebloc1))
                             )
                      )
      )
    (repeat (setq i (sslength selinsert))
      (setq ent (ssname selinsert (setq i (1- i))))
      (if (= (wcmatch (vla-get-effectivename (vlax-ename->vla-object ent)) (strcat "*" partienombloc "*"))
             nil
          )
        (ssdel ent selinsert)
      )
    )
  )
  (setq com (sslength selinsert))
  (prompt (strcat "\nNOMBRE DE BLOCS DU MEME TYPE SELECTIONNES : " (rtos com 2 0)))
  selinsert
)






;;;
;;;--------------------------------------------------
;;;selectionner bloc par nom effectivenanme
;;;--------------------------------------------------


;; renvoie un jeu de sélection filtré par le nom effectif du bloc source
(defun ssbname_model (/ source namebloc selinsert i ent)
  (if (and (setq source (car (entsel "\nCLIQUER SUR LE BLOC DE REFERENCE : ")))
           (setq source (vlax-ename->vla-object source))
           (= (vla-get-objectname source) "AcDbBlockReference")
      )
    (progn (setq namebloc (vla-get-effectivename source))
           (prompt (strcat "\nNOM DU BLOC SOURCE : " namebloc ))
           (prompt "\nSELECTIONNER LES BLOCS :")
           (if (setq selinsert (ssget (list (cons 0 "INSERT") (cons 410 "Model") (cons 2 (strcat "`*U*," namebloc)))))
             (repeat (setq i (sslength selinsert))
               (setq ent (ssname selinsert (setq i (1- i))))
               (if (/= (vla-get-effectivename (vlax-ename->vla-object ent)) namebloc)
                 (ssdel ent selinsert)
               )
             )
           )
    )
  )
  (setq com (sslength selinsert))
  (prompt (strcat "\nNOMBRE DE BLOCS DU MEME TYPE SELECTIONNES : " (rtos com 2 0)))
  selinsert
)



;; renvoie un jeu de sélection filtré par une partie dans le nom 
(defun ssbnameenpartie_model (/ source namebloc1
                              selinsert
                              i ent)
  (setq partienombloc (getcfg "APPDATA/partienombloc"))
  (setq boite "RECHERCHE BLOC")
  (setq message "VEUILLEZ ENTRER LA NOUVELLE PARTIE DU NOM DE BLOC")
  (inputbox2 boite message partienombloc)
  (if (/= ret "")
    (setq partienombloc ret)
  )
  (setcfg "APPDATA/partienombloc" partienombloc)
  (setq namebloc1 (strcat "*" partienombloc "*"))
  (prompt "\nSELECTIONNER LES BLOCS :")
  (if (setq selinsert (ssget (list (cons 0 "INSERT")
                                   (cons 410 "Model")
                                   ;;(cons 2 (strcat "`*U*," namebloc1))
                             )
                      )
      )
    (repeat (setq i (sslength selinsert))
      (setq ent (ssname selinsert (setq i (1- i))))
      (if (= (wcmatch (vla-get-effectivename (vlax-ename->vla-object ent)) (strcat "*" partienombloc "*"))
             nil
          )
        (ssdel ent selinsert)
      )
    )
  )
  (setq com (sslength selinsert))
  (prompt (strcat "\nNOMBRE DE BLOCS DU MEME TYPE SELECTIONNES : " (rtos com 2 0)))
  selinsert
  )



;; renvoie un jeu de sélection filtré par une liste de nom 
(defun ssbnameliste (listenamebloc
                     /
;;;                    selinsert
                     i
                     ent
                    )
  (prompt "\nSELECTIONNER LES BLOCS :")
  (if (setq selinsert (ssget (list (cons 0 "INSERT")
;;;                                   (cons 2 (strcat "`*U*," namebloc1))
                             )
                      )
      )
    (repeat (setq i (sslength selinsert))
      (setq ent (ssname selinsert (setq i (1- i))))
      (if (= (member (vla-get-effectivename (vlax-ename->vla-object ent)) listenamebloc) nil)
        (ssdel ent selinsert)
      )
    )
  )
;;;  (setq com (sslength selinsert))
  
;;;  selinsert
)




;; renvoie un jeu de sélection filtré par une liste de nom 
;;;(defun ssbnamelistepick (listenamebloc
;;;                     /
;;;;;;                    selinsert
;;;                     i
;;;                     ent
;;;                    )
;;;  (prompt "\nSELECTIONNER LES BLOCS :")
;;;  (if (setq selinsert (ssget (list (cons 0 "INSERT")
;;;;;;                                   (cons 2 (strcat "`*U*," namebloc1))
;;;                             )
;;;                      )
;;;      )
;;;    (repeat (setq i (sslength selinsert))
;;;      (setq ent (ssname selinsert (setq i (1- i))))
;;;      (if (= (member (vla-get-effectivename (vlax-ename->vla-object ent)) listenamebloc) nil)
;;;        (ssdel ent selinsert)
;;;      )
;;;    )
;;;  )
;;;;;;  (setq com (sslength selinsert))
;;;  
;;;;;;  selinsert
;;;)





;; renvoie un jeu de sélection filtré par une partie dans le nom 
(defun ssTEXTEMOTenpartie (/ source namebloc1 selinsert i ent)
  (setq partieMOTTEXTE (getcfg "APPDATA/partieMOTTEXTE"))
  (setq boite "RECHERCHE TEXTE")
  (setq message "VEUILLEZ ENTRER LA NOUVELLE PARTIE DU TEXTE")
  (inputbox2 boite message partieMOTTEXTE)
  (if (/= ret "")
    (setq partieMOTTEXTE ret)
  )
  (setcfg "APPDATA/partieMOTTEXTE" partieMOTTEXTE)
;;;  (setq namebloc1 (strcat "*" partieMOTTEXTE "*"))
  (prompt "\nSELECTIONNER LES TEXTES :")
  (if (setq selinsert (ssget (list (cons 0 "TEXT")
                                   ;;(cons 2 (strcat "`*U*," namebloc1))
                             )
                      )
      )
    (repeat (setq i (sslength selinsert))
      (setq ent (ssname selinsert (setq i (1- i))))
      (if (= (wcmatch (vla-get-TextString (vlax-ename->vla-object ent)) (strcat "*" partieMOTTEXTE "*"))
             nil
          )
        (ssdel ent selinsert)
      )
    )
  )
  (setq com (sslength selinsert))
  (prompt (strcat "\nNOMBRE DE TEXTES DU MEME TYPE SELECTIONNES : " (rtos com 2 0)))
  selinsert
)



;; renvoie un jeu de sélection filtré par une partie dans le nom DANS MODEL
(defun ssTEXTEMOTenpartiemodel (/ source namebloc1 selinsert i ent)
  (setq partieMOTTEXTE (getcfg "APPDATA/partieMOTTEXTE"))
  (setq boite "RECHERCHE TEXTE")
  (setq message "VEUILLEZ ENTRER LA NOUVELLE PARTIE DU TEXTE")
  (inputbox2 boite message partieMOTTEXTE)
  (if (/= ret "")
    (setq partieMOTTEXTE ret)
  )
  (setcfg "APPDATA/partieMOTTEXTE" partieMOTTEXTE)
;;;  (setq namebloc1 (strcat "*" partieMOTTEXTE "*"))
  (prompt "\nSELECTIONNER LES TEXTES :")
  (if (setq selinsert (ssget (list (cons 0 "TEXT")
                                   (cons 410 "Model")
                                   ;;(cons 2 (strcat "`*U*," namebloc1))
                             )
                      )
      )
    (repeat (setq i (sslength selinsert))
      (setq ent (ssname selinsert (setq i (1- i))))
      (if (= (wcmatch (vla-get-TextString (vlax-ename->vla-object ent)) (strcat "*" partieMOTTEXTE "*"))
             nil
          )
        (ssdel ent selinsert)
      )
    )
  )
  (setq com (sslength selinsert))
  (prompt (strcat "\nNOMBRE DE TEXTES DU MEME TYPE SELECTIONNES : " (rtos com 2 0)))
  selinsert
)

;; renvoie un jeu de sélection filtré par une partie dans le nom dans presentation 
(defun ssTEXTEMOTenpartiepresentation (/ source namebloc1 selinsert i ent)
  (setq partiemottexte (getcfg "APPDATA/partieMOTTEXTE"))
  (setq boite "RECHERCHE TEXTE")
  (setq message "VEUILLEZ ENTRER LA NOUVELLE PARTIE DU TEXTE")
  (inputbox2 boite message partiemottexte)
  (if (/= ret "")
    (setq partiemottexte ret)
  )
  (setcfg "APPDATA/partieMOTTEXTE" partiemottexte)
;;;  (setq namebloc1 (strcat "*" partieMOTTEXTE "*"))
  (prompt "\nSELECTIONNER LES TEXTES :")
  (if (setq selinsert (ssget "x" '((0 . "TEXT")
                                   (-4 . "<NOT")
                                   (410 . "Model")
                                   (-4 . "NOT>")
                                             )
                      )
      )
    (repeat (setq i (sslength selinsert))
      (setq ent (ssname selinsert (setq i (1- i))))
      (if (= (wcmatch (vla-get-textstring (vlax-ename->vla-object ent)) (strcat "*" partiemottexte "*")) nil)
        (ssdel ent selinsert)
      )
    )
  )
  (setq com (sslength selinsert))
  (prompt (strcat "\nNOMBRE DE TEXTES DU MEME TYPE SELECTIONNES : " (rtos com 2 0)))
  selinsert
)


















;;;
;;;--------------------------------------------------------------------------------------
;;;Les fichiers Special-sélections.lsp, SSMatch.lsp et SSfilter.lsp doivent être chargés.
;;;--------------------------------------------------------------------------------------




(defun c:selection (/ temp file dcl_id fun)
  (setq temp (vl-filename-mktemp "Tmp.dcl")
        file (open temp "w")
  )
  (write-line (strcat
                "INCRINPUTBOX:DIALOG{LABEL=\"SPECIAL SELECTIONS\";"
                ":RADIO_COLUMN{KEY=\"FUN\";"
                ":RADIO_BUTTON{"
                "LABEL=\"SSE TYPE D'ENTITE\";KEY=\"(C:SSE)\";}"
                ":RADIO_BUTTON{"
                "LABEL=\"SELECTION_MEME_CALQUE\";KEY=\"(C:SELECTION_MEME_CALQUE)\";}"
                ":RADIO_BUTTON{"
                "LABEL=\"SELECTION_MEME_COULEUR\";KEY=\"(C:SELECTION_MEME_COULEUR)\";}"
                ":RADIO_BUTTON{"
                "LABEL=\"SELECTION_MEME_TYPE_DE_LIGNE\";KEY=\"(C:SELECTION_MEME_TYPE_DE_LIGNE)\";}"
                ":RADIO_BUTTON{"
                "LABEL=\"SSATT VALEUR D'ATTRIBUT\";KEY=\"(C:SSATT)\";}"
                ":RADIO_BUTTON{"
                "LABEL=\"SSM PROPRIETES/OBJET\";KEY=\"(C:SSM)\";}"
                ":RADIO_BUTTON{"
                "LABEL=\"SSMM PROPRIETES MULTIPLE\";KEY=\"(C:SSMM)\";}"
                ":RADIO_BUTTON{"
                "LABEL=\"SSF PROPRIETES/SELECTION\";KEY=\"(C:SSF)\";}"
                "SPACER;"
                ":RADIO_BUTTON{"
                "LABEL=\"SSOF FENETRE/OBJET\";KEY=\"(C:SSOF)\";}"
                ":RADIO_BUTTON{"
                "LABEL=\"SSOC CAPTURE/OBJET\";KEY=\"(C:SSOC)\";}"
                "SPACER;"
                ":RADIO_BUTTON{"
                "LABEL=\"SSCU FENETRE / / AU SCU\";KEY=\"(C:SSCUT)\";}"
                "SPACER;"
                ":RADIO_BUTTON{"
                "LABEL=\"INV_SEL INVERSER LA SELECTION\";KEY=\"(C:INV_SEL)\";}}"
                "OK_CANCEL;}"
               )
              file
  )
  (close file)
  (setq dcl_id (load_dialog temp))
  (if (not (new_dialog "IncrInputbox" dcl_id))
    (exit)
  )
  (set_tile "(c:sse)" "1")
  (action_tile "accept" "(setq fun (get_tile \"fun\")) (done_dialog)")
  (start_dialog)
  (unload_dialog dcl_id)
  (and fun (eval (read fun)))
  (princ)
)






















(defun c:SELECTION_SUIVANT_HANDLE ()
  (setq NBHAND (getcfg "APPDATA/NBHAND"))
  (setq com1 (getstring t (strcat "\nVEUILLEZ ENTRER LE NOM DU HANDLE DE L'ENTITE <" NBHAND "> : ")))
  (if (/= com1 "")
    (setq NBHAND com1)
  )
  (setcfg "APPDATA/NBHAND" NBHAND)
  ;;(ssget "_X" '((0 . "INSERT") (66 . 1)))
  (setq selinsHAND (ssget "x" (list (cons 5 NBHAND)
                                     ;;(cons 2 (strcat "`*U*," namebloc1))
                             )
                      )
      )
;;;  (if (setq tag (getstring "\Entrez l'étiquette: "))
;;;    
;;;  )

(if (/= selinsHAND  nil ) 
(prompt (strcat "\nNOM DU HANDLE DE L'ENTITE TROUVEE : " NBHAND ))
  (prompt (strcat "\nAUCUNE ENTITE TROUVEE POUR LE HANDLE  : " NBHAND ))
  )
  
  (princ)
)



;;; PurgeReconciledLayers.LSP
;;;
;;; By Jimmy Bergmark
;;; Copyright (C) 2007 JTB World, All Rights Reserved
;;; Website: www.jtbworld.com
;;; E-mail: info@jtbworld.com
;;; 2007-04-05 - First release
;;; Written for AutoCAD 2008

;;; Purge all information about reconciled layers in the drawing

(defun c:purgereconciledlayers ()
  (vl-load-com)
  (vlax-for layer (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
    (vl-catch-all-apply
      '(lambda () (vla-remove (vla-getextensiondictionary layer) "ADSK_XREC_LAYER_RECONCILED"))
    )
    (vl-catch-all-apply '(lambda () (vla-delete (vla-getextensiondictionary layer))))
  )
  (setvar "LAYEREVAL" 0)
  (setvar "LAYERNOTIFY" 0)
  (princ)
)






(defun c:powerclic ( )
  (load "C:\\PowerClic7\\PowerClic.VLX")
)



;;************************************************************************

;;§/DEBUG/supprimer les entités qui pose un problème *Avertissement*: objet en propriété multiple, maintien  / none

;;*Avertissement*: objet en propriété multiple, maintien "B6DA"

;;*Warning* Multiply owned object, handle

;;;Remplacer le conteneur [44EE8]

(defun c:clearmultiplyownedobject (/
;;;                                   llign lign pos fname f wait lerror lhandle ent tp
                                   )
  (setq fname (getvar "LOGFILENAME"))
;;;  (pw_setvar1 "LOGFILEMODE" 0)
;;;  (pw_setvar1 "CMDECHO" 0)
  (vl-file-delete fname)
  (setvar "LOGFILEMODE" 1)
  (command "_qsave")
  (while (= 1 (getvar "cmdactive")) wait)
  (command "_delay" 50)
  (setvar "LOGFILEMODE" 0)
  (setq fname (getvar "LOGFILENAME"))
  (setq f (open fname "r"))
  (while (setq lign (read-line f)) (setq llign (cons lign llign)))
  (close f)
;;;  (pw_setvar2 "LOGFILEMODE")
;;;  (pw_setvar2 "CMDECHO")
  (setq llign (reverse llign))
  (if (not (setq lerror (pw_wcmatch_list llign "*objet en propriété multiple*")))
    (setq lerror (pw_wcmatch_list llign "*Multiply owned object*")) ;_put here your own localised message
  )
  (if lerror
    (progn (setq lhandle
                  (mapcar '(lambda (x /) (setq x (pw_lst_de_ch x " ")) (setq x (last x)) (setq x (vl-string-trim "\"" x)))
                          lerror
                  )
           )
    )
  )
  (setq lhandle (pw_reduct_list lhandle))
  (if lhandle
    (progn (setq lentity (mapcar 'strcase (mapcar 'car pw-l-ent-cmd)))
           (foreach ent lhandle
             (SETQ TEST43 ent )
             (setq tp (cdr (assoc 0 (entget (setq ent (handent ent))))))
             (if (not (member tp lentity))
               (entdel ent)
               (print tp)
             )
           )
    )
  )
)






;;;Solution :
;;;
;;;Faites ce qui suit:
;;;
;;;    Sur la ligne de commande d'AutoCAD, tapez (entdel(handent "handleID")).Par exemple, si l'ID de l'objet du message d'avertissement est "D23B", entrez (entdel(handent "D23B")).
;;;    Répétez la même procédure pour tous les autres objets.
;;;    Tapez CONTROLE et choisissez de corriger toutes les erreurs.
;;;    Si l'étape 3 bloque AutoCAD, passez à l'étape 5.
;;;    Tapez RECUPERERTOUT et accédez au dessin concerné.
;;;    Ouvrez le dessin et tapez AUDIT et choisissez de corriger toutes les erreurs.
;;;    Répétez l'étape 6 jusqu'à ce qu'aucune autre erreur ne s'affiche.
;;;    PURGER et enregistrer le dessin.
;;;
;;;Remarque : si vous utilisez Civil 3D, démarrez Civil 3D en tant qu'AutoCAD et modifiez DEMANDLOAD sur 0 (zéro). Cette commande ouvre le dessin sans activer les objets Civil 3D et permet d'identifier les entités problématiques.

(princ " >>> : CHARGE")
 ;|«Visual LISP© Format Options»
(120 2 1 2 nil "Ende von " 100 100 1 1 2 nil nil nil T)
;*** NE PAS AJOUTER de texte au-dessous du commentaire! ***|;
