Aller au contenu

Messages recommandés

Posté(e)

Au lieu de

Commande: di DISTANCE Spécifiez le premier point: 

 

J'adorerais

Commande: 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

 

./__\.
(.°=°.)
Posté(e)
En tous cas, à moi, il me rendrait bien des services

Ben ?... 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...

Posté(e)

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

Posté(e)

(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...

Posté(e)

... 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...

Posté(e)

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 .

 

 

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

Posté(e)
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

Posté(e)

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

 

./__\.
(.°=°.)
Posté(e)

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???

 

 

Posté(e)

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

Posté(e)

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...

Posté(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?

 

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

 

./__\.
(.°=°.)
  • 6 mois après...
Posté(e)

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 CAMPEDEL

Dans l'usage des raccourcis clavier repensés tu trouveras la voie.

Posté(e)
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 CAMPEDEL

Dans l'usage des raccourcis clavier repensés tu trouveras la voie.

Posté(e)

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.

Posté(e)

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

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é