Tramber Posté(e) le 29 mars 2007 Posté(e) le 29 mars 2007 Au lieu de Commande: di DISTANCE Spécifiez le premier point: J'adoreraisCommande: di DISTANCE Spécifiez le premier point ' : En tous cas, à moi, il me rendrait bien des services ;) Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Bred Posté(e) le 29 mars 2007 Posté(e) le 29 mars 2007 En tous cas, à moi, il me rendrait bien des servicesBen ?... pourquoi tu ne te le fais pas en lisp ?... :casstet: (vlax-curve-getDistAtParam ent (vlax-curve-getEndParam ent))ou j'ai rien compris.... :P Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
(gile) Posté(e) le 29 mars 2007 Posté(e) le 29 mars 2007 Salut, Voilà une ébauche, tu sauras l'adapter à tes besoins Edit : la distance des polyarcs était erronée, c'est corrigé ;;; CLOSEST_VERTICES Retourne la liste des coordonnées (dans le SCG) ;;; des deux sommets du segment de polyligne (liste entsel) (defun closest_vertices (ent / pt obj par) (cond ((and (listp ent) (or (= (getval 0 ent) "LWPOLYLINE") (and (= (getval 0 ent) "POLYLINE") (zerop (logand 116 (getval 70 ent))) ) ) ) (vl-load-com) (setq pt (vlax-curve-getClosestPointToProjection (setq obj (vlax-ename->vla-object (car ent))) (trans (cadr ent) 1 0) (mapcar '- (trans (getvar "viewdir") 1 0) (trans '(0 0 0) 1 0) ) ) par (vlax-curve-getParamAtPoint obj pt) ) (list (vlax-curve-getPointAtParam obj (fix par)) (vlax-curve-getPointAtParam obj (1+ (fix par))) ) ) ) ) (defun c:dis (/ p1 p2 ent tot plst) (if (setq p1 (getpoint "\nSpécifiez le premier point ou < Sélectionnez un objet >: " ) ) (progn (while (not (setq p2 (getpoint p1 "Spécifiez le deuxième point: ")) ) ) (princ (strcat "\nDistance : " (rtos (distance p1 p2)) ) ) ) (if (and (setq ent (entsel)) (not (vl-catch-all-error-p (setq p2 (vl-catch-all-apply 'vlax-curve-getEndParam (list (car ent)) ) ) ) ) ) (progn (setq tot (vlax-curve-getDistAtParam (car ent) p2)) (if (wcmatch (cdr (assoc 0 (entget (car ent)))) "*POLYLINE") (progn (setq plst (closest_vertices ent)) (princ (strcat "\nDistance totale : " (rtos tot) " Segment sélectionné : " (rtos (- (vlax-curve-getDistAtPoint (car ent) (cadr plst)) (vlax-curve-getDistAtPoint (car ent) (car plst)) ) ) ) ) ) (princ (strcat "\nDistance : " (rtos tot))) ) ) (princ "\nEntité non valide.") ) ) (princ) ) [Edité le 29/3/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Bred Posté(e) le 29 mars 2007 Posté(e) le 29 mars 2007 (gile) tu n'as pas mis la routine "getval" ... mais super beau code.... comme d'hab. !... Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Bred Posté(e) le 29 mars 2007 Posté(e) le 29 mars 2007 ... je suis bluffer par la commande vlax-curve-getClosestPointToProjection L'aide est vraiment trop en anglais pour moi... :o Une bonne âme pourrait me l'expliquer ???merci ! (c'est bizarre... mon message bug et je ne comprends pas pourquoi...) [Edité le 29/3/2007 par Bred] Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
(gile) Posté(e) le 29 mars 2007 Posté(e) le 29 mars 2007 Salut, vlax-curve-getClosestPointToProjection projette l'objet curve sur un plan défini par son vecteur normal (ici en gros c'est viewdir), calcule le point le de la courbe projetée le plus proche du point spécifié et re projette en sens inverse le point calculé sur la courbe. C'est un peu tordu mais c'est la solution qui semble le mieux marcher pour toutes les entités en 3D quelque soit la vue et le SCU courant. C'est le fruit d'un long challenge entre Bonuscad et moi pour trouver une alternative à (osnap pt "_near") et (vlax-curve-getClosestPointTo ent pt) qui bugguent avec les poly 2d (old style) contenant des arcs dans les SCU non parallèles au SCG. Une recherche avec vlax-curve-getClosestPointToProjection devrait permettre de retrouver le fil de ces dicussions (cette fonction est assez peu utilisée). J'ai retrouvé, ça commence ici et ça continue là. La routine de BonusCAD "near_vertex" (plus élaborée que la mienne) est ici. [Edité le 29/3/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 29 mars 2007 Posté(e) le 29 mars 2007 tu n'as pas mis la routine "getval" Oups, celle là je la fait assez régulièrement :calim: Il n'y en plus besoin, j'ai un peu amélioré le code en intégrant juste la partie de closest_vertices qui est utile. EDIT : réparé un dysfonctionnement sur certains segments de polylignes 3d quand la vue courante est différente de la vue de dessus ;; DIST Retourne sur la ligne de commande la distance entre 2 points ou celle ;; de l'objet sélectionné (plus la distance du segment pour les polylignes). (defun c:dist (/ p1 p2 ent obj tot par) (vl-load-com) (if (setq p1 (getpoint "\nSpécifiez le premier point ou < Sélectionnez un objet >: " ) ) (progn (while (not (setq p2 (getpoint p1 "Spécifiez le deuxième point: ")) ) ) (princ (strcat "\nDistance : " (rtos (distance p1 p2)) ) ) ) (if (and (setq ent (entsel)) (not (vl-catch-all-error-p (setq p2 (vl-catch-all-apply 'vlax-curve-getEndParam (list (setq obj (vlax-ename->vla-object (car ent)))) ) ) ) ) ) (progn (setq tot (vlax-curve-getDistAtParam obj p2)) (if (wcmatch (vla-get-ObjectName obj) "*Polyline") (progn (if (= (vla-get-ObjectName obj) "AcDb2dPolyline") (setq p1 (vlax-curve-getClosestPointToProjection obj (trans (cadr ent) 1 0) (trans '(0 0 1) 2 0 T) ) ) (setq p1 (trans (osnap (cadr ent) "_nea") 1 0)) ) (setq par (vlax-curve-getParamAtPoint obj p1)) (princ (strcat "\nDistance totale : " (rtos tot) " Segment sélectionné : " (rtos (- (vlax-curve-getDistAtParam obj (1+ (fix par))) (vlax-curve-getDistAtParam obj (fix par)) ) ) ) ) ) (princ (strcat "\nDistance : " (rtos tot))) ) ) (princ "\nEntité non valide.") ) ) (princ) ) PS : on peut faire un alias avec D (qui n'est pas utilisé àl'orignine) ou ajouter : (defun c:d () (c:dist)) [Edité le 27/10/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Tramber Posté(e) le 30 mars 2007 Auteur Posté(e) le 30 mars 2007 Ca suffit les gars, reposez-vous. Le lisp, je sais très bien le faire. Pensez un peu aux autres et dîtes-moi si l'idée est bonne. Aussi pour les utilisateurs LT. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
x_all Posté(e) le 30 mars 2007 Posté(e) le 30 mars 2007 une sacré bonne idée... j'irai même plus loint. quand on selectione des hachures ( fo etre bien propre sur les polygones et séparer les zones) on peu facilement avoir le cumullé des surfaces dans la zone proprieté (qui est tjs affichée sur mon 16:9) pourquoi pas le même affichage pour la longueur des polygones??? quelques trucs sur autocad
(gile) Posté(e) le 31 mars 2007 Posté(e) le 31 mars 2007 Le lisp, je sais très bien le faire.Je n'en ai jamais douté, Tramber... Pensez un peu aux autres ...le LISP, c'est aussi pour eux. Aussi pour les utilisateurs LT. Là, il faudra attendre qu'Autodesk se penche sur la question, à moins que Rebcao nous sorte une des supers macros en Diesel dont il a le secret. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
x_all Posté(e) le 31 mars 2007 Posté(e) le 31 mars 2007 harf... le lisp... je sais, je pourai m'y metre un jour... un jour ou les 35h ne seront pas a faire en une journée mais bien en une semaine ... en relisant la proposition de Tramber, je me rend copte que je n'en ai pas forcément saisie toute la portée... tu veux dire pas là, que par exemple lors d'un déplacer, copier ou décaler on pourai saisir la distance en sélectionant une poly? alors la c'est une giga méga bonne idée :) (notament en 3D ou on peu pas tjs faire ce qu'on veux a cause du scu) et si le lisp de gile (dont je vénère les codes mais n'en comprend pas la subtilité) va dans ce sens je vais l'adopter rapidos.. je sais qu'il existe des bouts de code pour cumuler les longueurs de polyligne, mais trouver ça en standard serai pas mal non plus, quand je vais sur un autre poste que le mien (qui commence a etre bien customisé ) j'ai pas souvant la fonction bien pratique téléchargée grace a vos compétences et votre générosité... qqs effort de d'autodesk sur l'ergonomie et l'aide au métré serai la bien vennue... quelques trucs sur autocad
Tramber Posté(e) le 31 mars 2007 Auteur Posté(e) le 31 mars 2007 tu veux dire pas là, que par exemple lors d'un déplacer, copier ou décaler on pourai saisir la distance en sélectionant une poly? Une ligne ou un sgement de poly. Pas mal non plus l'idée. Mais bon, ca ne serait pas une option de DISTANCE mais d'autres commandes. Mais ce que je veux dire est simple :Mes collègues mérprisent DI ou DISTANCE car on mesure souvent des bouts de lignes ou d'arcs par exemple pour mesurer des fibres neutres en vue d'un pliage acier. Moi-même j'en ai marre de lancer un outil cotation puis ENTREE puis cliquer l'objet puis l'effacer. Ca n'est pas mieux que distance et de devoir saisir 2 points (en ayant à rallumer les ACCROBJ par exemple). Les lisp, c'est bien, j'en vis encore et ca m'a fait gagner pas mal d'argent. Mais quand oin travaille sur je ne sais combien de postes, rajouter des fonctions, les gérer et tout,... et tout, ca devient la galère. De plus tant de gens sont en LT ... Une amélio, une amélio, .... Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
(gile) Posté(e) le 27 octobre 2007 Posté(e) le 27 octobre 2007 J'ai réparé, dans le LISP dist, un dysfonctionnement sur certains segments de polylignes 3d quand la vue courante est différente de la vue de dessus Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Laurent_CAMPEDEL Posté(e) le 31 octobre 2007 Posté(e) le 31 octobre 2007 Allé, je vais jouer les candides : et la commande "liste" ? Lorsque je veux connaitre la longeur d'une polyligne (donc d'un polygone), d'une ligne, etc., je ne passe pas la commande distance mais la commande liste. Ou alors je n'ai rien compris de la demande... Laurent CAMPEDELDans l'usage des raccourcis clavier repensés tu trouveras la voie.
(gile) Posté(e) le 31 octobre 2007 Posté(e) le 31 octobre 2007 Salut, La commande LISTE ne donne pas la longueur d'un segment de polyligne. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Laurent_CAMPEDEL Posté(e) le 1 novembre 2007 Posté(e) le 1 novembre 2007 Salut, La commande LISTE ne donne pas la longueur d'un segment de polyligne. Bien sur. Dans ce cas, je me sers de distance... Laurent CAMPEDELDans l'usage des raccourcis clavier repensés tu trouveras la voie.
nomutt Posté(e) le 1 novembre 2007 Posté(e) le 1 novembre 2007 Bonjour, Dans mon cas, depuis la version 2006 avec AutoCAD, je tire parti du mode dyn. Je lance une commande ligne (avec Accrobj activé bien sur), je saisi le premier point et je vais jusqu'au point suivant pour la mesure mais je ne clique pas. Le mode Dyn affiche la longueur du segment linéaire. De mémoire je crois que le mode Dyn est dispo sur AutoCAD LT également. Nomutt,Consultant, Responsable Projets CAD/PLM'Add-ins pour Inventor + Trucs et Astuces.Disponible pour un poste administrateur CAO/PLM.
(gile) Posté(e) le 1 novembre 2007 Posté(e) le 1 novembre 2007 Re, Le souhait du départ est celui d'une commande distance qui retourne la distance entre 2 points ou la longueur totale d'un objet et la longueur du segment sélectionné si cet objet est une polyligne (ce segment pouvant être un arc). Le LISP que j'ai donné (et que j'utilise en permanence) répond, il me semble, à l'ensemble de ce souhait même s'il n'est qu'un pis aller en attendant qu'Autodesk veuille bien répondre à ce souhait. [Edité le 1/11/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant