Aller au contenu

Cotation de polylignes


DenisHen

Messages recommandés

Bonjour à la communauté.

 

Voilà, je pense l'avoir déjà croisé, mais je ne la retrouve plus.

 

Il s'agit d'une routine qui cote les polylignes et écrit sa longueur le long de celle-ci ou au centre.

 

J'ai plusieurs polylignes qui se suivent sur 11km, j'aimerais écrire leurs différentes longueurs au milieu...

 

Si quelqu'un l'a ou sait où elle se trouve, ça m'aiderait beaucoup...

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Il faut créer un champ !

Le hic étant qu'à la copie et quand on change d'objet surveillé par le CHAMP, il faut saisir à nouveau sa demande de calcul dans les unités...

...déplorable.

Bref, on peut aussi programmer l'installation du champ je pense.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

Bonjour Tramber, et merci de me répondre.

 

Mon problème est que j'ai, juste pour ce dessin, une suite de 162 polylignes.

 

Je me vois mal positionner les 162 champs à la main... J'étais sûr qu'une routine existait.

 

Et je ne vois pas comment programmer ça. Peut-être qu'en m'inspirant de "TotalPerim" de (gile) pour me coller un gros texte au milieu des polylignes

 

En tous cas, merci...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Un petit truc vite fait.

 

Pour placer un texte avec la longueur au milieu de l'entité curviligne (tout type sauf droites et demi-droite bien sûr).

Tu peux modifier les valeurs DXF du texte créé (ici, hauteur courante, style "standard" et justification MC)

 

(defun printCurveLength	(curve / l p)
 (setq	l (vlax-curve-getDistAtParam
    curve
    (vlax-curve-getEndParam curve)
  )
p (vlax-curve-getPointAtDist curve (/ l 2.))
 )
 (entmake
   (list
     '(0 . "TEXT")
     (cons 10 p)			; premier point d'alignement
     (cons 40 (getvar 'textsize))	; hauteur de texte
     (cons 11 p)			; deuxième point d'alignement
     (cons 1 (rtos l 2 2))		; longueur avec 2 décimales
     '(7 . "Standard")                 ; style de texte
     '(72 . 1)				; justification horizontale
     '(73 . 2)				; justification verticale
   )
 )
)

 

Appelle la fonction ci-dessus pour toutes les polylignes 3d sélectionnées

(defun c:cmd (/ s i)
 (if (setq s (ssget '((0 . "POLYLINE") (-4 . "&") (70 . 8))))
   (repeat (setq i (sslength s))
     (printCurveLength (ssname s (setq i (1- i))))
   )
 )
)

  • Upvote 1

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

La même avec un champ dynamique

 

(defun lengthField (curve / l p)
 (setq	l (vlax-curve-getDistAtParam
    curve
    (vlax-curve-getEndParam curve)
  )
p (vlax-curve-getPointAtDist curve (/ l 2.))
 )
 (entmake
   (list
     '(0 . "TEXT")
     (cons 10 p)			; premier point d'alignement
     (cons 40 (getvar 'textsize))	; hauteur de texte
     (cons 11 p)			; deuxième point d'alignement
     (cons 1				; valeur de texte (champ dynamique)
    (strcat "%<\\AcObjProp Object(%<\\_ObjId "
	    (vla-getObjectIdString
	      (vla-get-Utility
		(vla-get-ActiveDocument (vlax-get-acad-object))
	      )
	      (if (= (type curve) 'VLA-OBJECT)
		curve
		(vlax-ename->vla-object curve)
	      )
	      :vlax-false
	    )
	    ">%).Length \\f \"%lu2%pr2\">%"
    )
     )
     '(7 . "Standard")			; style de texte
     '(72 . 1)				; justification horizontale
     '(73 . 2)				; justification verticale
   )
 )
 (command-s "_UPDATEFIELD" (entlast) "")
)

 

(defun c:cmd (/ s i)
 (if (setq s (ssget '((0 . "POLYLINE") (-4 . "&") (70 . 8))))
   (repeat (setq i (sslength s))
     (lengthField (ssname s (setq i (1- i))))
   )
 )
)

  • Upvote 1

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

La même en 'Visual LISP' (pour ceux qui préfèrent).

 

(defun lengthField (curve / text)
 (or *acdoc*
     (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
 )
 (if (= (type curve) 'ENAME)
   (setq curve (vlax-ename->vla-object curve))
 )
 (setq	text
 (vla-AddText
   (vla-ObjectIDToObject *acdoc* (vla-get-OwnerId curve))
   (strcat "%<\\AcObjProp Object(%<\\_ObjId "
	   (vla-getObjectIdString
	     (vla-get-Utility *acdoc*)
	     curve
	     :vlax-false
	   )
	   ">%).Length \\f \"%lu2%pr2\">%"
   )
   (vlax-3d-point '(0. 0. 0.))
   (getvar 'textsize)
 )
 )
 (vla-put-Alignment text acAlignmentMiddleCenter)
 (vla-put-TextAlignmentPoint
   text
   (vlax-3d-point
     (vlax-curve-getPointAtDist
curve
(/ (vlax-curve-getDistAtParam
     curve
     (vlax-curve-getEndParam curve)
   )
   2.
)
     )
   )
 )
 (command-s "_UPDATEFIELD" (entlast) "")
)

  • Upvote 1

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Salut (gile)

 

Et merci pour tous ces codes ! ! !

 

C'est vraiment top...

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à tous.

 

(gile), je ne comprend pas trop, j'ai testé le premier code (celui qui m'intéresse le plus, mais lorsque je choisi mes polylignes et AutoCAD me répond (J'ai renommé la commande, c'est maintenant CotLongPoly) :

Commande:CotLongPoly

Choix des objets: Spécifiez le coin opposé: 0 trouvé(s)

Choix des objets: Spécifiez le coin opposé: 0 trouvé(s), 0 au total

Choix des objets:

nil

Commande:

Je joins à ce poste un exemple de fichier.

 

Merci encore pour votre aide.

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour DenisH,

 

Tu as utilisé des polylignes légères alors que (gile) à fait un code pour de la polyligne 3d (ce qui parait plus logique en topo)

 

Pour obtenir un texte.

(defun c:cmd (/ s i)
 (if (setq s (ssget '((0 . "LWPOLYLINE"))))
   (repeat (setq i (sslength s))
     (printCurveLength (ssname s (setq i (1- i))))
   )
 )
)

 

Pour obtenir un champs.

(defun c:cmd (/ s i)
 (if (setq s (ssget '((0 . "LWPOLYLINE"))))
   (repeat (setq i (sslength s))
     (lengthField (ssname s (setq i (1- i))))
   )
 )
)

 

Pour le dernier code, je maitrise pas bien le VLISP donc je préfère laissé quelqu'un de plus compétent regarder.

 

Olivier

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

Bonjour Olivier.

 

Et mille mercis... Ça fonctionne nickel.

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

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é