Communauté
AutoCAD – tous produits - Français
Bienvenue sur les forums AutoCAD d’Autodesk. Partagez vos connaissances, posez des questions, et explorez les sujets AutoCAD populaires.
annuler
Affichage des résultats de 
Afficher  uniquement  | Rechercher plutôt 
Vouliez-vous dire : 

Recherche commande-LISP numérotation sommets polyligne

10 RÉPONSES 10
RÉSOLU
Répondre
Message 1 sur 11
romainbrugniaud
787 Visites, 10 Réponses

Recherche commande-LISP numérotation sommets polyligne

Bonjour à toute la communauté, je viens faire appel à vos lumières après avoir été déjà très bien aidé par vos connaissances.

 

Je suis à la recherche d'un LISP qui aurait la même utilité qu'une partie de la commande "Tableau périmétrique" sous Covadis 2D > Cotation / Division.

Mon but est qu'en sélectionnant une polyligne, cela créé un bloc (comme avec la fonction D023) aux sommets de la polyligne avec une numérotation en lettres.

Le caractère Lettre étant un attribut dans le bloc D023, il a fallu que je modifie directement le DWG du bloc pour que le style/taille/couleur de l'attribut correspond à ce que je voulais sinon à chaque redémarrage d'Autocad tout revenais par défaut.

Cette commande "Tableau périmétrique" à des contraintes que je souhaiterais éviter via un LISP.

- Il n'est possible de sélectionner qu'une seule polyligne et devons cliquer pour l'emplacement du tableau.

Après avoir interrogé le support, cette fonction de numérotation de sommet n'est pas disponible autrement par défaut.

Je n'y connait rien du tout en programmation et LISP mais je fais confiance en vos connaissance pour avoir éventuellement une idée ou une solution.

 

Merci.

Étiquettes (4)
10 RÉPONSES 10
Message 2 sur 11

Bonjour,

Tu peux essayer ceci

(vl-load-com)
(defun inc_txt (Txt / Boucle Val_Txt Ascii_Txt Decalage)
  (setq
    Boucle 1
    Val_txt ""
  )
  (while (<= Boucle (strlen Txt))
    (setq Ascii_Txt (vl-string-elt Txt (- (strlen Txt) Boucle)))
    (if (not Decalage)
      (setq Ascii_Txt (1+ Ascii_Txt))
    )
    (if (or (= Ascii_Txt 58) (= Ascii_Txt 91) (= Ascii_Txt 123))
      (setq
        Ascii_Txt
        (cond
          ((= Ascii_Txt 58) 48)
          ((= Ascii_Txt 91) 65)
          ((= Ascii_Txt 123) 97)
        )
        Decalage nil
      )
      (setq Decalage T)
    )
    (setq Val_Txt (strcat (chr Ascii_Txt) Val_Txt))
    (setq Boucle (1+ Boucle))
  )
  (if (not Decalage)
    (setq Val_Txt
      (strcat
        (cond
          ((< Ascii_Txt 58) "0")
          ((< Ascii_Txt 91) "A")
          ((< Ascii_Txt 123) "a")
        )
        Val_Txt
      )
    )
  )
  Val_Txt
)
(defun c:num-vertex_pl2Table ( / js sv_zp n_ini htx AcDoc Space lst_id-seg lst_pt lst_d lst_a n ename obj pr norm nw_obj nb nb_dec inc ins_pt_cell w_c ename_cell n_row n_column)
  (princ "\nSélectionner des polylines.")
  (while
    (null
      (setq js
        (ssget
          '(
            (0 . "*POLYLINE")
            (-4 . "<NOT")
              (-4 . "&") (70 . 112)
            (-4 . "NOT>")
          )
        )
      )
    )
    (princ "\nSélection vide, ou ce ne sont pas des POLYLIGNES!")
  )
  (setq sv_zp (getvar "dimzin"))
  (setvar "dimzin" 4)
  (if (not n_next)
    (setq n_ini (getstring "\nIncrementer en débutant à [chiffre/lettre/alphanumérique]: ") n_next n_ini)
    (setq n_ini n_next)
  )
  (initget 6)
  (setq htx (getdist (getvar "VIEWCTR") (strcat "\nHauteur du texte? <" (rtos (getvar "TEXTSIZE")) ">: ")))
  (if (null htx) (setq htx (getvar "TEXTSIZE")) (setvar "TEXTSIZE" htx))
  (initget 6)
  (setq
    AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))
    Space
    (if (= 1 (getvar "CVPORT"))
      (vla-get-PaperSpace AcDoc)
      (vla-get-ModelSpace AcDoc)
    )
    lst_id-seg '()
    lst_pt '()
    lst_d '()
    lst_a '()
  )
  (cond
    ((null (tblsearch "LAYER" "Numérotation sommets"))
      (vlax-put (vla-add (vla-get-layers AcDoc) "Numérotation sommets") 'color 4)
    )
  )
  (repeat (setq n (sslength js))
    (setq
      ename (ssname js (setq n (1- n)))
      obj (vlax-ename->vla-object ename)
      pr -1
      norm (if (vlax-property-available-p obj 'Normal) (vlax-get obj 'Normal) '(0.0 0.0 1.0))
    )
    (repeat (if (zerop (vlax-get obj 'Closed)) (1+ (fix (vlax-curve-getEndParam obj))) (fix (vlax-curve-getEndParam obj)))
      (setq nw_obj
        (vla-addMtext Space
          (vlax-3d-point (setq pt (polar (vlax-curve-GetPointAtParam obj (setq pr (1+ pr))) (* pi 0.5) (getvar "TEXTSIZE"))))
          0.0
          (strcat "{\\fArial;" n_next "}")
        )
        lst_id-seg (cons n_next lst_id-seg)
        lst_pt (cons (vlax-curve-GetPointAtParam obj pr) lst_pt)
        lst_d
        (cons
          (distance
            (vlax-curve-GetPointAtParam obj pr)
            (if (vlax-curve-GetPointAtParam obj (1+ pr))
              (vlax-curve-GetPointAtParam obj (1+ pr))
              (vlax-curve-GetPointAtParam obj 0)
            )
          )
          lst_d
        )
        lst_a
        (cons
          (angle
            (vlax-curve-GetPointAtParam obj pr)
            (if (vlax-curve-GetPointAtParam obj (1+ pr))
              (vlax-curve-GetPointAtParam obj (1+ pr))
              (vlax-curve-GetPointAtParam obj 0)
            )
          )
          lst_a
        )
      )
      (mapcar
        '(lambda (pr val)
          (vlax-put nw_obj pr val)
        )
        (list 'AttachmentPoint 'Height 'DrawingDirection 'InsertionPoint 'Layer 'Rotation 'Normal)
        (list 8 (getvar "TEXTSIZE") 5 pt "Numérotation sommets" (atan (/ (cadr (getvar "UCSXDIR")) (car (getvar "UCSXDIR")))) norm)
      )
      (cond
        ((eq (type (read n_ini)) 'INT)
          (setq n_next (itoa (1+ (atoi n_ini))))
        )
        ((eq (type (read n_ini)) 'REAL)
          (setq nb 0)
          (repeat (strlen n_ini)
            (if (eq (substr n_ini (setq nb (1+ nb)) 1) ".")
              (setq nb_dec (1- (strlen (substr n_ini nb))))
            )
          )
          (setq inc 1.0)
          (repeat nb_dec (setq inc (/ inc 10)))
          (setq n_next (rtos (+ inc (atof n_ini)) 2 nb_dec))
        )
        ((eq (type n_ini) 'STR)
          (setq n_next (inc_txt n_ini))
        )
      )
      (setq n_ini n_next)
    )
  )
  (initget 9)
  (setq ins_pt_cell (getpoint "\nTable top left insertion point: "))
  (setq ename_cell (vla-addTable Space (vlax-3d-point ins_pt_cell) (+ 2 (length lst_id-seg)) 6 (+ htx (* htx 0.25)) (* htx 15.0)))
  (vla-put-RegenerateTableSuppressed ename_cell :vlax-true)
  (vla-put-TitleSuppressed ename_cell :vlax-false)
  (vla-put-HeaderSuppressed ename_cell :vlax-false)
  (setq n_row (1+ (length lst_id-seg)) n_column -1)
  (vla-SetCellValue ename_cell 0 0 (vlax-make-variant "TABLEAU DES COORDONNEES DU PERIMETRE" 8))
  (vla-SetCellTextStyle ename_cell 0 0 "Standard")
  (vla-SetCellTextHeight ename_cell 0 0 (vlax-make-variant htx 5))
  (vla-SetCellAlignment ename_cell 0 0 5)
  (foreach n
    (reverse
      (mapcar'list
        (reverse (append lst_id-seg '("SOMMET")))
        (reverse (append (mapcar 'rtos (mapcar 'car lst_pt)) '("X")))
        (reverse (append (mapcar 'rtos (mapcar 'cadr lst_pt)) '("Y")))
        (reverse (append (mapcar 'rtos lst_d) '("DISTANCE")))
        (reverse (append (mapcar 'angtos lst_a) '("ANGLE")))
        (reverse (append lst_id-seg '("SOMMET")))
      )
    )
    (mapcar
      '(lambda (el)
        (vla-SetCellValue ename_cell n_row (setq n_column (1+ n_column)) (vlax-make-variant el 8))
        (vla-SetCellTextStyle ename_cell n_row n_column "Standard")
        (vla-SetCellTextHeight ename_cell n_row n_column (vlax-make-variant htx 5))
        (if (eq n_row 1)
          (vla-SetCellAlignment ename_cell n_row n_column 5)
          (vla-SetCellAlignment ename_cell n_row n_column 6)
        )
      )
      n
    )
    (setq n_row (1- n_row) n_column -1)
  )
  (vlax-put (vlax-ename->vla-object (entlast)) 'Color 7)
  (vlax-put (vlax-ename->vla-object (entlast)) 'Layer "Numérotation sommets")
  (vla-put-RegenerateTableSuppressed ename_cell :vlax-false)
  (setvar "dimzin" sv_zp)
  (prin1)
)
Message 3 sur 11

Merci @CADaSchtroumpf pour ta réponse.

Peux-tu m'indiquer le fonctionnement, marche à suivre pour utiliser la fonction / commande ?

J'ai en mémoire d'avoir rentré les lignes de code sur un bloc-note au format lsp, mais plus trop de souvenir sur l'endroit où mettre/remplacer le fichier.

 

Merci.

Message 4 sur 11
Y.AUBRY
en réponse à: romainbrugniaud

Bonjour @romainbrugniaud,

 

Ci-joint le fichier lisp compilé. La commande associée est "num-vertex_pl2Table".

 

Je te conseille te faire un dossier nommé "LISP" sur ton disque ou tu déposeras ce fichier (et surement d'autres par la suite.)

 

Une fois ce dossier créé, il faut l'ajouter dans les chemins de recherche de fichiers de support via le menu "Outil\Options" onglet "Fichier" puis dans "Chemin de recherche de fichiers de support de travail" cliquer sur "Ajouter..." puis "Parcourir..." et pointer sur le dossier "LISP" que tu viens de faire. (1)

 

Ensuite même opération dans la partie "Emplacements approuvés" (2)

YAUBRY_0-1669364133397.png

 

Une fois terminé, valide et va dans le menu "Outils\Charger une application..." sélectionne ton fichier .lsp puis appuie sur le bouton "Charger" pour le charger dans le fichier actuellement ouvert et si tu veux l'avoir accessible pour tous les fichiers fait un glisser-déposer du fichier lisp vers la valise "Au démarrage"

 

YAUBRY_1-1669364266305.png

 

A+ Yoan

Yoan AUBRY

EESignature

Message 5 sur 11
romainbrugniaud
en réponse à: Y.AUBRY

Merci beaucoup pour vos retour, ceci est un excellent début, le principe est la dans ce que je cherche.

Mon idée est de ne pas du tout avoir de tableau la ou la seule chose qui m’intéresse est la numérotation de sommets de polylignes, par Lettre ou chiffre.

 

- Je souhaiterais qu'à chaque sélection/utilisation de la commande cela me propose le départ de la numérotation comme lors de la 1ere utilisation de la commande au lieu de continuer sans pouvoir modifier cela.

Je suis principalement sur des plans de lots de lotissement et je pars de A-B-C-D-E..., A-B-C-D-E... pour chaque lot.

 

- Pensez-vous que cela soit compliqué d'avoir la même partie que la commande "tableau périmétrique" (s'il est possible de reprendre cette partie de la commande) où l'on peut définir ou choisir un bloc (comme le D023 sur la commande) aux sommets avec un attribut pour la numérotation plutôt qu'un simple texte ?

s1.jpg

t2.jpg

t3.jpg

L'idée serait de pouvoir partir de se bloc existant avec l'attribut (déjà créé dans le dossier d'Autocad) si cela est plus facile.

 

Merci.

Message 6 sur 11

Il aurait était bien que tu fournisse ton bloc.

Comme cela n'a pas été fait, je l'ai construit dans le lisp... Je ne sais pas s'il correspond au tiens en terme d'échelle.

Donc le mieux et d'essayer le code dans un nouveau dessin (là où le bloc n'existe pas!) pour voir si le fonctionnement te parait correct.

(vl-load-com)
(defun inc_txt (Txt / Boucle Decalage Val_Txt Ascii_Txt)
  (setq Boucle 1 Val_txt "")
  (while (<= Boucle (strlen Txt))
    (setq Ascii_Txt (vl-string-elt Txt (- (strlen Txt) Boucle)))
    (if (not Decalage)
      (setq Ascii_Txt (1+ Ascii_Txt))
    )
    (if (or (= Ascii_Txt 58) (= Ascii_Txt 91) (= Ascii_Txt 123))
      (setq
        Ascii_Txt
        (cond
          ((= Ascii_Txt 58) 48)
          ((= Ascii_Txt 91) 65)
          ((= Ascii_Txt 123) 97)
        )
        Decalage nil
      )
      (setq Decalage T)
    )
    (setq Val_Txt (strcat (chr Ascii_Txt) Val_Txt))
    (setq Boucle (1+ Boucle))
  )
  (if (not Decalage)
    (setq Val_Txt
      (strcat
        (cond
          ((< Ascii_Txt 58) "0")
          ((< Ascii_Txt 91) "A")
          ((< Ascii_Txt 123) "a")
        )
        Val_Txt
      )
    )
  )
  Val_Txt
)
(defun c:BlockAtt2Vtx ( / js lst_posatt n ent dxf_ent dxf_210 lst_pt lst_num scl_blk vlaobj pr n_ini n_next pt nb nb_dec inc x y z d num nbs ang pos_att)
  (cond
    ((eq (getvar "cvport") 1)
      (princ "\n** Commande autorisée uniquement dans l'espace objet.")
    )
    (T
      (vla-startundomark (vla-get-ActiveDocument (vlax-get-acad-object)))
      (if (not (tblsearch "STYLE" "Arial"))
        (entmake
          '(
          (0 . "STYLE")
          (5 . "40")
          (100 . "AcDbSymbolTableRecord")
          (100 . "AcDbTextStyleTableRecord")
          (2 . "Arial")
          (70 . 0)
          (40 . 0.0)
          (41 . 1.0)
          (50 . 0.0)
          (71 . 0)
          (42 . 2.5)
          (3 . "arial.ttf")
          (4 . "")
          )
        )
      )
      (if (not (tblsearch "BLOCK" "D023"))
        (progn
          (entmake
            '((0 . "BLOCK") (2 . "D023") (70 . 2) (8 . "0") (62 . 256) (6 . "ByLayer") (370 . -2) (10 0.0 0.0 0.0))
          )
          (entmake
            '(
              (0 . "LWPOLYLINE")
              (100 . "AcDbEntity")
              (67 . 0)
              (410 . "Model")
              (8 . "0")
              (62 . 0)
              (6 . "ByBlock")
              (370 . -2)
              (100 . "AcDbPolyline")
              (90 . 2)
              (70 . 0)
              (38 . 0.0)
              (39 . 0.0)
              (10 0.0 0.0)
              (40 . 0.0)
              (41 . 1.0)
              (42 . 0.0)
              (91 . 0)
              (10 5.0 0.0)
              (40 . 0.0)
              (41 . 0.0)
              (42 . 0.0)
              (91 . 0)
              (210 0.0 0.0 1.0)
            )
          )
          (entmake
            '(
              (0 . "CIRCLE")
              (100 . "AcDbEntity")
              (67 . 0)
              (410 . "Model")
              (8 . "0")
              (62 . 0)
              (6 . "ByBlock")
              (370 . -2)
              (100 . "AcDbCircle")
              (10 7.44949 -1.42109e-14 0.0)
              (40 . 2.5)
              (210 0.0 0.0 1.0)
            )
          )
          (entmake
            '(
              (0 . "ATTDEF")
              (100 . "AcDbEntity")
              (67 . 0)
              (410 . "Model")
              (8 . "0")
              (62 . 0)
              (6 . "ByBlock")
              (370 . -2)
              (100 . "AcDbText")
              (10 4.46688 -1.25 0.0)
              (40 . 2.5)
              (1 . "A")
              (50 . 0.0)
              (41 . 0.75)
              (51 . 0.0)
              (7 . "Arial")
              (71 . 0)
              (72 . 1)
              (11 7.44949 -1.42109e-14 0.0)
              (210 0.0 0.0 1.0)
              (100 . "AcDbAttributeDefinition")
              (280 . 0)
              (3 . "Identification du sommet")
              (2 . "NUM")
              (70 . 0)
              (73 . 0)
              (74 . 2)
              (280 . 1)
            )
          )
          (entmake '((0 . "ENDBLK") (8 . "0") (62 . 256) (6 . "ByLayer") (370 . -2)))
        )
      )
      (if (not (tblsearch "LAYER" "Numérotation Sommets"))
        (entmake
          '(
            (0 . "LAYER")
            (100 . "AcDbSymbolTableRecord")
            (100 . "AcDbLayerTableRecord")
            (2 . "Numérotation Sommets")
            (70 . 0)
            (62 . 4)
            (370 . -3)
            (6 . "Continuous")
          )
        )
      )
      (princ "\nSélectionner les Polylignes où placer un bloc avec attributs")
      (setq js (ssget '((0 . "*POLYLINE") (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>"))))
      (cond
        (js
          (setq lst_posatt '((7.44948974 0.0 0.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_dist nil
              lst_num nil
              vlaobj (vlax-ename->vla-object ent)
              pr -1
            )
            (if (not n_next)
              (setq
                n_ini (getstring "\nIncrementer en débutant à [chiffre/lettre/alphanumérique]? <A>: ")
                n_next (if (eq n_ini "") "A" n_ini)
              )
              (progn
                (initget "Oui Non _Yes No")
                (if (eq (getkword "\nRéinitialiser l'incrémentation [Oui/Non] <Oui>: ") "No")
                  (setq n_ini n_next)
                  (setq
                    n_ini (getstring "\nIncrementer en débutant à [chiffre/lettre/alphanumérique]? <A>: ")
                    n_next (if (eq n_ini "") "A" n_ini)
                  )
                )
              )
            )
            (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_ini n_next)
              (cond
                ((eq (type (read n_ini)) 'INT)
                  (setq n_next (itoa (1+ (atoi n_ini))))
                )
                ((eq (type (read n_ini)) 'REAL)
                  (setq nb 0)
                  (repeat (strlen n_ini)
                    (if (eq (substr n_ini (setq nb (1+ nb)) 1) ".")
                      (setq nb_dec (1- (strlen (substr n_ini nb))))
                    )
                  )
                  (setq inc 1.0)
                  (repeat nb_dec (setq inc (/ inc 10)))
                  (setq n_next (rtos (+ inc (atof n_ini)) 2 nb_dec))
                )
                ((eq (type n_ini) 'STR)
                  (setq n_next (inc_txt n_ini))
                )
              )
            )
            (setq nbs (1- (length lst_pt)))
            (foreach pto lst_pt
              (setq
                x (car pto)
                y (cadr pto)
                z (caddr pto)
                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")
                    (8 . "Numérotation Sommets")
                    (66 . 1)
                    (2 . "D023")
                  )
                  (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 num)
                    (cons 40 (* 2.5 scl_blk))
                  )
                  '(
                    (41 . 1.0)
                    (51 . 0.0)
                    (7 . "Arial")
                    (71 . 0)
                    (72 . 1)
                  )
                  (list
                    (cons 11 (trans (list (+ (car pto) (caar pos_att)) (+ (cadr pto) (cadar pos_att)) (+ (caddr pto) (caddar pos_att))) 0 dxf_210))
                    (cons 210 dxf_210)
                  )
                  '(
                    (100 . "AcDbAttribute")
                    (2 . "NUM")
                    (70 . 0)
                    (73 . 0)
                    (74 . 2)
                  )
                )
              )
              (entmake '((0 . "SEQEND") (62 . 256) (6 . "ByLayer") (370 . -2)))
              (setq lst_dist (cdr lst_dist) lst_num (cdr lst_num))
            )
            (princ (strcat "\n" (itoa nb_e) " blocs \"D023\" placés et renseignés."))
          )
        )
        (T (princ "\nSélection non valide ou vide."))
      )
      (vla-endundomark (vla-get-ActiveDocument (vlax-get-acad-object)))
    )
  )
  (prin1)
)

 

Message 7 sur 11

@CADaSchtroumpfMerci pour ton retour cela à l'air très impressionnant cependant je n'arrive pas à utiliser la commande en écrivant "BlockAtt2Vtx" comme indiqué dans le code ou en renommant "ns" pour moi que cela soit plus simple et court.

Autocad m'indique commande inconnue, peu importe l'espace objet/papier (travaillant sur les 2).

Je vois qu'il y à la mention dxf dans le code, cela peut-il venir de la utilisant des DWG ?

Si cela peu être fort utile je joins le bloc bien entendu.

 

Merci,

Message 8 sur 11
-didier-
en réponse à: romainbrugniaud

Bonjour @romainbrugniaud 

 

Surprenant !

Rappel :

  1. Ouvrir un fichier texte vide, coller le contenu du message et enregistrer le fichier avec l'extension LSP
  2. Charger le LSP dans AutoCAD
  3. Lancer le nom de commande BlockAtt2Vtx en l'occurrence.

Est-ce ainsi que tu fais ?

Amicalement

Éternel débutant.. my site for learning : Programmer dans AutoCAD

Didier Aveline

EESignature

Message 9 sur 11
romainbrugniaud
en réponse à: -didier-

Merci beaucoup @-didier- J'avais oublié l'étape de charger le fichier.

 

@CADaSchtroumpfC'est du beau boulot, je suis impressionné.

Cela fonctionne mieux si le bloc n'est pas déjà chargé dans un dessin; Comme tous les éléments se créés dans un calque "Numérotation Sommets" C'est pratique. Si le bloc est déjà inséré dans le dessin, comme les éléments sont dans un autre calque il y a des interférences. au besoin je le met en pièce jointe.

1 - Il y a t-il moyen de faire en sorte que cela ne fonctionne pas uniquement sur l'espace objet car je travail beaucoup sur l'espace papier des présentation également ? J'ai vu quelque chose dans les lignes de code mais n'ose rien supprimer.

2 - Il y a t-il un moyen que le bloc soit uniquement chargé sans avoir une création/changement d'élément de calque ?

Je peux également modifier le bloc de base en mettant tout les éléments dans un calque "Numérotation Sommets".

3 - Si cela n'est pas possible, il y a t-il moyen que le calque créé "Numérotation Sommets" soit par défaut noir/blanc au lieu de Cyan et l'attribut forcé en bleu ?

4 - Il y a t-il moyen de faire en sorte que même en effectuant une rotation des blocs, celui de l'attribut reste bloqué à 100g/90° afin que le texte soit toujours aligné horizontalement ?

Une fois le placement et rotation des blocs effectués, au besoin je peux changer la couleur de l'attribut ainsi que la rotation rapidement en une seule fois via CovEdition/Attributs.

 

5 - J'ai une interrogation sur un élément qui je pense ne sera pas possible, concernant le sens de numérotation. Par défaut cela prend toujours le numéro des sommets de la polyligne suivant l'ordre dans laquelle elle a été dessinée. Afin de ne pas avoir a changer manuellement les attributs, Il y a t-il un moyen de pouvoir sélectionner le point de départ ainsi qu'un 2eme pour effectuer le sens ?

 

 

 

Message 10 sur 11

Je me suis basé sur ton bloc D203 pour le créer dans le dessin s'il n'existe pas déjà.

J'ai juste changé ses propriétés pour que les entités le constituant soient "DuBloc" et non "DuCalque" sauf pour l'attribut qui reste en couleur forcée (Bleu)

Le calque est celui choisi par toi "0-PAP"

L'étiquetage est maintenant possible pour des polylignes dans l'espace papier.

L'attribut est verrouillé avec un angle horizontal.

 


@CADaSchtroumpfC'est du beau boulot, je suis impressionné.

5 - J'ai une interrogation sur un élément qui je pense ne sera pas possible, concernant le sens de numérotation. Par défaut cela prend toujours le numéro des sommets de la polyligne suivant l'ordre dans laquelle elle a été dessinée. Afin de ne pas avoir a changer manuellement les attributs, Il y a t-il un moyen de pouvoir sélectionner le point de départ ainsi qu'un 2eme pour effectuer le sens ?


Ça devient compliqué, car le code fonctionne aussi avec des polylignes ouvertes.

Cependant si tu travaille qu'avec des polylignes fermées tu pourrais utiliser un autre lisp avant l'étiquetage -> plineorg.lsp de Gilles Chanteau

Et pour inverser le sens, Autocad peut le faire nativement. Click sur la polyligne (active les grips) , puis click-droit pour obtenir un menu contextuel et là tu choisi Polyligne > Inverser

Message 11 sur 11

@CADaSchtroumpf 

Un grand merci à toi pour ton temps et tes compétences c'est très bien et je vais gagner pas mal de temps à l'avenir 🙂

Le plineorg à l'air très bien il faut que je regarde ça.

Vous n'avez pas trouvé ce que vous recherchiez ? Posez une question à la communauté ou partagez vos connaissances.

Publier dans les forums  

Autodesk Design & Make Report