Aller au contenu

longuers polilignes lignes etc


Messages recommandés

Invité ingoenius
Posté(e)

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

 

Posté(e)

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)

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]

Posté(e)

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)

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 

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é