Aller au contenu

Calcul d\'aire par sélection...


jalna

Messages recommandés

Bonjour...

Suite à une de mes demande j'ai récuperé un Lisp de MNT.

 

 

(defun c:stot ( / gr tot cont)

(setvar "cmdecho" 0)

(prompt "\nChoisir les polylignes ....")

(setq gr (ssget))

(setq tot 0 cont 0)

(repeat (sslength gr)

(command "_area" "_o" (ssname gr cont))

(setq tot (+ tot (getvar "area")))

(setq cont (+ 1 cont))

)

(princ "\nSurface totale: ")

(princ tot)

(princ)

)

 

 

Cela fonctionne tres bien mais j'ai eu un problème car j'ai eu un cas avec deux polylignes les unes sur les autres (donc le résultat était inexacte, vous medirez c'est la faute du déssinateur..)

Ma question est :

Serait t'il possible de transformer les polilygnes temporairement en région d'en faire une union de ses polylignes sélectionnées et de donner le résultat (voir dans une boite de dialogue tout en sachant que mon unitée est le cm.)

Et ensuite annuler pour revenir à des polylignes

Le fait d'en faire une union me permet de ne plus avoir d'erreur!!

Si je vous demande de l'aide c'est que mes connaissances en lisp sont (comment dire) tres limitée.....

:P Alors merci d'avance pour vos réponses

"Je suis fasciné par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre... Et les avions aussi... En même temps l'air tu peux pas le toucher... Ca existe et ça existe pas... Ca nourrit l'homme sans qu'il ait faim... It's magic ! L'air c'est beau en même temps tu peux pas le voir, c'est doux et tu peux pas le toucher... L'air, c'est un peu comme mon cerveau..."

J-C Van Damme

Lien vers le commentaire
Partager sur d’autres sites

Salut Jalna

 

En effet attention au doublon

 

une solution est d'utiliser la commende "OVERKILL" des express pour supprimer les doublons

 

mais même avec ça je préfère sélectionner les entités une par une pour plus de sécurité

 

Je pense plutot à modifier le lisp pour qu'il ignore les doublons dans le résultat

 

@+

 

PS: Je ne suis pas l'auteur de ce lisp que j'avais récupéré sur le forum d'Autodesk,je 'lispsouille" tout au plus.

Le Hamac est une science exacte qui ne tolère pas l'amateurisme.

Lien vers le commentaire
Partager sur d’autres sites

Merci de ta réponse MNT!!

Dans un premier temps je vais proceder de cette maniere!!

Bonne journée!!

"Je suis fasciné par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre... Et les avions aussi... En même temps l'air tu peux pas le toucher... Ca existe et ça existe pas... Ca nourrit l'homme sans qu'il ait faim... It's magic ! L'air c'est beau en même temps tu peux pas le voir, c'est doux et tu peux pas le toucher... L'air, c'est un peu comme mon cerveau..."

J-C Van Damme

Lien vers le commentaire
Partager sur d’autres sites

Dans l'esprit, je te propose autre chose :

 

Faire une région totale avec UNION, du coup, pas de doublons

 

(defun c:stot ( / gr tot cont)
 (prompt "\nChoisir les polylignes ....")
 (setq gr  (ssget  '((0 . "LWPOLYLINE"))) )
 (setq tot 0 cont 0)
 (setq ent1(vlax-ename->vla-object(ssname gr cont)))
 (if(=(vla-get-closed ent1):vlax-true)
   (progn
     (command "_region" (ssname gr cont)"")
     (setq ent1(entlast))
     (if(=(vla-get-ObjectName(vlax-ename->vla-object(entlast)))"AcDbRegion")
(progn
  (repeat(1- (sslength gr))
    (setq cont (+ 1 cont))
    (setq ent2(vlax-ename->vla-object(ssname gr cont)))
    (if(=(vla-get-closed ent2):vlax-true)
      (progn
	(command "_region" (ssname gr cont)"")
	(if(=(vla-get-ObjectName(vlax-ename->vla-object(entlast)))"AcDbRegion")
	  (progn
	    (command "_union" ent1 (entlast)"")
	    )))))))))
 (if(=(vla-get-ObjectName(vlax-ename->vla-object ent1))"AcDbRegion")
   (progn
     (alert(strcat "\nSurface totale: "(VL-PRINC-TO-STRING(vla-get-Area(vlax-ename->vla-object ent1)))))
     (command "_Erase" ent1 ""))
   (princ"\Pas de résultat")
   )
 (princ)
 )

 

Le code necessite de saisir au moins 2 polys fermées.

Attention, mal protégé si une poly a des segments croisés qui empecherait la création d'une région.

 

Mettre DELOBJ à 0 !

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

Une forme d'appel à (ssget) est interessante pour régler ce problème de sélection multiple.

 

C'est l'option :S (Single/Simple)

 

Ex : (entget (ssname (ssget "_:S") 0))

 

Tu peut noter que dans ce cas on peut utiliser directement (ssname) avec un index 0 (puisqu'il n'y a qu'une seule entité dans le jeu de séléction)

 

Rappel une entité ne peut se trouver qu'une fois dans un jeu de sélection sauf exeception par l'usage d'une option non documentée, l'option :D (Double)

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Là, ca n'est pas le problème d'une selection multiple mais d'entités multiples qui décrivent la même surface.

 

Grâce à l'union, il n'y aura plus de doublons de surface. Et le filtre de ssget permet de prendre indifféremment d'autres objets sans biaiser le calcul.

 

Si j'ai bien compris le souhait.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

Ma réponse était destinée à Jalna pour modifier légèrement le lisp de MNT.

 

Sur ton code le problème ne se pose pas en effet.

 

Excuse du quiproquo ;)

 

Le problème est que la sélection dans ce cas ne pourras être multiple comme auparavant et donc vite fastidieux :mad:

 

Donc les autres solutions ont leurs intérêts

 

[Edité le 2/2/2006 par bonuscad]

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Ok jsuis d'accord pour l'union vu que cela était mon souhait (voir 1er message)

:o mais j'aimerais récuperer mes polilygnes....

Merci de votre aide

"Je suis fasciné par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre... Et les avions aussi... En même temps l'air tu peux pas le toucher... Ca existe et ça existe pas... Ca nourrit l'homme sans qu'il ait faim... It's magic ! L'air c'est beau en même temps tu peux pas le voir, c'est doux et tu peux pas le toucher... L'air, c'est un peu comme mon cerveau..."

J-C Van Damme

Lien vers le commentaire
Partager sur d’autres sites

C'est à dire ?

 

Récupérer ? Mais le prog n'y touche pas....

 

Ben chez moi il m'éfface les polylignes apres les avoir transformés en régions!! (en fait les régions)

Si je reviens en arriere et que je retrouve mes polylignes et que je fais proprietes je trouve bien des régions unifiées!!

 

Est-ce normal??

Merci et bonne soirée

 

"Je suis fasciné par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre... Et les avions aussi... En même temps l'air tu peux pas le toucher... Ca existe et ça existe pas... Ca nourrit l'homme sans qu'il ait faim... It's magic ! L'air c'est beau en même temps tu peux pas le voir, c'est doux et tu peux pas le toucher... L'air, c'est un peu comme mon cerveau..."

J-C Van Damme

Lien vers le commentaire
Partager sur d’autres sites

Mettre DELOBJ à 0 !

 

J'avais prévenu :cool:

 

(defun c:stot ( / )
(setq *delobj*(getvar "DELOBJ"))
(setvar "DELOBJ" 0)
(prompt "\nChoisir les polylignes ....")
(setq gr (ssget '((0 . "LWPOLYLINE"))) )
(setq tot 0 cont 0)
(setq ent1(vlax-ename->vla-object(ssname gr cont)))
(if(=(vla-get-closed ent1):vlax-true)
(progn
(command "_region" (ssname gr cont)"")
(setq ent1(entlast))
(if(=(vla-get-ObjectName(vlax-ename->vla-object(entlast)))"AcDbRegion")
(progn
(repeat(1- (sslength gr))
(setq cont (+ 1 cont))
(setq ent2(vlax-ename->vla-object(ssname gr cont)))
(if(=(vla-get-closed ent2):vlax-true)
(progn
(command "_region" (ssname gr cont)"")
(if(=(vla-get-ObjectName(vlax-ename->vla-object(entlast)))"AcDbRegion") (progn
(command "_union" ent1 (entlast)"")
)))))))))
(if(=(vla-get-ObjectName(vlax-ename->vla-object ent1))"AcDbRegion")
(progn
(alert(strcat "\nSurface totale: "(VL-PRINC-TO-STRING(vla-get-Area(vlax-ename->vla-object ent1)))))
(command "_Erase" ent1 ""))
(princ"\Pas de résultat")
)
(setvar "DELOBJ" *delobj*)
(princ)
)

 

Vite fait

 

[Edité le 2/2/2006 par Tramber]

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

Ok autant pour moi!!

J'essaye demain

Encore une question pour les unités

la mienne est en cm

Le résultat est en mm

Quel est la conversion en language lisp pour avoir mon unité en résultat!!

Encore merci

 

"Je suis fasciné par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre... Et les avions aussi... En même temps l'air tu peux pas le toucher... Ca existe et ça existe pas... Ca nourrit l'homme sans qu'il ait faim... It's magic ! L'air c'est beau en même temps tu peux pas le voir, c'est doux et tu peux pas le toucher... L'air, c'est un peu comme mon cerveau..."

J-C Van Damme

Lien vers le commentaire
Partager sur d’autres sites

:D Ok super!!

Merci Tramber!!

Il me rste plus qu'a convertir l'unitée pour avoir mes m²!!

Encore merci!!

:P Bon week-end

"Je suis fasciné par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre... Et les avions aussi... En même temps l'air tu peux pas le toucher... Ca existe et ça existe pas... Ca nourrit l'homme sans qu'il ait faim... It's magic ! L'air c'est beau en même temps tu peux pas le voir, c'est doux et tu peux pas le toucher... L'air, c'est un peu comme mon cerveau..."

J-C Van Damme

Lien vers le commentaire
Partager sur d’autres sites

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é