Aller au contenu

Region vers polyligne le retour


Invité Sylvainhinard

Messages recommandés

Invité Sylvainhinard
Posté(e)

Bonjour,

 

Suite à vos conseils à tous, j'ai reussis à me mettre au LISP (enfin). J'ai commencé par un programme qui transforme les regions en polyligne. Je voudrais que mon programme se répéte en boucle jusqu'a ce qu'il n'y ait plus de region dans mon dessin:

 

(defun c:regpol ( / region a ent regionexp regionexp1 regionexp2 calqueorigine); définition des variables

(setq region (ssget "_X" '((0 . "REGION")))); sélectionne les regions, les enregistre dans la variable "region"

(setq a (ssname region 0)); prend la premiere entité de la liste "region et enregistre son nom dans "a"

(setq ent (entget a)); enregistre la liste définissant l'entité "a" dans "ent"

(setq calqueorigine (cdr(assoc 8 ent ))); enregistre le calque d'origine de l'entité

(command "_.layer" "n" "afaire" "" ); crée un calque "afaire"

(setq ent (entmod (subst (cons 8 "afaire") (assoc 8 ent) ent))); met "ent" dans le calque "afaire"

(entupd (cdr (assoc -1 ent))); met à jour "ent"

(setq regionexp (ssget "_X" '((8 . "afaire"))));met dans "regionexp" toute les entités du calque "afaire"

(command "_.explode" regionexp ); explose les regions de "afaire"

(setq regionexp1 (ssget "_X" '((8 . "afaire"))));met dans "regionexp1" toute les entités du calque "afaire"

(command "pedit" "m" regionexp1 "" "o" "j" "" "");joint les polyligne de "regionexp1"

(setq regionexp1 (ssget "_X" '((8 . "afaire"))));met dans "regionexp1" toute les entités du calque "afaire"

(command "changer" regionexp1 "" "p" "ca" calqueorigine "")

(princ)

)

 

 

P.S.: Si vous avez des astuces pour que le programme soit mieux construit vous pouvez m'en faire part. Merci à tous

Posté(e)

Salut

Ta boucle, il faut que tu la fasses sur ton jeu de sélection grace à une incrémentation

 

tu défini pas exemple n à 0

(setq n 0)

puis ta boucle sur la valeur de a tant que a n'est pas nil

(while (setq a (ssname region [b]n[/b]))

Puis ton prog

et à la fin de

(command "changer" regionexp1 "" "p" "ca" calqueorigine "")

on incrémente de 1 dans le jeu de sélection et on ferme la boucle while

(command "changer" regionexp1 "" "p" "ca" calqueorigine "")
(setq n (1+ n))
)

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Un petit controle d'éléments, car le jour où tu ramasseras une spline dans tes éléments ca coincera au PEDIT.

 

Ou alors un filtre sup sur (ssget "_X" '((8 . "afaire")))pour enlever les splines et autres bout d'ellispes non PEDITables.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Invité Sylvainhinard
Posté(e)

Bonjour,

 

J'ai essayé de faire une boucle mais je pense que je me suis trompé. D'où vient mon erreur ?

 

;************************PROGRAMME PERMETTANT DE TRANSORMER LA REGION EN POLYLIGNE*******************************

(defun c:regpol ( / region a ent regionexp regionexp1 regionexp2 calqueorigine); définition des variables

(setq region (ssget "_X" '((0 . "REGION")))); sélectionne les regions, les enregistre dans la variable "region"

(setq a (ssname region 0)); prend la premiere entité de la liste "region et enregistre son nom dans "a"

(setq ent (entget a)); enregistre la liste définissant l'entité "a" dans "ent"

(setq calqueorigine (cdr(assoc 8 ent ))); enregistre le calque d'origine de l'entité

(command "_.layer" "n" "afaire" "" ); crée un calque "afaire"

(setq ent (entmod (subst (cons 8 "afaire") (assoc 8 ent) ent))); met "ent" dans le calque "afaire"

(entupd (cdr (assoc -1 ent))); met à jour "ent"

(setq regionexp (ssget "_X" '((8 . "afaire"))));met dans "regionexp" toute les entités du calque "afaire"

(command "_.explode" regionexp ); explose les regions de "afaire"

(setq regionexp1 (ssget "_X" '((8 . "afaire"))));met dans "regionexp1" toute les entités du calque "afaire"

(command "pedit" "m" regionexp1 "" "o" "j" "" "");joint les polyligne de "regionexp1"

(setq regionexp1 (ssget "_X" '((8 . "afaire"))));met dans "regionexp1" toute les entités du calque "afaire"

(command "changer" regionexp1 "" "p" "ca" calqueorigine "")

(princ)

)

;

;

;*********************************************BOUCLE************************************************************

(defun c:boucle ( / region )

(setq region (ssget "_X" '((0 . "REGION"))))

(while (/= region nil ))

(regpol)

(princ)

)

 

 

 

Merci pour votre aide

Posté(e)

La boucle est faites dans c:regpol et de plus, tu ne fais pas un (setq a (ssname region 0)), mais un (setq a (ssname region n)) ou n est la variable à incrémenter. Au début elle à la valeur 0

Ta boucle doit commencer juste après ta sélection (setq region (ssget "_X" '((0 . "REGION"))))

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

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é