Aller au contenu

Cotation Polyligne


chris_mtp

Messages recommandés

Bonjour à tous,

 

Est il possible de côter directement par un simple clic une polyligne 2d (fermée ou non) avec des cotations alignés distance et /ou des cotations angulaires et ceci quel que soit le nombre de sommets ?

 

Je dois tracer en fait un profil en long de 300 sommets et côter les segments de la polylignes en distances et en angles entre chaque sommet, ce qui est périlleux et surtout très long.

 

Surtout quand les segments font 5m de longueur mo, yenne, le risque de sélectionner un sommet erroné est grande.

 

Merci par avance de votre aide.

 

John.

Lien vers le commentaire
Partager sur d’autres sites

Dites moi si je me trompe.

La commande COTATION RAPIDE permet de côter un segment de polyligne et non la totalité de la polyligne

 

EN regardant dans les options et dans l'aide D'autocad,

NADA, il a des outils de cotations polylignes en lisp mais chaque fois entre deux points ou bien en créant des champs dynamiques mais aucun en cliquant sur un objet direct avec la cotation aligné sauf bien sûr d'avoir Covadis qui est onéreux.

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

je ne peux m'empêcher de te mettre en garde

pour la cotation des Profils en long !!

 

les échelles horizontales et verticales sont elles identiques?

tu veux les distances inclinées ou rabattues à l'horizontale ?

 

réfléchis bien avant de lancer la cotation ...

 

amicelemnt

Lien vers le commentaire
Partager sur d’autres sites

En fait pour le profil en long en lui même je n'ai pas de problème.

Ce que je veux, c'est à partir de l'axe en plan projet donc en 2D, le côter avec des distances et des angles .

 

Pour les côtes en distances, c'est bon je crois avoir trouvé un lisp que je dois un peu modifier mais je vais m'en sortir même si je commence en lisp. Par contre, pour la cotation augulaire à chaque sommet de la polyligne, ca devient un peu long de cliquer un à un les sommets.

 

De plus, il faudrait à chaque sommet indiqué l'angle à gauche ou à droite inférieur à 200g avec 3décimales et en grades.

 

Mon axe en plan fait 300 sommets environ d'où mon post.

 

John.

Lien vers le commentaire
Partager sur d’autres sites

Je ne sais pas si c'est possible mais voilà la méthode qu'il faudrait utiliser à mon sens pour côter angulairement une polyligne 2d non fermée :

 

1-Lister les sommets de la polyligne en coordonnées XYZ

2-Calculer l'angle entre 3 sommets consécutifs et dans l'ordre sous excel ou même dans le lisp sous autocad

3-Intégrer la valeur de l'angle calculé au sommet concerné

 

Je ne m'y connais pas asssez bien en lisp pour prgm un tel outil, c'est dommage.

Pour le lisp concernant le listing des sommets de la polyligne, sur CadXp il y en a mais le rest ???

 

 

Lien vers le commentaire
Partager sur d’autres sites

Un code sommaire pour coter une LWPolyligne.

Le code va coter en mode aligné les segments et aussi mettre en place les cotations angulaire des sommets.

 

Si la méthode semble convenir, tu peux affiner le code pour avoir un paramétrage personnalisé de la cotation.

Le code ci après utilise le style courant...

 

(defun c:Lw_dim ( / js ent dxf_ent lst_pt AcDoc Space)
 (princ "\nSélectionner la polyligne à coter. ")
 (setq js (ssget "_+.:E:S" '((0 . "LWPOLYLINE"))))
 (cond
   (js
     (vl-load-com)
     (setq
       dxf_ent (entget (setq ent (ssname js 0)))
       lst_pt (mapcar '(lambda (x) (trans x ent 1)) (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) dxf_ent)))
     )
     (setq
       AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))
       Space
       (if (= 1 (getvar "CVPORT"))
         (vla-get-PaperSpace AcDoc)
         (vla-get-ModelSpace AcDoc)
       )
     )
     (while (cdr lst_pt)
       (vla-addDimAligned Space
         (vlax-3d-point (car lst_pt))
         (vlax-3d-point (cadr lst_pt))
         (vlax-3d-point
           (polar
             (mapcar '* (mapcar '+ (car lst_pt) (cadr lst_pt)) '(0.5 0.5 0.5))
             (+ (angle (car lst_pt) (cadr lst_pt)) (* pi 0.5))
             (* 10 (getvar "DIMTXT"))
           )
         )
       )
       (if (cddr lst_pt)
         (vla-addDimAngular Space
           (vlax-3d-point (cadr lst_pt))
           (vlax-3d-point (car lst_pt))
           (vlax-3d-point (caddr lst_pt))
           (vlax-3d-point (mapcar '* (mapcar '+ (caddr lst_pt) (car lst_pt)) '(0.5 0.5 0.5)))
         )
       )
       (setq lst_pt (cdr lst_pt))
     )
   )
 )
 (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

Bonjour à toutes et tous,

 

Fonctionne Nickel chez moi bonuscad,...

 

Si je suis amené à utiliser "Lw_dim ", il est clair que je modifierai le style de cotes pour se rapprocher de la façon "usuelle" du topo, mais pour des infos rapides (je l'ai testé sur un plan de bâtiment), c'est rudement pratique aussi,...

 

Merci, et je pense que tu répond à la question de chris_mtp,... ;)

Civil 3D 2024 - COVADIS_18.2

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

C'est parfait ton lisp. C'est exactement ce que je voulais.

Merci pour ton aide.

Par contre, dis moi le bout de code à modifier pour avoir les distances alignées par rapport aux segments de la polyligne et avoir les angles en gr à 3 decimales.

 

Je l'ai testé avec le style de côtes selon mes besoins mais il continue de m'afficher les angles en degrés.

 

Merci tout de même.

Lien vers le commentaire
Partager sur d’autres sites

Oups

en fait c'est bon, j'vais mal enregistrer le style de côte.

 

Nickel crome.

Sérieusement, merci tout comme à gile qui m'aide souvent sur ce forum.

Mais les gars, faites concurrence à Covadis Sérieux

Arrêtez de travaillez, progm et dans 10 ans vous êtes les nouveaux Bill Gates.

Lien vers le commentaire
Partager sur d’autres sites

 

Hello

 

Encore merci pour cet excellent LW_DIM :)

 

Et bien sur en tant que M. Le Crabe, je me permet une micro-critique !

 

SVP serait-ilpossible que tu traites le dernier segment de la polyligne

si c'est une polyligne close !!

 

Le Decapode "critiquant"

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

J'ai juste ajouté 2 expressions au code de Bonuscad pour qu'il fonctionne avec les polylignes fermées (ou celles dont les premiers et derniers sommets sont confondus) et un positionnement des cotes angulaires plus semblble à celui des cotes alignées.

 

(defun c:Lw_dim	(/ js ent dxf_ent lst_pt AcDoc Space)
 (princ "\nSélectionner la polyligne à coter. ")
 (setq js (ssget "_+.:E:S" '((0 . "LWPOLYLINE"))))
 (cond
   (js
    (vl-load-com)
    (setq
      dxf_ent (entget (setq ent (ssname js 0)))
      lst_pt  (mapcar
	 '(lambda (x) (trans x ent 0))
	 (mapcar
	   'cdr
	   (vl-remove-if '(lambda (x) (/= (car x) 10)) dxf_ent)
	 )
       )
    )
    (if (= 1 (logand 1 (cdr (assoc 70 dxf_ent))))
      (setq lst_pt (reverse (cons (car lst_pt) (reverse lst_pt))))
    )
    (setq
      AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))
      Space
     (if (= 1 (getvar "CVPORT"))
       (vla-get-PaperSpace AcDoc)
       (vla-get-ModelSpace AcDoc)
     )
    )
    (if (equal (car lst_pt) (last lst_pt) 1e-9)
      (vla-addDimAngular
 Space
 (vlax-3d-point (car lst_pt))
 (vlax-3d-point (cadr (reverse lst_pt)))
 (vlax-3d-point (cadr lst_pt))
 (vlax-3d-point
   (polar
     (car lst_pt)
     (angle
       (car lst_pt)
       (mapcar '*
	       (mapcar '+ (cadr (reverse lst_pt)) (cadr lst_pt))
	       '(0.5 0.5 0.5)
       )
     )
     (* 10 (getvar "DIMTXT"))
   )
 )
      )
    )
    (while (cdr lst_pt)
      (vla-addDimAligned
 Space
 (vlax-3d-point (car lst_pt))
 (vlax-3d-point (cadr lst_pt))
 (vlax-3d-point
   (polar
     (mapcar '*
	     (mapcar '+ (car lst_pt) (cadr lst_pt))
	     '(0.5 0.5 0.5)
     )
     (+ (angle (car lst_pt) (cadr lst_pt)) (* pi 0.5))
     (* 10 (getvar "DIMTXT"))
   )
 )
      )
      (if (cddr lst_pt)
 (vla-addDimAngular
   Space
   (vlax-3d-point (cadr lst_pt))
   (vlax-3d-point (car lst_pt))
   (vlax-3d-point (caddr lst_pt))
   (vlax-3d-point
     (polar
       (cadr lst_pt)
       (angle
	 (cadr lst_pt)
	 (mapcar '*
		 (mapcar '+ (caddr lst_pt) (car lst_pt))
		 '(0.5 0.5 0.5)
	 )
       )
       (* 10 (getvar "DIMTXT"))
     )
   )
 )
      )
      (setq lst_pt (cdr lst_pt))
    )
   )
 )
 (prin1)
) 

 

[Edité le 30/8/2008 par (gile)]

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

un positionnement des cotes angulaires plus semblable à celui des cotes alignées.

 

C'est vrai que mon positionnement des cotes angulaires était à revoir :(

 

 

 

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

Bjr,

 

J'ai essayé d'utiliser la routine modifier de Gile en l'a sauvardant ds un fichier lsp,

 

( [surligneur] defun c:Lw_dim (/ js ent dxf_ent lst_pt AcDoc Space)

(princ "\nSélectionner la polyligne à coter. ")

(setq js (ssget "_+.:E:S" '((0 . "LWPOLYLINE"))))

(cond

(js

(vl-load-com)

(setq

dxf_ent (entget (setq ent (ssname js 0)))

lst_pt (mapcar

'(lambda (x) (trans x ent 0))

(mapcar

'cdr

(vl-remove-if '(lambda (x) (/= (car x) 10)) dxf_ent)

)

)

)

(if (= 1 (logand 1 (cdr (assoc 70 dxf_ent))))

(setq lst_pt (reverse (cons (car lst_pt) (reverse lst_pt))))

)

(setq

AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))

Space

(if (= 1 (getvar "CVPORT"))

(vla-get-PaperSpace AcDoc)

(vla-get-ModelSpace AcDoc)

)

)

(if (equal (car lst_pt) (last lst_pt) 1e-9)

(vla-addDimAngular

Space

(vlax-3d-point (car lst_pt))

(vlax-3d-point (cadr (reverse lst_pt)))

(vlax-3d-point (cadr lst_pt))

(vlax-3d-point

(polar

(car lst_pt)

(angle

(car lst_pt)

(mapcar '*

(mapcar '+ (cadr (reverse lst_pt)) (cadr lst_pt))

'(0.5 0.5 0.5)

)

)

(* 10 (getvar "DIMTXT"))

)

)

)

)

(while (cdr lst_pt)

(vla-addDimAligned

Space

(vlax-3d-point (car lst_pt))

(vlax-3d-point (cadr lst_pt))

(vlax-3d-point

(polar

(mapcar '*

(mapcar '+ (car lst_pt) (cadr lst_pt))

'(0.5 0.5 0.5)

)

(+ (angle (car lst_pt) (cadr lst_pt)) (* pi 0.5))

(* 10 (getvar "DIMTXT"))

)

)

)

(if (cddr lst_pt)

(vla-addDimAngular

Space

(vlax-3d-point (cadr lst_pt))

(vlax-3d-point (car lst_pt))

(vlax-3d-point (caddr lst_pt))

(vlax-3d-point

(polar

(cadr lst_pt)

(angle

(cadr lst_pt)

(mapcar '*

(mapcar '+ (caddr lst_pt) (car lst_pt))

'(0.5 0.5 0.5)

)

)

(* 10 (getvar "DIMTXT"))

)

)

)

)

(setq lst_pt (cdr lst_pt))

)

)

)

(prin1)

) [/surligneur]

 

mais ça ne marche pas chez moi pourtant j'ai bien chargé la macro comme d'hab mais tjrs ce message

"appload Lw_dim.LSP correctement chargé(s)

Commande: ; erreur: type d'argument incorrect: numberp: nil

Commande: Lw_dim

Commande inconnue "LW_DIM". Appuyez sur F1 pour obtenir de l'aide

 

Le code d ela routine es tbien lw_dim non ! ou est mon soucis alors !!!

Aurais-je oublié ou pas fait correcement quelque chose

 

Merci d'avance de vos lumières

 

Phil

 

Lien vers le commentaire
Partager sur d’autres sites

Bjr,

 

J'ai essayé d'utiliser la routine modifier de Gile en l'a sauvardant ds un fichier lsp,

 

[surligneur] ( defun c:Lw_dim (/ js ent dxf_ent lst_pt AcDoc Space)

(princ "\nSélectionner la polyligne à coter. ")

(setq js (ssget "_+.:E:S" '((0 . "LWPOLYLINE"))))

(cond

(js

(vl-load-com)

(setq

dxf_ent (entget (setq ent (ssname js 0)))

lst_pt (mapcar

'(lambda (x) (trans x ent 0))

(mapcar

'cdr

(vl-remove-if '(lambda (x) (/= (car x) 10)) dxf_ent)

)

)

)

(if (= 1 (logand 1 (cdr (assoc 70 dxf_ent))))

(setq lst_pt (reverse (cons (car lst_pt) (reverse lst_pt))))

)

(setq

AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))

Space

(if (= 1 (getvar "CVPORT"))

(vla-get-PaperSpace AcDoc)

(vla-get-ModelSpace AcDoc)

)

)

(if (equal (car lst_pt) (last lst_pt) 1e-9)

(vla-addDimAngular

Space

(vlax-3d-point (car lst_pt))

(vlax-3d-point (cadr (reverse lst_pt)))

(vlax-3d-point (cadr lst_pt))

(vlax-3d-point

(polar

(car lst_pt)

(angle

(car lst_pt)

(mapcar '*

(mapcar '+ (cadr (reverse lst_pt)) (cadr lst_pt))

'(0.5 0.5 0.5)

)

)

(* 10 (getvar "DIMTXT"))

)

)

)

)

(while (cdr lst_pt)

(vla-addDimAligned

Space

(vlax-3d-point (car lst_pt))

(vlax-3d-point (cadr lst_pt))

(vlax-3d-point

(polar

(mapcar '*

(mapcar '+ (car lst_pt) (cadr lst_pt))

'(0.5 0.5 0.5)

)

(+ (angle (car lst_pt) (cadr lst_pt)) (* pi 0.5))

(* 10 (getvar "DIMTXT"))

)

)

)

(if (cddr lst_pt)

(vla-addDimAngular

Space

(vlax-3d-point (cadr lst_pt))

(vlax-3d-point (car lst_pt))

(vlax-3d-point (caddr lst_pt))

(vlax-3d-point

(polar

(cadr lst_pt)

(angle

(cadr lst_pt)

(mapcar '*

(mapcar '+ (caddr lst_pt) (car lst_pt))

'(0.5 0.5 0.5)

)

)

(* 10 (getvar "DIMTXT"))

)

)

)

)

(setq lst_pt (cdr lst_pt))

)

)

)

(prin1)

) [/surligneur]

mais ça ne marche pas chez moi pourtant j'ai bien chargé la macro comme d'hab mais tjrs ce message

"appload Lw_dim.LSP correctement chargé(s)

Commande: ; erreur: type d'argument incorrect: numberp: nil

Commande: Lw_dim

Commande inconnue "LW_DIM". Appuyez sur F1 pour obtenir de l'aide

 

Le code d ela routine es tbien lw_dim non ! ou est mon soucis alors !!!

Aurais-je oublié ou pas fait correcement quelque chose

 

Merci d'avance de vos lumières

 

Phil

 

 

Lien vers le commentaire
Partager sur d’autres sites

  • 4 mois après...

bonjour,

Un grand merci aux co-producteurs pour ce fichier lsp.

Pour mon application perso ( je dessine des lignes electriques bt... entre autres), je souhaiterai que la valeur de l'angle qui s'affiche soit celle de l'angle complémentaire pour faire l'angle plat.

 

ex: 2 poly avec un angle de 188 gr, reste 12 gr pour faire l'angle plat. je veux que se soit 12gr qui soit affiché sur le plan au meme endroit qu'actuellement.

Je pensais mettre dans le lisp 200 - angle mesuré mais cela dépasse mes compétences.

Je suis pas sur d'etre tres clair.

merci d'avance.

bonne journée.

 

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

je souhaiterai que la valeur de l'angle qui s'affiche soit celle de l'angle complémentaire pour faire l'angle plat.

 

Bonjour,

 

La version de (gile) modifiée?

 

(defun c:Lw_dim (/ js ent dxf_ent lst_pt AcDoc Space)
(princ "\nSélectionner la polyligne à coter. ")
(setq js (ssget "_+.:E:S" '((0 . "LWPOLYLINE"))))
(cond
(js
(vl-load-com)
(setq
dxf_ent (entget (setq ent (ssname js 0)))
lst_pt (mapcar
'(lambda (x) (trans x ent 0))
(mapcar
'cdr
(vl-remove-if '(lambda (x) (/= (car x) 10)) dxf_ent)
)
)
)
(if (= 1 (logand 1 (cdr (assoc 70 dxf_ent))))
(setq lst_pt (reverse (cons (car lst_pt) (reverse lst_pt))))
)
(setq
AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))
Space
(if (= 1 (getvar "CVPORT"))
(vla-get-PaperSpace AcDoc)
(vla-get-ModelSpace AcDoc)
)
)
(if (equal (car lst_pt) (last lst_pt) 1e-9)
(vla-addDimAngular
Space
(vlax-3d-point (car lst_pt))
(vlax-3d-point (cadr (reverse lst_pt)))
(vlax-3d-point (cadr lst_pt))
(vlax-3d-point
(polar
(car lst_pt)
(angle
(car lst_pt)
(mapcar '*
(mapcar '+ (cadr (reverse lst_pt)) (cadr lst_pt))
'(0.5 0.5 0.5)
)
)
(* 10 (getvar "DIMTXT"))
)
)
)
)
(while (cdr lst_pt)
(vla-addDimAligned
Space
(vlax-3d-point (car lst_pt))
(vlax-3d-point (cadr lst_pt))
(vlax-3d-point
(polar
(mapcar '*
(mapcar '+ (car lst_pt) (cadr lst_pt))
'(0.5 0.5 0.5)
)
(+ (angle (car lst_pt) (cadr lst_pt)) (* pi 0.5))
(* 10 (getvar "DIMTXT"))
)
)
)
(if (cddr lst_pt)
(vla-addDimAngular
Space
(vlax-3d-point (cadr lst_pt))
(vlax-3d-point (car lst_pt))
(vlax-3d-point (caddr lst_pt))
(vlax-3d-point

(polar
(cadr lst_pt)
(angle
(cadr lst_pt)
(mapcar '*
(mapcar '+ (caddr lst_pt) (polar
(cadr lst_pt)
(angle
(car lst_pt)
(cadr lst_pt)
)
(* 10 (getvar "DIMTXT"))
))
'(0.5 0.5 0.5)
)
)
(* 10 (getvar "DIMTXT"))
)



)
)
)
(setq lst_pt (cdr lst_pt))
)
)
)
(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

bonjour,

merci pour la modif et la reactivité.

Je suis en train de me "battre" avec les styles de cote. En effet, je souhaiterai que la cote s'affiche sur la polyligne (actuellement trés ecartée) et que la cote d'angle soit à son ancienne place...

un petit schema( visible?) vaut mieux qu un long discours embetant.

http://images.imagehotel.net/p2k5dnnsgf_tn.jpg

Ce n'est pas dans le lsp que sont gerés ces paramétres?

bonne journée.

 

 

Lien vers le commentaire
Partager sur d’autres sites

Regardes les variables "DIMSD1 DIMSD2 DIMSE1 DIME2".

Si ces variables sont mises à 1 ("Actif") supprime le tracé des lignes de cotes et d'attaches.

 

et que la cote d'angle soit à son ancienne place.

 

Ça ce n'est pas possible par programmation car c'est l'emplacement du texte qui détermine quel angle est à mesurer.

Après par édition (grip par exemple) tu peux les repositionner où tu veux, mais un par par un.

 

je souhaiterai que la cote s'affiche sur la polyligne

 

L'écartement dans le lisp est déterminé avec cette ligne:

 

(* 10 (getvar "DIMTXT")) (10 x fois la hauteur du texte de cotation)

 

Évites, je pense une valeur (j'ai pas testé) une valeur équivalente à zéro.

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

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é