Aller au contenu

HELP - Nomenclature autmoatique


grosseel

Messages recommandés

Bonjour à tous,

Je viens de trouver cette routine sur le net mais je n'arrive pas à l'adapter à mes besoins et selon mes applications déja existante (je travaille avec différents Lisp qui me permettent de passer d'un calque à un autre - Un calque = un folio). Le probléme est que la routine détruit bien ma nomenclature puis il géle ou libére le calque voulue puis elle plante.

 

-> erreur: type d'argument incorrect: lselsetp nil

 

Please, j'au besoin d'aide.

 

 ;; ------------------------------------------------------------------------------------------------------------------------
;; Fonction pour Création de la nomenclature
(defun c:NMC_FOL  (/)
   (if (not V_NMC_FOL)
       (progn
           (prompt
               (strcat
                   "\n - Nomenclature automatique -\n"
                   )
               )
           (setq V_NMC_FOL "")
           )
       )
   ;; Destruction de l'ancienne nomenclature
   ;; initialisation des paramètres utiles au traitement
   (af "001")
   (setq
       FOL_DEP   (getvar "clayer")
       FOL_NMC   (getvar "clayer")
       V_ATTDIA  (getvar "attdia")
       V_CMDECHO (getvar "cmdecho")
       i1        0
       SEL       (ssadd)
       )
   (setvar "regenmode" 0)
   (setvar "attdia" 0)
   (setvar "attreq" 1)
   (setvar "cmdecho" 0)
   (setq FLC (atoi (getvar "clayer")))
   ;; destruction de l'ancienne nomenclature
   (setq LST (list (cons -4 "and>")))
   (setq LST (cons (cons 0 "insert") LST))
   (setq LST (cons (cons -4 "or>") LST))
   (setq LST (cons (cons 2 "REC_FOL") LST))
   (setq LST (cons (cons 2 "GR_FOL") LST))
   (setq LST (cons (cons -4 "    (setq LST (cons (cons -4 "    (setq SEL (ssget "X" LST))
   (if SEL
       (progn
           (repeat (sslength SEL)
               (entdel (ssname SEL i1))
               (setq i1 (1+ i1))
               )
           )
       )
   ;; Remplissage automatique de la nomenclature des folios
   ;; sélection dans la base de donnée de tous les blocs "CARTO"
   (setq SEL
            (ssget "X"
                   (list
                       (cons 0 "insert")
                       (cons 2 "CARTO")
                       ;;    (cons 2 "FDP01")
                       )
                   )
         )
   ;; sélection dans la base de donnée de tous les blocs "IND_FOL"
   (setq JS2
            (ssget "X"
                   (list
                       (cons 0 "insert")
                       (cons 2 "IND_FOL")
                       )
                   )
         )
   ;; transfert de "JS2" dans "SEL"
   (setq I1 (sslength js2))
   (while (/= 0 I1)
       (setq I1 (- I1 1))
       (ssadd (ssname JS2 I1) SEL)
       )

   ;; balayage du tableau "layer"

   (tblnext "layer" T)
   (while (setq NFOL (cdadr (tblnext "layer")))
       (progn

           ;; initialisation par défaut du commentaire à insérer dans la nomencl.
           (setq
               REPF " "
               STLF " "
               IND  " "
               )
           ;; recherche du cartouche par balayage du jeu de sélection
           (setq LONG (sslength SEL))
           (while (/= 0 LONG)
               (progn
                   (setq
                       NBLOC (ssname SEL (- LONG 1))
                       NPLAN (cdr (assoc 8 (entget NBLOC)))
                       X1    ""
                       )

                   ;; si cartouche existant alors mémorisation des divers
                   ;; renseignement
                   (if (EQUAL NFOL NPLAN)
                       (progn
                           (setq NATTR (entnext NBLOC))
                           (while
                               (/= "SEQEND"
                                   (cdr (assoc 0 (setq LATTR (entget NATTR)))))
                                  (progn
                                      (if (= (strcat "REP_FONC")
                                             (cdr (assoc 2 LATTR)))
                                          (setq REPF (cdr (assoc 1 LATTR)))
                                          )
                                      (if
                                          (= "" REPF)
                                             (setq REPF " ")
                                             )
                                      (if (= (strcat "STYLE_FOL")
                                             (cdr (assoc 2 LATTR)))
                                          (setq STLF (cdr (assoc 1 LATTR)))
                                          )
                                      (if (= (strcat "IND") (cdr (assoc 2 LATTR)))
                                             (progn
                                                 (setq X1 (cdr (assoc 1 LATTR)))
                                                 (if (> X1 IND)
                                                     (setq IND X1))
                                                 )
                                             )
                                      (if (= "" IND)
                                          (setq IND "")
                                          )
                                      (ssdel NBLOC SEL)
                                      )
                                  (setq NATTR (entnext NATTR))
                                  )
                           )
                       )
                   )
               (setq LONG (- LONG 1))
               )

           ;; procédure de calcul des coordonnées de la position d'insertion du bloc
           (setq OPI1 (distof NFOL))
           (if OPI1
               (progn
                   (setq OPI2
                            (*
                                (-
                                    (/ OPI1 52)
                                    (setq OPI3 (float (fix (/ OPI1 52))))
                                    )
                                52
                                )
                         )
                   (setq OPI4
                            (*
                                (-
                                    (/ OPI3 2)
                                    (float (fix (/ OPI3 2)))
                                    )
                                2
                                )
                         )
                   (if (= 1 OPI4)
                       (setq X 200)
                       (setq X 15))
                   (setq Y (- 260 (* 5 OPI2)))
                   (setq COORD (list X Y))
                   ;; calcul du folio d'insertion
                   (if
                       (>
                           (+ (atoi NFOL) 1)
                           (* 104 (+ (- FLC (atoi FOL_DEP)) 1))
                           )
                          (progn
                              (setq FOL_NMC (itoa (+ (atoi FOL_DEP)
                                                     (/ (atoi NFOL) 104))))
                              (if (/= (itoa FLC) FOL_NMC)
                                  (progn
                                      (setq FLC (atoi FOL_NMC))
                                      (command
                                          "_insert"
                                          "W:\\TECHNIQUE\\AUTOCAD\\Symboles DAO 2003\\Aide\\GR_FOL"
                                          (list 0 0)
                                          ""
                                          ""
                                          ""
                                          )
                                      ;; récupération du bloc gr_fol inséré
                                      (setq
                                          N_ENT8 (entlast)
                                          L_ATT8 (entget N_ENT8)
                                          )
                                      (setq L_ATT8
                                               (subst
                                                   (cons 8 FOL_NMC)
                                                   (assoc 8 L_ATT8)
                                                   L_ATT8
                                                   )
                                            )
                                      (entmod L_ATT8)
                                      (entupd N_ENT8)
                                      )
                                  )
                              )
                          )
                   (if (= nfol "1")
                       (command
                           "_insert"
                           "W:\\TECHNIQUE\\AUTOCAD\\Symboles DAO 2003\\Aide\\GR_FOL"
                           (list 0 0)
                           ""
                           ""
                           ""
                           "_insert"
                           "W:\\TECHNIQUE\\AUTOCAD\\Symboles DAO 2003\\Aide\\REC_FOL"
                           (list 15 260)
                           ""
                           ""
                           ""
                           "0"
                           ind
                           "PDG"
                           "PAGE DE GARDE"
                           " "
                           )
                       )
                   (command
                       "_insert"     "W:\\TECHNIQUE\\AUTOCAD\\Symboles DAO 2003\\Aide\\REC_FOL"  COORD
                       ""            ""            ""            nfol
                       ind           repf          stlf          " ")
                   ;; récupération du bloc gr_fol inséré
                   (setq N_ENT8 (entlast))
                   (setq L_ATT8 (entget N_ENT8))
                   (setq L_ATT8
                            (subst
                                (cons 8 FOL_NMC)
                                (assoc 8 L_ATT8)
                                L_ATT8
                                )
                         )
                   (entmod L_ATT8)
                   (entupd N_ENT8)
                   )
               )
           )
       )
   (setvar "attdia" V_ATTDIA)
   (setvar "cmdecho" V_CMDECHO)
   (setvar "regenmode" 1)
   (prin1)
   )

;; ------------------------------------------------------------------------------------------------------------------------
;; Fonction pour Destruction de l'ancienne nomenclature
(defun AF (FOLIO / FLC OPT)  
  (setq FLC (getvar "clayer"))
  (if (/= NIL FOLIO)
     (SETQ FOLIO (STRCASE FOLIO))
  )
  (setq OPT "_thaw")
  (if (/= FLC FOLIO)
     (progn 
        (if (= FOLIO "000") (setq OPT "_F"))
        (command
           "_-layer" "_thaw" FOLIO "_set" FOLIO 
           "_F" FLC OPT "000" "_thaw" "0"  ""
        )
     )
  )
 (princ)  
)

Lien vers le commentaire
Partager sur d’autres sites

ça m'a l'air vachement compliqué... et douteux.

 

(setq LST (list (cons -4 "and>")))

(setq LST (cons (cons 0 "insert") LST))

(setq LST (cons (cons -4 "or>") LST))

(setq LST (cons (cons 2 "REC_FOL") LST))

(setq LST (cons (cons 2 "GR_FOL") LST))

(setq LST (cons (cons -4 "

(setq LST (cons (cons -4 "

(setq SEL (ssget "X" LST))

(if SEL

(progn

(repeat (sslength SEL)

(entdel (ssname SEL i1))

(setq i1 (1+ i1))

)

 

 

On aurait envie de remplacer par quelque chose comme :

 

(setq SEL 
 (ssget "_X"
   '(
     (0 . "INSERT")
     (-4 . " c'est censé être un (-4 . " suivi d'un signe inférieur, suivi d'un or, suivi d'un guillement et d'une parenthèse, mais ça ne s'affiche pas
       (2 . "REC_FOL")
       (2 . "GR_FOL")
     (-4 . "or>")
   )
 )
)
(if SEL
(progn
(repeat (sslength SEL)
(entdel (ssname SEL i1))
(setq i1 (1+ i1))

 

Bon moi j'aurais mis une simple commande _erase, plutôt que entdel dans une boucle while, mais ça ne fait pas très LISP et je vais me faire taper sur les doigts par les puristes.

 

 

Plus loin,c'est pareil

 

(setq SEL

(ssget "X"

(list

(cons 0 "insert")

(cons 2 "CARTO")

;; (cons 2 "FDP01")

)

)

)

 

pourrait donner

 

(setq SEL
(ssget "_X"
 '((0 . "INSERT") (2 . "CARTO"))
)

 

etc ...

 

Commence déjà par simplifier le code pour y voir plus clair.

 

Amicalement

 

Zebulon_

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité