jalna Posté(e) le 1 février 2006 Posté(e) le 1 février 2006 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 polylignesLe 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 DammeMon forum : http://plexus.forumactif.org/
MNT Posté(e) le 1 février 2006 Posté(e) le 1 février 2006 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.
jalna Posté(e) le 1 février 2006 Auteur Posté(e) le 1 février 2006 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 DammeMon forum : http://plexus.forumactif.org/
Tramber Posté(e) le 1 février 2006 Posté(e) le 1 février 2006 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 ./__\. (.°=°.)
bonuscad Posté(e) le 1 février 2006 Posté(e) le 1 février 2006 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
Tramber Posté(e) le 2 février 2006 Posté(e) le 2 février 2006 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 ./__\. (.°=°.)
bonuscad Posté(e) le 2 février 2006 Posté(e) le 2 février 2006 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
jalna Posté(e) le 2 février 2006 Auteur Posté(e) le 2 février 2006 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 DammeMon forum : http://plexus.forumactif.org/
Tramber Posté(e) le 2 février 2006 Posté(e) le 2 février 2006 C'est à dire ? Récupérer ? Mais le prog n'y touche pas.... Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
jalna Posté(e) le 2 février 2006 Auteur Posté(e) le 2 février 2006 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 DammeMon forum : http://plexus.forumactif.org/
Tramber Posté(e) le 2 février 2006 Posté(e) le 2 février 2006 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 ./__\. (.°=°.)
jalna Posté(e) le 2 février 2006 Auteur Posté(e) le 2 février 2006 Ok autant pour moi!! J'essaye demainEncore une question pour les unitésla mienne est en cmLe résultat est en mmQuel 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 DammeMon forum : http://plexus.forumactif.org/
jalna Posté(e) le 3 février 2006 Auteur Posté(e) le 3 février 2006 :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 DammeMon forum : http://plexus.forumactif.org/
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