Invité ingoenius Posté(e) le 21 décembre 2006 Posté(e) le 21 décembre 2006 salut, et bonne fetes! je cherche de faire un lisp qui me calcule la somme des longueur des lignes e polilignees selectionnes, mais je n'arrive pas a extrare l'info longueur de la poliligne, si je selectionne une poliligne et je envoy la commande _list j'ai a lecran une info longueur avec la somme de toute ses longueurs, masi je n'arrive pas a extraire celle ci a partir des codes dxf le fait est que dans l'utilisation on selectionne des objet mixtes qui peuvent etre lignes simples ou polilignees, ou spile ou tout ouvtre object d'autocad , comment faire?? merci d'avance
zebulon_ Posté(e) le 21 décembre 2006 Posté(e) le 21 décembre 2006 en utilisant les fonctions vlax-curve... (setq ENT (entlast)) (setq vlaobj (vlax-ename->vla-object ent) pt_org (vlax-curve-getStartPoint vlaobj) pt_end (vlax-curve-getEndPoint vlaobj) param_start (vlax-curve-getStartParam vlaobj) param_end (vlax-curve-getEndParam vlaobj) perim_obj (vlax-curve-getDistAtParam vlaobj param_end) ) appliquée ici sur le dernier élément créé.Après tu peux regarder ce qui a dans les variables, surtout perim_obj Sinon, en lisp, il y a aussi ;;; ;;; calculer la longueur d'un objet (defun longent (ent / obj R ANGDEP ANGFIN long) (setq obj (cdr (assoc 0 ent))) (cond ((= obj "LINE") (setq long (distance (cdr (assoc 10 ent))(cdr (assoc 11 ent)))) ) ((= obj "ARC") (setq R (cdr (assoc 40 ent))) (setq ANGDEP (cdr (assoc 50 ent))) (setq ANGFIN (cdr (assoc 51 ent))) (setq long (abs (* R (- ANGFIN ANGDEP)))) ) ((or (= obj "CIRCLE") (= obj "SPLINE") (= obj "POLYLINE") (= obj "LWPOLYLINE") (= obj "ELLIPSE")) (command "_.area" "_o" ent) (setq long (getvar "perimeter")) ) (T (setq long nil)) ) long ) Amicalement Zebulon_ [Edité le 21/12/2006 par zebulon_] C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
Invité ingoenius Posté(e) le 21 décembre 2006 Posté(e) le 21 décembre 2006 dejà merci , mais ...j'ai des questions je vois que ces fonctions vlax etc (que je connais pas sont trés puissantes) , plus puissant du autoliisp??? et c'est quoi au juste di vba? ca reste compatibles avec toutes le version d'autocad? il y a un livre de reference sur l'argument?? PS je suis pas presse pour les reponces ;-) PPS par contre si je selectionne un cercle la mesuration est incorrecte avec la metode (vba) ??? [Edité le 21/12/2006 par ingoenius]
Patrick_35 Posté(e) le 21 décembre 2006 Posté(e) le 21 décembre 2006 SalutAprès une recherche vite fait http://www.cadxp.com/modules.php?op=modload&name=XForum&file=viewthread&tid=12699#pid49906 http://www.cadxp.com/modules.php?op=modload&name=XForum&file=viewthread&tid=11961#pid46532 http://www.cadxp.com/modules.php?op=modload&name=XForum&file=viewthread&tid=8041#pid30149 @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
zebulon_ Posté(e) le 21 décembre 2006 Posté(e) le 21 décembre 2006 par contre si je selectionne un cercle la mesuration est incorrecte avec la metode (vba) ??? Dans la plupart des cas, dire que l'ordinateur fait une erreur cela veut dire qu'on a fait soit même 2 erreurs (y compris celle qui consiste à dire que l'ordinateur a fait une erreur). Sinon, ça s'appelle un bug.Les fonctions vlax-curve m'ont toujours donné l'impression de marcher correctement. Revérifie si c'est bien le cercle que tu as mesuré et pas autre chose. Amicalement Zebulon_ C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
Invité ingoenius Posté(e) le 29 décembre 2006 Posté(e) le 29 décembre 2006 avec quelque petite modif a vos precieux codes ici ma version , elle permet de choisir, soit tous les objet sur un layer , soit un selection d'objets sur tos les layers (defun C:misura () (setq scelta (strcase (getstring "\nLayer o Selecton? \nL o invio\n"))) (if (= scelta "L") (progn (setq LAY (car (entsel "\nChoisir un objet sur le layer "))) (setq LAYD (entget LAY)) ; estrae le informazioni della selezione (setq NLAY (cdr (assoc 8 LAYD))) ;estrae il nome del layer (setq ss (ssget "x" (list(cons 8 NLAY))));seleziona tutti gli oggetti sul layer scelto (setq tl 0.0) (setq n (1- (sslength ss))) (while (>= n 0) (setq ent (entget (setq itm (ssname ss n))) obj (cdr (assoc 0 ent)) l (cond ((= obj "LINE") (distance (cdr (assoc 10 ent))(cdr (assoc 11 ent)))) ((= obj "ARC") (* (cdr (assoc 40 ent)) (if (minusp (setq l (- (cdr (assoc 51 ent)) (cdr (assoc 50 ent))))) (+ pi pi l) l))) ((or (= obj "CIRCLE")(= obj "SPLINE")(= obj "POLYLINE") (= obj "LWPOLYLINE")(= obj "ELLIPSE")) (command "_.area" "_o" itm) (getvar "perimeter")) (T 0)) tl (+ tl l) n (1- n))) (alert (strcat "Longueur Totale " (rtos tl) " unités "));messaggio a schermo (princ) );fine scelta layer (if (/= SS nil) (progn (setq ss (ssget)) (setq tl 0.0) (setq n (1- (sslength ss))) (while (>= n 0) (setq ent (entget (setq itm (ssname ss n))) obj (cdr (assoc 0 ent)) l (cond ((= obj "LINE") (distance (cdr (assoc 10 ent))(cdr (assoc 11 ent)))) ((= obj "ARC") (* (cdr (assoc 40 ent)) (if (minusp (setq l (- (cdr (assoc 51 ent)) (cdr (assoc 50 ent))))) (+ pi pi l) l))) ((or (= obj "CIRCLE")(= obj "SPLINE")(= obj "POLYLINE") (= obj "LWPOLYLINE")(= obj "ELLIPSE")) (command "_.area" "_o" itm) (getvar "perimeter")) (T 0)) tl (+ tl l) n (1- n))) (alert (strcat "Longueur Totale " (rtos tl) " metres "));messaggio a schermo (princ) ))) );fine programma
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