Aller au contenu

Probleme Ajout de lignes et polylignes dans un cadre


Messages recommandés

Posté(e)

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 écran

Voici dans le cas ou il prend en compte toutes les lignes et poly

post-39166-0-04300900-1349881749_thumb.jpg

Et voici le cas si je zoom, il prendra en compte que les deux traits du bas

post-39166-0-20311100-1349881984_thumb.jpg

 

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!

Posté(e)

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

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é