alexandra34 Posté(e) le 10 octobre 2012 Partager Posté(e) le 10 octobre 2012 Bonjour, je réalise des métrés, grâce à un un programme Lisp que j'ai adapté et créé pour mon usage.Ce programme permet et demande : de sélectionner un calque, sélectionner un contour (je trace un rectangle ou une polyligne fermée), et de compter toutes les lignes et polylignes et lignes à l'intérieur de ce contour en enfin de me donner la longueur totale.Seulement la longueur donnée n'est pas toujours la même, si a mon écran je vois le contour avec les lignes et poly en entier il donne la bonne valeur,par contre si je fais un zoom écran et que je vois seulement quelques lignes dans le contour il va prendre en compte que les lignes entières visibles sur mon écranVoici dans le cas ou il prend en compte toutes les lignes et polyEt voici le cas si je zoom, il prendra en compte que les deux traits du bas C'est quand meme très bizarre cette histoire! que le programme varie en fonction de ce que je vois à l'écran! Voici le début du lisp: (defun c:metrepoly (/ e len n e1) (vl-load-com) (setq e (entget (car (entsel "\nselectionner un contour de selection ")) ) ) ;obtenir la liste de l'entité (setq len (length e)) ;longueur de la liste (setq n 0) (setq liste nil) ;compteur à zero (repeat len ;répéter pour chaque élément de la liste (setq e1 (car (nth n e))) ;prendre chaque élément de la liste et en retirer le code (1er item) (if (= e1 10) ;tester le code 10 (progn ;si c'est le groupe 10 alors faire (terpri) ;nouvelle ligne (princ (cdr (nth n e))) (setq liste (cons (cdr (nth n e)) liste)) ;écrire les coordonnées ;(princ (cadr (nth n e))) écrit les valeurs de x ;(princ (caddr (nth n e))) écrit les valeurs de y ; (nth n e) : sort l'élement n de la liste e (n = 0,1,2 ...) ) ;fin progn ) ;fin if (setq n (1+ n)) ;incrémenter le compteur ) ;fin repeat (setq LI (entsel " \nSélectionner un élément sur un calque ")) (setq NomEntite (car LI)) (setq LISTEsel (entget NomEntite)) (setq calc (cdr (assoc 8 listesel))) ;selectionne dans liste les volumes du calque (setq liste_selection1 (ssget "_WP" liste (list (cons 0 "line,LWPOLYLINE") (cons 8 calc)) ) ) (setq nombre (sslength liste_selection1)) (setq indice 0) (setq longtotal1 0) (repeat nombre (setq ent1 (ssname liste_selection1 indice)) (setq long (vlax-get-property (vlax-ename->vla-object ent1) 'length ) ) (setq longtotal1 (+ longtotal1 long)) (setq indice (1+ indice)) ;(setq nbrepl (/ longtotal1 1.2)) ; nombre de plaques ) (alert (strcat "La longueur totale du mur du calque " calc " est de " (rtos longtotal1 2 2) " m" ) )) Merci d'avance si vous trouvez une solution à ce problème! Lien vers le commentaire Partager sur d’autres sites More sharing options...
-Olivier- Posté(e) le 10 octobre 2012 Partager Posté(e) le 10 octobre 2012 Bonjour Alexandra34, Je ne suis pas spécialiste, mais il me semble que SSGET avec l'option WP sélectionne uniquement les objets visibles lors de la sélection. En ajoutant un zoom objet sur ta polyligne puis un zoom précédent tu dois pouvoir régler ton problème. Olivier Lien vers le commentaire Partager sur d’autres sites More sharing options...
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