Aller au contenu

[CAD MAP 3D] Polyligne ou ligne avec distance affiché sur l'élément


drault

Messages recommandés

Bonjour,

 

Dans le cadre de la production de plans de sécurité, je cherche à afficher la distance parcourue par chaque segment de polyligne / chaque ligne, au centre de l'élément, au dessus.

Je n'arrive pas à trouver dans les fonctions native d'autocad, je n'ai pas trouvé de LISP ni de post qui aborde ici le sujet.

J'ai peut-être mal cherché.

 

Merci par avance,

Belle journée,

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

De manière statique (fixé en dur et non dynamique comme proposée par (gile)  )

J'ai ce bout de code essentiellement pour des LWPOLYLINE (avec ou sans arcs) pour "labelliser" la longueur de chaque segments.

Les textes seront dans le calque DIMENSIONS et avec le style de texte DIM-VERTEX, donc plus facile à filtrer si nécessité pour effacer et refaire l'opération.

(vl-load-com)
(defun c:label_dist_vtx ( / l_var js htx AcDoc Space nw_style n obj ename pr dist_start dist_end pt_start pt_end seg_len alpha val_txt dim_txt nw_obj)
  (setq l_var (mapcar 'getvar '("AUNITS" "AUPREC" "LUPREC" "LUNITS")))
  (mapcar 'setvar '("AUNITS" "AUPREC" "LUPREC" "LUNITS") '(4 3 2 2))
  (princ "\nSélectionnez les polylignes.")
  (while (null (setq js (ssget '((0 . "LWPOLYLINE")))))
    (princ "\nLa sélection est vide ou ce n'est pas des LWPOLYLINE!")
  )
  (initget 6)
  (setq htx (getdist (getvar "VIEWCTR") (strcat "\nSpécifiez la hauteur du texte <" (rtos (getvar "TEXTSIZE")) ">: ")))
  (if htx (setvar "TEXTSIZE" htx))
  (setq
    AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))
    Space
    (if (= 1 (getvar "CVPORT"))
      (vla-get-PaperSpace AcDoc)
      (vla-get-ModelSpace AcDoc)
    )
  )
  (vla-startundomark AcDoc)
  (cond
    ((null (tblsearch "LAYER" "DIMENSIONS"))
      (vlax-put (vla-add (vla-get-layers AcDoc) "DIMENSIONS") 'color 7)
    )
  )
  (cond
    ((null (tblsearch "STYLE" "DIM-VERTEX"))
      (setq nw_style (vla-add (vla-get-textstyles AcDoc) "DIM-VERTEX"))
      (mapcar
        '(lambda (pr val)
          (vlax-put nw_style pr val)
        )
        (list 'FontFile 'Height 'ObliqueAngle 'Width 'TextGenerationFlag)
        (list (strcat (getenv "windir") "\\fonts\\arial.ttf") 0.0 0.0 1.0 0.0)
      )
    )
  )
  (repeat (setq n (sslength js))
    (setq
      obj (ssname js (setq n (1- n)))
      ename (vlax-ename->vla-object obj)
      pr -1
    )
    (repeat (fix (vlax-curve-getEndParam ename))
      (setq
        dist_start (vlax-curve-GetDistAtParam ename (setq pr (1+ pr)))
        dist_end (vlax-curve-GetDistAtParam ename (1+ pr))
        pt_start (vlax-curve-GetPointAtParam ename pr)
        pt_end (vlax-curve-GetPointAtParam ename (1+ pr))
        seg_len (- dist_end dist_start)
        alpha (angle (trans pt_start 0 1) (trans pt_end 0 1))
        val_txt (rtos seg_len)
        dim_txt (textbox (list (cons 1 val_txt)))
      )
      (if (and (> alpha (* pi 0.5)) (< alpha (* pi 1.5))) (setq alpha (+ alpha pi)))
      (if (> (distance (car dim_txt) (cadr dim_txt)) seg_len)
        (setq val_txt (vl-string-subst "E \\P" "E " val_txt))
      )
      (setq nw_obj
        (vla-addMtext Space
          (vlax-3d-point (setq pt (polar (vlax-curve-GetPointAtParam ename (+ 0.5 pr)) (+ alpha (* pi 0.5)) (getvar "TEXTSIZE"))))
          0.0
          val_txt
        )
      )
      (mapcar
        '(lambda (pr val)
          (vlax-put nw_obj pr val)
        )
        (list 'AttachmentPoint 'Height 'DrawingDirection 'InsertionPoint 'StyleName 'Layer 'Rotation)
        (list 8 (getvar "TEXTSIZE") 5 pt "DIM-VERTEX" "DIMENSIONS" alpha)
      )
    )
  )
  (vla-endundomark AcDoc)
  (mapcar 'setvar '("AUNITS" "AUPREC" "LUPREC" "LUNITS") l_var)
  (prin1)
)

 

  • Like 1

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

  • 3 semaines après...

@gileMerci mais problème.

-1er lien vers OVERULE/.msi, non chargeable sur nos ordis du boulot bloqués.

-2nd lien SEGLEN, ne se lance pas, j'ai pris le code de la réponse du 27/01/2011

@bonuscadMerci mais pb, lisp ne se lance pas

-test nommage "label_dist_vtx.lsp" & "vl-load-com.lsp" => rien ne se passe. J'ai du me planter quelque part :')

-C'est vrai qu'un dynamique serait toujours mieux 🙂

Lien vers le commentaire
Partager sur d’autres sites

Coucou,

Tu ne peux pas demander à ton SI de vous installer le fichier .msi "OVERRULE" ? Je doute que cela pose un réel soucis en soit, et utilisant personnellement ce programme il est très efficace et complet 😉

Quand tu dis, SEGLEN ne se lance pas, peux-tu être plus précis sur l'erreur rencontrée ? Car je viens de l'essayer sur mon poste et je n'ai aucun soucis... Après si tu n'as aucun droit d'écriture, peut-être que la création du fichier temporaire .dcl pour la boîte de dialogue pose un problème mais je n'en sais trop rien..

Je n'ai aucun problème non plus avec le programme de BonusCAD... On est bien d'accord que tu te contentes de copier l'intégralité du texte située dans la fenêtre balisée <code> de CADxp, que tu colles cela dans un fichier bloc note vierge, et que tu fais "enregistrer sous" en ajoutant l'extension ".lsp" à la suite du nom de ton fichier ?! Ensuite il te suffit de faire APPLOAD et d'importer le fichier .lsp nouvellement crée dans ton dessin et de lancer la commande SEGLEN (pour le programme de (gile)) ou la commande LABEL_DIST_VTX (pour le programme de BonusCAD) !!

Du coup si tu veux dans l'ordre :
 - Le fichier .msi Overrule permet d'ajouter une option 'Polyligne Overrule' dans les options du clic droit lorsque tu as sélectionné uniquement une ou plusieurs polylignes ("LWPOLYLINE", non fonctionnel avec les lignes, arcs, polylignes 3D, ...). Cette option possède deux états : Actif ou Inactif. La valeur Actif permet d'ajouter les longueurs de chaque segments aux polylignes sélectionnées et utilise les valeurs de "TEXTSIZE" (pour la hauteur des textes) et "LUPREC" (pour le nombre de décimales après la virgule), à savoir que si tu veux mettre à jour la hauteur de texte ou le nombre de décimale, il suffit de refaire actifs sur les polylignes en questions. L'option Inactif permet de supprimer les textes des polylignes sélectionnées. L'atout principal de cette commande c'est que les textes sont directement intégrés à la polyligne donc il n'y a pas d'entités supplémentaires dans le dessin, les textes suivent en temps réel le segment avec lequel ils sont associés (position milieu, direction, sens, longueur, ...) et ainsi tout est dynamique ! Sans passer par le clic droit, tu peux passer par les commandes SEGLEN_OVERRULE_ON et SEGLEN_OVERRULE_OFF 😉

 - La commande SEGLEN permet de paramétrer de manière assez détaillée les textes qui seront ajoutés au-dessus de chaque segments des polylignes sélectionnées (fonctionnel aussi bien avec les polylignes, lignes, polylignes 3D) grâce à une boîte de dialogue. Les options dispo dans la boîte de dialogue sont : Style de texte, Justification du texte, Hauteur de texte, préfixe, suffixe, Orientation du texte (Horizontal ou Aligné au segment) et l'option "Forcer le sens de lecture". Cependant, les textes sont des entités supplémentaires, non dynamiques et non liés à la polyligne (donc si tu déplaces la polylignes, modifie ses sommets etc... les textes ne seront plus cohérents avec le tracé. En clair, le programme permet de faire un linéaire à un instant T, sans suivre l'évolution des objets). Le nombre de décimale est définie également par "LUPREC".

 - La commande LABEL_DIST_VTX permet d'ajouter les longueurs de chaque segments de manière rapide en n'ayant que la hauteur du texte comme option. Le nombre de décimale semble être défini à 2 mais les textes insérés appartiennent à un calque nommé "DIMENSIONS" et ont le style de texte "DIM-VERTEX" (donc facilement sélectionnables). Cependant, il ne fonctionne qu'avec les polylignes (donc pas les lignes, les arcs, polylignes 3D, ...) et au même titre que le programme SEGLEN de (gile), il n'y a pas de dynamisme entre les textes et les objets Polylignes.

Donc après, tu choisis ce qui te correspond le mieux, mais aucun de ces programmes ne présentent d'erreur(s) lors de l'exécution (seul le .msi peut poser problème à l'installation car nécessite des droits Admin) !

Bisous,
Luna

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

@Luna

 

Merci pour le recap, j'avais bien compris la diff. entre chaque script.

Je suis ok sur le nommage, enregistrement et lancement.

-Overulle, notre SI est soumis à validation, j'attends...

-SEGLEN, ça marche, j'ai du mal écrire...

-LABEL, ça marche aussi, j'avais mal écrit, je pense...

Cependant, je trouve dommage que la ligne de côte ou la distance du texte par rapport à l'objet soient manquants.

 

Merci !

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é