Aller au contenu

Numerotation des entites en sautant 1 chiffre


Nicokarmann

Messages recommandés

Salut à tous.

 

Nouveau utilisateur de Covadis (v17 actuellement, bientôt mis à jour) auparavant j'ai utilisé DesignCad (Cogistem) pendant 20 ans et, encore plus lointain, Catia V4 & V5 pendant 6 ans.

Je voudrais numéroter les sommets d'une polyligne en incrémentant tous les 2 chiffres pour avoir que des nombres pairs ou impairs en fonction du premier numéro.

 

J'utilise "Numéroter les entités" qui me numérote bien tous les sommets mais ensuite je sèche pour la numérotation tous les 2 chiffres.

 

Quelqu'un a une solution ? Merci d'avance ... Sinon, je passerais par un Lisp.

 

Lien vers le commentaire
Partager sur d’autres sites

Hello @Nicokarmann 

Pas tout compris donc qq questions ?

1) On parle de Polylignes 2D ou 3D ou les Deux ?

2) Veux tu simplement un texte chiffre "a cote" de chaque sommet / vertex ?

3) Veux tu "numeroter" tous les sommets ou 1 sommet sur 2 ?

4) Veux tu une numerotation du genre : 1/2/3/etc ou 1/3/5/etc ou autre ?

Donc Choix de la valeur de depart (Par defaut=1) ? ET choix de la valeur d incrementation (Par Defaut=1) ?

Merci de tes precisions !?

Bye, lecrabe

 

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Salut, 

Merci de ta réponse. Je n'avais pas reçu de notification.

Voilà ce que j'ai besoin sur une polyligne 2D.

J'ai besoin de nommer tous les sommets avec un bloc et son attribut pour, par la suite, extraire ces numéros de sommets ainsi que ses coordonnées associées.

Par exemple:

1001, 1003, 1005, 1007, ...

Ou 

1000, 1002, 1004, 1006, ....

 

Je ne sais pas si je me suis fait comprendre.

IMG_20240908_192605.jpg

IMG_20240908_192557.jpg

Lien vers le commentaire
Partager sur d’autres sites

Bonjour, je ne pense pas que Covadis a cette fonction, mais tu peux faire 2 calques "gauche" et "droit" dans les lesquels tu répartis tes points :
-
"paire" numérotés 1,2,3,4...
-"impaire" numérotés 1000,1001,1002,1003...
(ce sera plus simple pour les retrouver dans le point suivant) (renumérotation des points = REIMMPTOPO).
-ensuite lances la commande ATTOUT, ouvres le fichier texte dans excel, et changes les numéros 1,2,3,4 en 1000,1002,1004,1006     et    1000,1001,1002,1003 en 1001,1003,1005,1007.
-et enfin lances la commande ATTIN, et choisis ce fichier texte modifié.

cordialement

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Est ce que ceci pourrait faire l'affaire?

Tu peux geler les calques "T_PT_ALT" et "T_PT_COD" pour avoir que la numérotation.

(defun c:BlockTC_POINTAtt2Vtx ( / js lst_posatt n nb_e ent dxf_ent dxf_210 lst_pt lst_num scl_blk vlaobj pr n_ini n_next old_dmz pt nbs num ang pos_att)
  (cond
    ((eq (getvar "cvport") 1)
      (princ "\n** Commande autorisée uniquement dans l'espace objet.")
    )
    (T
      (if (not (tblsearch "BLOCK" "TCPOINT"))
        (progn
          (entmake
            '((0 . "BLOCK") (100 . "AcDbEntity") (100 . "AcDbBlockBegin") (2 . "TCPOINT") (70 . 2) (8 . "0") (62 . 256) (6 . "ByLayer") (370 . -2) (10 0.0 0.0 0.0))
          )
          (entmake
            '(
            (0 . "POINT")
            (100 . "AcDbEntity")
            (67 . 0)
            (410 . "Model")
            (8 . "0")
            (62 . 0)
            (100 . "AcDbPoint")
            (10 0.0 0.0 0.0)
            (210 0.0 0.0 1.0)
            (50 . 0.0)
            )
          )
          (entmake
            '(
              (0 . "ATTDEF")
              (100 . "AcDbEntity")
              (67 . 0)
              (410 . "Model")
              (8 . "T_PT_MAT")
              (100 . "AcDbText")
              (10 0.25 0.25 0.0)
              (40 . 0.75)
              (1 . "")
              (50 . 0.0)
              (41 . 1.0)
              (51 . 0.0)
              (7 . "STANDARD")
              (71 . 0)
              (72 . 0)
              (11 0.0 0.0 0.0)
              (210 0.0 0.0 1.0)
              (100 . "AcDbAttributeDefinition")
              (280 . 0)
              (3 . "Matricule")
              (2 . "MAT")
              (70 . 0)
              (73 . 0)
              (74 . 0)
              (280 . 1)
            )
          )
          (entmake
            '(
              (0 . "ATTDEF")
              (100 . "AcDbEntity")
              (67 . 0)
              (410 . "Model")
              (8 . "T_PT_ALT")
              (100 . "AcDbText")
              (10 0.25 -0.75 0.0)
              (40 . 0.75)
              (1 . "")
              (50 . 0.0)
              (41 . 1.0)
              (51 . 0.0)
              (7 . "STANDARD")
              (71 . 0)
              (72 . 0)
              (11 0.0 0.0 0.0)
              (210 0.0 0.0 1.0)
              (100 . "AcDbAttributeDefinition")
              (280 . 0)
              (3 . "Altitude")
              (2 . "ALT")
              (70 . 0)
              (73 . 0)
              (74 . 0)
              (280 . 1)
            )
          )
          (entmake
            '(
              (0 . "ATTDEF")
              (100 . "AcDbEntity")
              (67 . 0)
              (410 . "Model")
              (8 . "T_PT_COD")
              (100 . "AcDbText")
              (10 -0.25 -1.75 0.0)
              (40 . 0.75)
              (1 . "code")
              (50 . 0.0)
              (41 . 1.0)
              (51 . 0.0)
              (7 . "STANDARD")
              (71 . 0)
              (72 . 0)
              (11 0.0 0.0 0.0)
              (210 0.0 0.0 1.0)
              (100 . "AcDbAttributeDefinition")
              (280 . 0)
              (3 . "CodeSymbole")
              (2 . "COD")
              (70 . 0)
              (73 . 0)
              (74 . 0)
              (280 . 1)
            )
          )
          (entmake '((0 . "ENDBLK") (100 . "AcDbBlockEnd") (8 . "0") (62 . 256) (6 . "ByLayer") (370 . -2)))
        )
      )
      (princ "\nSélectionner les Polylignes où placer à leurs sommets le bloc \"TC_POINT\" avec attributs")
      (setq js (ssget '((0 . "*POLYLINE") (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>"))))
      (cond
        (js
          (setq
            lst_posatt '((0.25 0.25 0.0) (0.25 -0.75 0.0) (0.25 -1.75 0.0))
            old_dmz (getvar "DIMZIN")
          )
          (setvar "DIMZIN" 0)
          (repeat (setq n (sslength js))
            (setq dxf_ent (entget (setq ent (ssname js (setq n (1- n))))) dxf_210 (cdr (assoc 210 dxf_ent)) lst_pt nil lst_num nil)
            (setq
              vlaobj (vlax-ename->vla-object ent)
              pr -1
            )
            (if (not n_next)
              (progn
                (initget 1)
                (setq n_ini (getint "\nIncrementer en débutant à: ") n_next n_ini)
              )
              (progn
                (initget "Oui Non _Yes No")
                (if (eq (getkword "\nRéinitialiser l'incrémentation [Oui/Non] <Non>: ") "Yes")
                  (progn
                    (initget 1)
                    (setq n_ini (getint "\nIncrementer en débutant à: ") n_next n_ini)
                  )
                  (setq n_ini n_next)
                )
              )
            )
            (repeat (setq nb_e (if (zerop (vlax-get vlaobj 'Closed)) (1+ (fix (vlax-curve-getEndParam vlaobj))) (fix (vlax-curve-getEndParam vlaobj))))
              (setq
                pt (vlax-curve-GetPointAtParam vlaobj (setq pr (1+ pr)))
                lst_pt (cons pt lst_pt)
                lst_num (cons n_next lst_num)
              )
              (if (not scl_blk) (progn (initget 7) (setq scl_blk (getdist (trans pt 0 1) "\nEchelle du bloc?: "))))
              (setq n_next (+ 2 n_ini) n_ini n_next)
            )
            (setq nbs (1- (length lst_pt)))
            (foreach pto lst_pt
              (setq
                num (car lst_num)
                ang
                (if (and (not (zerop nbs)) (not (eq (1+ nbs) (length lst_pt))))
                  (-
                    (* 0.5
                      (+
                        (angle '(0.0 0.0 0.0) (vlax-curve-getFirstDeriv vlaobj (1- nbs)))
                        (angle '(0.0 0.0 0.0) (vlax-curve-getFirstDeriv vlaobj nbs))
                      )
                    )
                    (* 0.5 pi)
                  )
                  (+ (* 0.5 pi) (angle '(0.0 0.0 0.0) (vlax-curve-getFirstDeriv vlaobj nbs)))
                )
                ang
                (if (and (> ang (* 0.5 pi)) (<= ang (* pi 1.5))) (+ pi ang) ang)
                pos_att (mapcar '(lambda (x) (polar (trans '(0.0 0.0 0.0) dxf_210 0) (+ (angle (trans '(0.0 0.0 0.0) dxf_210 0) (trans x dxf_210 0)) ang) (distance (trans '(0.0 0.0 0.0) dxf_210 0) (trans x dxf_210 0)))) (mapcar '(lambda (y) (mapcar '(lambda (x) (* scl_blk x)) y)) lst_posatt))
                nbs (1- nbs)
              )
              (entmake
                (append
                  '(
                  (0 . "INSERT")
                  (100 . "AcDbEntity")
                  (67 . 0)
                  (410 . "Model")
                  (100 . "AcDbBlockReference")
                  (66 . 1)
                  (2 . "TCPOINT")
                )
                (list
                  (cons 41 scl_blk)
                  (cons 42 scl_blk)
                  (cons 43 scl_blk)
                )
                '(
                  (70 . 0)
                  (71 . 0)
                  (44 . 0.0)
                  (45 . 0.0)
                  )
                  (list (cons 50 ang) (cons 10 (trans pto 0 dxf_210)) (cons 210 dxf_210))
                )
              )
              (entmake
                (append
                  '(
                  (0 . "ATTRIB")
                  (100 . "AcDbEntity")
                  (67 . 0)
                  (410 . "Model")
                  (8 . "T_PT_MAT")
                  (100 . "AcDbText")
                  )
                  (list
                    (cons 50 ang)
                    (cons 10 (trans (list (+ (car pto) (caar pos_att)) (+ (cadr pto) (cadar pos_att)) (+ (caddr pto) (caddar pos_att))) 0 dxf_210))
                    (cons 1 (itoa num))
                    (cons 40 scl_blk)
                  )
                  '(
                  (41 . 1.0)
                  (51 . 0.0)
                  (7 . "STANDARD")
                  (71 . 0)
                  (72 . 0)
                  (11 0.0 0.0 0.0)
                  )
                  (list
                    (cons 210 dxf_210)
                  )
                  '(
                  (100 . "AcDbAttribute")
                  (2 . "MAT")
                  (70 . 0)
                  (73 . 0)
                  (74 . 0)
                  )
                )
              )
              (setq pos_att (cdr pos_att))
              (entmake
                (append
                  '(
                  (0 . "ATTRIB")
                  (100 . "AcDbEntity")
                  (67 . 0)
                  (410 . "Model")
                  (8 . "T_PT_ALT")
                  (100 . "AcDbText")
                  )
                  (list
                    (cons 50 ang)
                    (cons 10 (trans (list (+ (car pto) (caar pos_att)) (+ (cadr pto) (cadar pos_att)) (+ (caddr pto) (caddar pos_att))) 0 dxf_210))
                    (cons 1 (rtos (caddr pto) 2 2))
                    (cons 40 scl_blk)
                  )
                  '(
                  (41 . 1.0)
                  (51 . 0.0)
                  (7 . "STANDARD")
                  (71 . 0)
                  (72 . 0)
                  (11 0.0 0.0 0.0)
                  )
                  (list
                    (cons 210 dxf_210)
                  )
                  '(
                  (100 . "AcDbAttribute")
                  (2 . "ALT")
                  (70 . 0)
                  (73 . 0)
                  (74 . 0)
                  )
                )
              )
              (setq pos_att (cdr pos_att))
              (entmake
                (append
                  '(
                  (0 . "ATTRIB")
                  (100 . "AcDbEntity")
                  (67 . 0)
                  (410 . "Model")
                  (8 . "T_PT_COD")
                  (100 . "AcDbText")
                  )
                  (list
                    (cons 50 ang)
                    (cons 10 (trans (list (+ (car pto) (caar pos_att)) (+ (cadr pto) (cadar pos_att)) (+ (caddr pto) (caddar pos_att))) 0 dxf_210))
                    (cons 1 (strcat "\"" (cdr (assoc 5 dxf_ent)) "\""))
                    (cons 40 scl_blk)
                  )
                  '(
                  (41 . 1.0)
                  (51 . 0.0)
                  (7 . "STANDARD")
                  (71 . 0)
                  (72 . 0)
                  (11 0.0 0.0 0.0)
                  )
                  (list
                    (cons 210 dxf_210)
                  )
                  '(
                  (100 . "AcDbAttribute")
                  (2 . "COD")
                  (70 . 0)
                  (73 . 0)
                  (74 . 0)
                  )
                )
              )
              (entmake '((0 . "SEQEND") (62 . 256) (6 . "ByLayer") (370 . -2)))
              (setq lst_num (cdr lst_num))
            )
            (princ (strcat "\n" (itoa nb_e) " blocs \"TC_POINT\" placés et renseignés."))
          )
          (setvar "DIMZIN" old_dmz)
        )
        (T (princ "\nSélection non valide ou vide."))
      )
    )
  )
  (prin1)
)

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Parfait @bonuscad 👍 un grand merci.

 

J'ai modifié ton lsp pour coller plus à mes besoins, mais j'ai besoin de laisser les matricules horizontaux peut importe le SCU.

Je n'ai pas trouver qu'est ce qu'il faut modifier. 😢 (Je suis plus à l'aise avec le langage Basic )

(defun c:BORNES ( / js lst_posatt n nb_e ent dxf_ent dxf_210 lst_pt lst_num scl_blk vlaobj pr n_ini n_next old_dmz pt nbs num ang pos_att)
  (cond
    ((eq (getvar "cvport") 1)
      (princ "\n** Commande autorisée uniquement dans l'espace objet.")
    )
    (T
      (if (not (tblsearch "BLOCK" "BORNE"))
        (progn
          (entmake
            	'(
		(0 . "BLOCK") 
		(100 . "AcDbEntity") 
		(100 . "AcDbBlockBegin") 
		(2 . "BORNE") 
		(70 . 2) 
		(8 . "0") 
		(62 . 256) 
		(6 . "ByLayer") 
		(370 . -2) 
		(10 0.0 0.0 0.0)
		)
          )
          (entmake
		'(
		(0 . "CIRCLE")
		(100 . "AcDbCircle")
		(39 . 0)
		(10 0.0 0.0 0.0)
		(40 1)
		(210 0.0 0.0 1.0)
		)
          )
          (entmake
            '(
            (0 . "CIRCLE")
            (100 . "AcDbCircle")
            (39 . 0)
            (10 0.0 0.0 0.0)
            (40 1.1)
            (210 0.0 0.0 1.0)
            )
          )
          (entmake
            '(
            (0 . "CIRCLE")
            (100 . "AcDbCircle")
            (39 . 0)
            (10 0.0 0.0 0.0)
            (40 1.2)
            (210 0.0 0.0 1.0)
            )
          )
          (entmake
            '(
            (0 . "CIRCLE")
            (100 . "AcDbCircle")
            (39 . 0)
            (10 0.0 0.0 0.0)
            (40 1.3)
            (210 0.0 0.0 1.0)
            )
          )
          (entmake
            '(
            (0 . "CIRCLE")
            (100 . "AcDbCircle")
            (39 . 0)
            (10 0.0 0.0 0.0)
            (40 1.4)
            (210 0.0 0.0 1.0)
            )
          )
          (entmake
            '(
              (0 . "ATTDEF")
              (100 . "AcDbEntity")
              (67 . 0)
              (410 . "Model")
              (100 . "AcDbText")
              (10 0.25 0.25 0.0)
              (40 . 1)
              (1 . "")
              (50 . 0.0)
              (41 . 1.0)
              (51 . 0.0)
              (7 . "STANDARD")
              (71 . 0)
              (72 . 0)
              (11 0.0 0.0 0.0)
              (210 0.0 0.0 1.0)
              (100 . "AcDbAttributeDefinition")
              (280 . 0)
              (3 . "Matricule")
              (2 . "NUMEROS")
              (70 . 0)
              (73 . 0)
              (74 . 0)
              (280 . 1)
            )
          )
          (entmake 
		'(
		  (0 . "ENDBLK")
		  (100 . "AcDbBlockEnd")
		  (8 . "0")
		  (62 . 256)
		  (6 . "ByLayer")
		  (370 . -2)
		  )
          )
        )
      )
      (princ "\nSélectionner la ou les Polylignes où placer les matricules")
      (setq js (ssget '((0 . "*POLYLINE") (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>"))))
      (cond
        (js
          (setq
            lst_posatt '((0.25 0.25 0.0) (0.25 -0.75 0.0) (0.25 -1.75 0.0))
            old_dmz (getvar "DIMZIN")
          )
          (setvar "DIMZIN" 0)
          (repeat (setq n (sslength js))
            (setq dxf_ent (entget (setq ent (ssname js (setq n (1- n))))) dxf_210 (cdr (assoc 210 dxf_ent)) lst_pt nil lst_num nil)
            (setq
              vlaobj (vlax-ename->vla-object ent)
              pr -1
            )
            (if (not n_next)
              (progn
                (initget 1)
                (setq n_ini (getint "\nIncrementer en débutant à: ") n_next n_ini)
              )
              (progn
                (initget "Oui Non _Yes No")
                (if (eq (getkword "\nRéinitialiser l'incrémentation [Oui/Non] <Non>: ") "Yes")
                  (progn
                    (initget 1)
                    (setq n_ini (getint "\nIncrementer en débutant à: ") n_next n_ini)
                  )
                  (setq n_ini n_next)
                )
              )
            )
            (repeat (setq nb_e (if (zerop (vlax-get vlaobj 'Closed)) (1+ (fix (vlax-curve-getEndParam vlaobj))) (fix (vlax-curve-getEndParam vlaobj))))
              (setq
                pt (vlax-curve-GetPointAtParam vlaobj (setq pr (1+ pr)))
                lst_pt (cons pt lst_pt)
                lst_num (cons n_next lst_num)
              )
              (if (not scl_blk) (progn (initget 7) (setq scl_blk (getdist (trans pt 0 1) "\nEchelle du bloc?: "))))
              (setq n_next (+ 2 n_ini) n_ini n_next)
            )
            (setq nbs (1- (length lst_pt)))
            (foreach pto lst_pt
              (setq
                num (car lst_num)
                ang
                (if (and (not (zerop nbs)) (not (eq (1+ nbs) (length lst_pt))))
                  (-
                    (* 0.5
                      (+
                        (angle '(0.0 0.0 0.0) (vlax-curve-getFirstDeriv vlaobj (1- nbs)))
                        (angle '(0.0 0.0 0.0) (vlax-curve-getFirstDeriv vlaobj nbs))
                      )
                    )
                    (* 0.5 pi)
                  )
                  (+ (* 0.5 pi) (angle '(0.0 0.0 0.0) (vlax-curve-getFirstDeriv vlaobj nbs)))
                )
                ang
                (if (and (> ang (* 0.5 pi)) (<= ang (* pi 1.5))) (+ pi ang) ang)
                pos_att (mapcar '(lambda (x) (polar (trans '(0.0 0.0 0.0) dxf_210 0) (+ (angle (trans '(0.0 0.0 0.0) dxf_210 0) (trans x dxf_210 0)) ang) (distance (trans '(0.0 0.0 0.0) dxf_210 0) (trans x dxf_210 0)))) (mapcar '(lambda (y) (mapcar '(lambda (x) (* scl_blk x)) y)) lst_posatt))
                nbs (1- nbs)
              )
              (entmake
                (append
                  '(
                  (0 . "INSERT")
                  (100 . "AcDbEntity")
                  (67 . 0)
                  (410 . "Model")
                  (100 . "AcDbBlockReference")
                  (66 . 1)
                  (2 . "BORNE")
                )
                (list
                  (cons 41 scl_blk)
                  (cons 42 scl_blk)
                  (cons 43 scl_blk)
                )
                '(
                  (70 . 0)
                  (71 . 0)
                  (44 . 0.0)
                  (45 . 0.0)
                  )
                  (list (cons 50 ang) (cons 10 (trans pto 0 dxf_210)) (cons 210 dxf_210))
                )
              )
              (entmake
                (append
                  '(
                  (0 . "ATTRIB")
                  (100 . "AcDbEntity")
                  (67 . 0)
                  (410 . "Model")
                  (100 . "AcDbText")
                  )
                  (list
                    (cons 50 ang)
                    (cons 10 (trans (list (+ (car pto) (caar pos_att)) (+ (cadr pto) (cadar pos_att)) (+ (caddr pto) (caddar pos_att))) 0 dxf_210))
                    (cons 1 (itoa num))
                    (cons 40 scl_blk)
                  )
                  '(
                  (41 . 1.0)
                  (51 . 0.0)
                  (7 . "STANDARD")
                  (71 . 0)
                  (72 . 0)
                  (11 0.0 0.0 0.0)
                  )
                  (list
                    (cons 210 dxf_210)
                  )
                  '(
                  (100 . "AcDbAttribute")
                  (2 . "NUMEROS")
                  (70 . 0)
                  (73 . 0)
                  (74 . 0)
                  )
                )
              )
              (entmake 
		'(
		  (0 . "SEQEND")
		  (62 . 256)
		  (6 . "ByLayer")
		  (370 . -2)
		  )
		)
              (setq lst_num (cdr lst_num))
            )
            (princ (strcat "\n" (itoa nb_e) " blocs \"BORNE\" placés et renseignés."))
          )
          (setvar "DIMZIN" old_dmz)
        )
        (T (princ "\nSélection non valide ou vide."))
      )
    )
  )
  (prin1)
)

 

et aussi grosse question:

        pas possible d'incrémenter à partir de plus que 32767 ? 

 

merci d'avance.

 

 

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @Nicokarmann

Puisque vous êtes débutant, faisons simple en dix lignes de code.
En considérant que le bloc BORNE avec un attribut existe dans le dessin, ce simple code sera fonctionnel :

(defun c:bornes ( / coords ent inc num)
    (setq ent (car (entsel"\npolyligne\n")))
    (setq coords (mapcar 'cdr (vl-remove-if-not '(lambda(x)(= (car x) 10))(entget ent))))
    (setq inc 2
      num (getint "\nNuméro de départ : \n")
      )
    (foreach som coords
        (command "_insert" "borne" som "" "" "" (itoa num))
        (setq num (+ inc num))
        )
    )

Bien sûr, on peut l'améliorer, mais pour commencer c'est un bon exemple

pas possible d'incrémenter à partir de plus que 32767 ?   La question est sérieuse ?

PS: Quand le code est simple, OK pour le mettre dans le code du message, Quand il fait des pages… merci de le mettre en pièce jointe.
Ça évitera aux lecteurs d'avoir des pages et des pages à scroller.

Lien vers le commentaire
Partager sur d’autres sites

Il y a 1 heure, Nicokarmann a dit :

Parfait @bonuscad 👍 un grand merci.

J'ai modifié ton lsp pour coller plus à mes besoins, mais j'ai besoin de laisser les matricules horizontaux peut importe le SCU.

Je n'ai pas trouver qu'est ce qu'il faut modifier. 😢 (Je suis plus à l'aise avec le langage Basic )

et aussi grosse question:  pas possible d'incrémenter à partir de plus que 32767 ? 

merci d'avance.

J'ai forcé l'angle à 0.0 et les insertions dans le SCG dans les (entmake): (50 . 0.0) (210 0.0 0.0 1.0)

j'ai changé (getint), car les entier sont en effet limité en grandeur; en (getreal)

Nouvel version:

(defun c:BlockTC_POINTAtt2Vtx ( / js lst_posatt n nb_e ent dxf_ent dxf_210 lst_pt lst_num scl_blk vlaobj pr n_ini n_next old_dmz pt nbs num ang pos_att)
  (cond
    ((eq (getvar "cvport") 1)
      (princ "\n** Commande autorisée uniquement dans l'espace objet.")
    )
    (T
      (if (not (tblsearch "BLOCK" "TCPOINT"))
        (progn
          (entmake
            '((0 . "BLOCK") (100 . "AcDbEntity") (100 . "AcDbBlockBegin") (2 . "TCPOINT") (70 . 2) (8 . "0") (62 . 256) (6 . "ByLayer") (370 . -2) (10 0.0 0.0 0.0))
          )
          (entmake
            '(
            (0 . "POINT")
            (100 . "AcDbEntity")
            (67 . 0)
            (410 . "Model")
            (8 . "0")
            (62 . 0)
            (100 . "AcDbPoint")
            (10 0.0 0.0 0.0)
            (210 0.0 0.0 1.0)
            (50 . 0.0)
            )
          )
          (entmake
            '(
              (0 . "ATTDEF")
              (100 . "AcDbEntity")
              (67 . 0)
              (410 . "Model")
              (8 . "T_PT_MAT")
              (100 . "AcDbText")
              (10 0.25 0.25 0.0)
              (40 . 0.75)
              (1 . "")
              (50 . 0.0)
              (41 . 1.0)
              (51 . 0.0)
              (7 . "STANDARD")
              (71 . 0)
              (72 . 0)
              (11 0.0 0.0 0.0)
              (210 0.0 0.0 1.0)
              (100 . "AcDbAttributeDefinition")
              (280 . 0)
              (3 . "Matricule")
              (2 . "MAT")
              (70 . 0)
              (73 . 0)
              (74 . 0)
              (280 . 1)
            )
          )
          (entmake
            '(
              (0 . "ATTDEF")
              (100 . "AcDbEntity")
              (67 . 0)
              (410 . "Model")
              (8 . "T_PT_ALT")
              (100 . "AcDbText")
              (10 0.25 -0.75 0.0)
              (40 . 0.75)
              (1 . "")
              (50 . 0.0)
              (41 . 1.0)
              (51 . 0.0)
              (7 . "STANDARD")
              (71 . 0)
              (72 . 0)
              (11 0.0 0.0 0.0)
              (210 0.0 0.0 1.0)
              (100 . "AcDbAttributeDefinition")
              (280 . 0)
              (3 . "Altitude")
              (2 . "ALT")
              (70 . 0)
              (73 . 0)
              (74 . 0)
              (280 . 1)
            )
          )
          (entmake
            '(
              (0 . "ATTDEF")
              (100 . "AcDbEntity")
              (67 . 0)
              (410 . "Model")
              (8 . "T_PT_COD")
              (100 . "AcDbText")
              (10 -0.25 -1.75 0.0)
              (40 . 0.75)
              (1 . "code")
              (50 . 0.0)
              (41 . 1.0)
              (51 . 0.0)
              (7 . "STANDARD")
              (71 . 0)
              (72 . 0)
              (11 0.0 0.0 0.0)
              (210 0.0 0.0 1.0)
              (100 . "AcDbAttributeDefinition")
              (280 . 0)
              (3 . "CodeSymbole")
              (2 . "COD")
              (70 . 0)
              (73 . 0)
              (74 . 0)
              (280 . 1)
            )
          )
          (entmake '((0 . "ENDBLK") (100 . "AcDbBlockEnd") (8 . "0") (62 . 256) (6 . "ByLayer") (370 . -2)))
        )
      )
      (princ "\nSélectionner les Polylignes où placer à leurs sommets le bloc \"TC_POINT\" avec attributs")
      (setq js (ssget '((0 . "*POLYLINE") (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>"))))
      (cond
        (js
          (setq
            lst_posatt '((0.25 0.25 0.0) (0.25 -0.75 0.0) (0.25 -1.75 0.0))
            old_dmz (getvar "DIMZIN")
          )
          (setvar "DIMZIN" 0)
          (repeat (setq n (sslength js))
            (setq dxf_ent (entget (setq ent (ssname js (setq n (1- n))))) dxf_210 '(0.0 0.0 1.0) lst_pt nil lst_num nil)
            (setq
              vlaobj (vlax-ename->vla-object ent)
              pr -1
            )
            (if (not n_next)
              (progn
                (initget 5)
                (setq n_ini (getreal "\nIncrementer en débutant à: ") n_next n_ini)
              )
              (progn
                (initget "Oui Non _Yes No")
                (if (eq (getkword "\nRéinitialiser l'incrémentation [Oui/Non] <Non>: ") "Yes")
                  (progn
                    (initget 5)
                    (setq n_ini (getreal "\nIncrementer en débutant à: ") n_next n_ini)
                  )
                  (setq n_ini n_next)
                )
              )
            )
            (repeat (setq nb_e (if (zerop (vlax-get vlaobj 'Closed)) (1+ (fix (vlax-curve-getEndParam vlaobj))) (fix (vlax-curve-getEndParam vlaobj))))
              (setq
                pt (vlax-curve-GetPointAtParam vlaobj (setq pr (1+ pr)))
                lst_pt (cons pt lst_pt)
                lst_num (cons n_next lst_num)
              )
              (if (not scl_blk) (progn (initget 7) (setq scl_blk (getdist (trans pt 0 1) "\nEchelle du bloc?: "))))
              (setq n_next (+ 2.0 n_ini) n_ini n_next)
            )
            (setq nbs (1- (length lst_pt)))
            (foreach pto lst_pt
              (setq
                num (car lst_num)
                ang 0.0
                pos_att (mapcar '(lambda (x) (polar (trans '(0.0 0.0 0.0) dxf_210 0) (+ (angle (trans '(0.0 0.0 0.0) dxf_210 0) (trans x dxf_210 0)) ang) (distance (trans '(0.0 0.0 0.0) dxf_210 0) (trans x dxf_210 0)))) (mapcar '(lambda (y) (mapcar '(lambda (x) (* scl_blk x)) y)) lst_posatt))
                nbs (1- nbs)
              )
              (entmake
                (append
                  '(
                  (0 . "INSERT")
                  (100 . "AcDbEntity")
                  (67 . 0)
                  (410 . "Model")
                  (100 . "AcDbBlockReference")
                  (66 . 1)
                  (2 . "TCPOINT")
                )
                (list
                  (cons 41 scl_blk)
                  (cons 42 scl_blk)
                  (cons 43 scl_blk)
                )
                '(
                  (70 . 0)
                  (71 . 0)
                  (44 . 0.0)
                  (45 . 0.0)
                  (50 . 0.0)
                  )
                  (list (cons 10 pto) (cons 210 '(0.0 0.0 1.0)))
                )
              )
              (entmake
                (append
                  '(
                  (0 . "ATTRIB")
                  (100 . "AcDbEntity")
                  (67 . 0)
                  (410 . "Model")
                  (8 . "T_PT_MAT")
                  (100 . "AcDbText")
                  (50 . 0.0)
                  )
                  (list
                    (cons 10 (trans (list (+ (car pto) (caar pos_att)) (+ (cadr pto) (cadar pos_att)) (+ (caddr pto) (caddar pos_att))) 0 dxf_210))
                    (cons 1 (rtos num 2 0))
                    (cons 40 scl_blk)
                  )
                  '(
                  (41 . 1.0)
                  (51 . 0.0)
                  (7 . "STANDARD")
                  (71 . 0)
                  (72 . 0)
                  (11 0.0 0.0 0.0)
                  )
                  (list
                    (cons 210 dxf_210)
                  )
                  '(
                  (100 . "AcDbAttribute")
                  (2 . "MAT")
                  (70 . 0)
                  (73 . 0)
                  (74 . 0)
                  )
                )
              )
              (setq pos_att (cdr pos_att))
              (entmake
                (append
                  '(
                  (0 . "ATTRIB")
                  (100 . "AcDbEntity")
                  (67 . 0)
                  (410 . "Model")
                  (8 . "T_PT_ALT")
                  (100 . "AcDbText")
                  (50 . 0.0)
                  )
                  (list
                    (cons 10 (trans (list (+ (car pto) (caar pos_att)) (+ (cadr pto) (cadar pos_att)) (+ (caddr pto) (caddar pos_att))) 0 dxf_210))
                    (cons 1 (rtos (caddr pto) 2 2))
                    (cons 40 scl_blk)
                  )
                  '(
                  (41 . 1.0)
                  (51 . 0.0)
                  (7 . "STANDARD")
                  (71 . 0)
                  (72 . 0)
                  (11 0.0 0.0 0.0)
                  )
                  (list
                    (cons 210 dxf_210)
                  )
                  '(
                  (100 . "AcDbAttribute")
                  (2 . "ALT")
                  (70 . 0)
                  (73 . 0)
                  (74 . 0)
                  )
                )
              )
              (setq pos_att (cdr pos_att))
              (entmake
                (append
                  '(
                  (0 . "ATTRIB")
                  (100 . "AcDbEntity")
                  (67 . 0)
                  (410 . "Model")
                  (8 . "T_PT_COD")
                  (100 . "AcDbText")
                  (50 . 0.0)
                  )
                  (list
                    (cons 10 (trans (list (+ (car pto) (caar pos_att)) (+ (cadr pto) (cadar pos_att)) (+ (caddr pto) (caddar pos_att))) 0 dxf_210))
                    (cons 1 (strcat "\"" (cdr (assoc 5 dxf_ent)) "\""))
                    (cons 40 scl_blk)
                  )
                  '(
                  (41 . 1.0)
                  (51 . 0.0)
                  (7 . "STANDARD")
                  (71 . 0)
                  (72 . 0)
                  (11 0.0 0.0 0.0)
                  )
                  (list
                    (cons 210 dxf_210)
                  )
                  '(
                  (100 . "AcDbAttribute")
                  (2 . "COD")
                  (70 . 0)
                  (73 . 0)
                  (74 . 0)
                  )
                )
              )
              (entmake '((0 . "SEQEND") (62 . 256) (6 . "ByLayer") (370 . -2)))
              (setq lst_num (cdr lst_num))
            )
            (princ (strcat "\n" (itoa nb_e) " blocs \"TC_POINT\" placés et renseignés."))
          )
          (setvar "DIMZIN" old_dmz)
        )
        (T (princ "\nSélection non valide ou vide."))
      )
    )
  )
  (prin1)
)

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Il y a 5 heures, didier a dit :

PS: Quand le code est simple, OK pour le mettre dans le code du message, Quand il fait des pages… merci de le mettre en pièce jointe.
Ça évitera aux lecteurs d'avoir des pages et des pages à scroller.

@didier

Je suis d'accord avec toi que c'est pénible à lire.

Mais si je fais comme cela, et que cela permet à ceux qui ne ne sont pas inscrits d'avoir accès au code.

Mon but étant le partage, et que n'importe qui peut s'approprier le code et s'en inspirer pour l'améliorer pour répondre à son besoin.

Je considère que je ne suis pas un gourou et que je peut faire des erreurs et que des personne puisse les corriger.

Merci de m'excuser!

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Pour garder le TEXTE ou/et le BLOC HORIZONTAL, on peut activer l'option pour les STYLES DE TEXTE et les BLOCS

   Faire correspondre l'orientation à la fenêtre...

Cette option permet de garder l'affichage des TEXTES et BLOCS horizontal dans les fenêtres de présentation.

Christian

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Lien vers le commentaire
Partager sur d’autres sites

Le 13/09/2024 à 14:07, didier a dit :

Bonjour @Nicokarmann

Avez-vous testé mon code tout simple idéal pour les apprenants ?

 

oui, je l'ai tester et il ne fonctionne pas

 

Le 14/09/2024 à 11:53, rebcao a dit :

Bonjour,

Pour garder le TEXTE ou/et le BLOC HORIZONTAL, on peut activer l'option pour les STYLES DE TEXTE et les BLOCS

   Faire correspondre l'orientation à la fenêtre...

Cette option permet de garder l'affichage des TEXTES et BLOCS horizontal dans les fenêtres de présentation.

Christian

Merci, je vais y regarder. 

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @Nicokarmann

oui, je l'ai testé et il ne fonctionne pas

Je suis surpris, que vous est-il dit comme message d'erreur ?

NB : le bloc BORNE avec un attribut doit exister dans le dessin avant le lancement, c'est du simplissime.

 

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é