Aller au contenu

Lisp pour transférer les entités du calque 0 sur un calque _rest0


Messages recommandés

Posté(e)

Je recherche un petit lisp qui permet de transferer automatiquement toutes les entités d'un dessins se trouvant dans le calque 0 dans un calque _rest0. ( le nom de la couche peut être différent , pas de problème).

Est ce que quelqu'un d'entre vous aurait ça ?

Merci

Phil

Auteur du logiciel Autospeed

Auteur de la théorie du site www.kheops.biz

Auteur de nombreux livres

Posté(e)

 

Hello

 

Une petite piste pour commencer :

(ssget "_X" '((8 . "0")))

Pour selectionner TOUS les objets sur le calque ZERO

 

Si tu fais "derriere" en ligne de commande :

un EFFACER P (comme selection precedente)

ou

un CHPROP P (comme selection precedente)

option calque ...

 

Cela devrait t'aider un peu !

 

Le Decapode

 

 

 

Autodesk Expert Elite Team

Posté(e)

Bonjour,

 

En lisp

(defun c:goto (/)

(if (setq selcalque0 (ssget "_x" '((8 . "0") (-4 . "") (-4 . "NOT>"))))
(progn
(command "-calque" "e" "_REST0" "")

(command "_chprop" selcalque0     ""	 "ca"	   "_REST0"	"")
)


(princ "\nLe calque zero est vide")

) 
(princ)
)  

 

les objets en espace papier sont ignoré

sans gestion d'erreurs

 

[Edité le 21/2/2011 par Fraid]

Posté(e)

En général je crée un calque _rest0 , je le rends courant , je trace une ligne , je fais un filtre pour sélectionner le calque 0 puis un petit coup de pinceau a propriétés ..

Ce que je cherche c'est un lisp qui le fait en automatique .. manuellement c'est faisable mais c'est chiant quand on a 35 plans a traiter.

Auteur du logiciel Autospeed

Auteur de la théorie du site www.kheops.biz

Auteur de nombreux livres

Posté(e)
Bonjour,

 

En lisp

(defun c:goto (/)

(if (setq selcalque0 (ssget "_x" '((8 . "0") (-4 . "") (-4 . "NOT>"))))


(command "_chprop" selcalque0     ""	 "ca"	   "nomducalque"	"")


(print "\nLe calque zero est vide")

) 
(princ)
)  

 

les objets en espace papier sont ignoré

sans gestion d'erreurs[Edité le 21/2/2011 par Fraid]

 

[Edité le 21/2/2011 par Fraid]

 

J'ai oublié de préciser un truc , il faudrait que cela crée le calque _rest0 si il n'existe pas

Auteur du logiciel Autospeed

Auteur de la théorie du site www.kheops.biz

Auteur de nombreux livres

Posté(e)

 

Hello

 

Tu peux ajouter cette ligne en 2eme position :

 

(command "-calque" "e" "_REST0" "")

 

Ca devrait faire ...

 

Le Decapode

 

 

Autodesk Expert Elite Team

Posté(e)

Salut,

 

Même si je pense que ce genre de demande ne nécessite pas un LISP (Sélection rapide + palette Propriétés devraient suffire), je donne un petit truc aux LISPeurs :

La fonction entmod (comme entmake), créera automatiquement le calque s'il n'existe pas.

 

((lambda (/ ss n elst)
  (if (setq ss (ssget "_X" '((8 . "0") (0 . "~VIEWPORT"))))
    (repeat (setq n (sslength ss))
      (setq elst (entget (ssname ss (setq n (1- n)))))
      (entmod (subst (cons 8 "rest_0") (assoc 8 elst) elst))
    )
  )
)
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Bon , la j'ai tout un tas de petits bouts de lisp ... quelqu'un pourrait-il les mettre bout à bout pour avoir le résultat suivant

 

je charge le lisp goto

 

je tape goto

 

le lisp crée un calque _rest0 s'il n'existe pas encore puis transfert tout ce qui se trouve dans le calque 0 dans le calque _rest0

 

end :-)

Auteur du logiciel Autospeed

Auteur de la théorie du site www.kheops.biz

Auteur de nombreux livres

Posté(e)

Bonjour à toutes et tous,

 

ça marche mais,...

 

(defun c:goto (/)

((lambda (/ ss n elst)

  (if (setq ss (ssget "_X" '((8 . "0") (0 . "~VIEWPORT"))))

    (repeat (setq n (sslength ss))

      (setq elst (entget (ssname ss (setq n (1- n)))))

      (entmod (subst (cons 8 "rest_0") (assoc 8 elst) elst))

    )

  )

)

)
(command "_chprop" selcalque0     ""	 "ca"	   "nomducalque"	"")





(print "\nLe calque zero est vide")



) 

(princ) 

 

 

En ligne de commande =>

 

Commande: goto

Commande inconnue "GOTO". Appuyez sur F1 pour obtenir de l'aide.

Commande inconnue "CA". Appuyez sur F1 pour obtenir de l'aide.

Commande inconnue "NOMDUCALQUE". Appuyez sur F1 pour obtenir de l'aide.

Commande inconnue "GOTO". Appuyez sur F1 pour obtenir de l'aide.

 

"\nLe calque zero est vide" "\nLe calque zero est vide"

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Posté(e)

Re,

 

C'est mieux, mais je n'arrive pas avoir le message en fin de commande "Le calque zero est vide" sauf sur la ligne de commande,...

 

 (defun c:goto (/)

((lambda (/ ss n elst)

  (if (setq ss (ssget "_X" '((8 . "0") (0 . "~VIEWPORT"))))

    (repeat (setq n (sslength ss))

      (setq elst (entget (ssname ss (setq n (1- n)))))

      (entmod (subst (cons 8 "rest_0") (assoc 8 elst) elst))

    )

  )

)

)


(print "\nLe calque zero est vide")



)

(princ)

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Posté(e)

Merci Gile,

je ne pense pas assez a entmak et entmod qui sont plus rapide

 

(defun c:goto (/ ss elst n)

(if (setq ss (ssget "_X" '((8 . "0") (0 . "~VIEWPORT"))))

    (repeat (setq n (sslength ss))

      (setq elst (entget (ssname ss (setq n (1- n)))))

      (entmod (subst (cons 8 "rest_0") (assoc 8 elst) elst))

    )
(princ "\nLe calque zero est vide")

) 
(princ)
) 

 

[Edité le 21/2/2011 par Fraid]

Posté(e)

Re,

 

Tiens ?

 

Quel est ce miracle ?

 

J'ai retesté =>

 

Commande: (LOAD "C:/Users/Lilian/Desktop/goto.lsp") C:GOTO

Commande: goto

Commande:

 

Le lisp fait bien ce qu'on attend de lui mais je n'ai pas le message alors que sur tmon premier bidouillage (Réponse N° 9), 'j'ai ça => (d'ailleur pourquoi je vois le "n" en début ?)

 

http://img.ahst.fr/data/images/goto.jpg

 

Merci encore,

 

PS : Pour autospeed :

Le lisp à charger est celui deFraid (Réponse N°9)

 

Désolé de "polluer" ton post, mais je profite de ce genre de demande pour comprendre les "bases" du lisp,Merci de ta compréhension, ;)

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Posté(e)

 
(defun c:goto (/ ss elst n)



(if (setq ss (ssget "_X" '((8 . "0") (0 . "~VIEWPORT"))))

(progn

    (repeat (setq n (sslength ss))



      (setq elst (entget (ssname ss (setq n (1- n)))))



      (entmod (subst (cons 8 "rest_0") (assoc 8 elst) elst))
    )
      (command "-calque" "co" "8"  "rest_0" "")
)

(princ "\nLe calque zero est vide")


) 

(princ)

)

 

je suis encore bien accroché au command :P

 

je regarde comment on fait avec entmod ce soir

Posté(e)

Re,

 

Dernière version, chez moi =>

 

Commande: goto

-calque

Calque courant: "0"

Entrez une option

[?/Etablir/CHoisir/Nouv/Renommer/ACtif/INactif/COuleur/TLigne/EPaisseurl/TRANspa

rence/MAtériau/Tracé/Geler/Libérer/Verrouiller/Déverrouiller/étAt/deScription/RA

pprocher]: co

Nouvelle couleur [coUleursvraies/CArnet de couleurs] : 8

Entrez la liste de noms des calques pour la couleur 8 : rest_0 Entrez une

option

[?/Etablir/CHoisir/Nouv/Renommer/ACtif/INactif/COuleur/TLigne/EPaisseurl/TRANspa

rence/MAtériau/Tracé/Geler/Libérer/Verrouiller/Déverrouiller/étAt/deScription/RA

pprocher]:

Commande:

 

Toujours pas de commentaires au bout de la souris,...

 

(Bon ceci dis, c'est pas super grave, je voulais juste savoir pourquoi,...)

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Posté(e)

Lilian,

 

Le LISP utilise une expression (if ...) qui :

- si la condition est remplie (à savoir le jeu de sélection d'entité sur le calque 0 n'est pas vide) change le calque de ces entités et met le calque "rest_0" en couleur 8 ;

- si la condition n'est pas remplie affiche un message comme quoi le calque 0 est vide.

 

C'est le fonctionnement de if en LISP : (if (condition) (then_expression) (else_expression))

 

À voir le retour que tu as en ligne de commande, les échos de la commande "-calque" pour changer la couleur du calque "rest_0", c'est que la condition a été remplie. Il est donc normal que tu n'aies pas le message : "Le calque zero est vide".

 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Bonjour à toutes et tous,

 

Merci Gilles,

 

Ah oui, OK pour l'extrait de ligne de commande posté ci -dessus !

 

Mais lorsque le calque "0" est vide.

 

Ce que je ne comprend pas c'est pourquoi je l'ai en ligne de commande

 

Commande: (LOAD "C:/Users/Lilian/Desktop/goto.lsp") C:GOTO

 

Commande: goto

 

Le calque zero est vide

 

Mais pas au bout de ma souris comme sur l'image postée précédemment ?

 

(if (condition) (then_expression) (else_expression))

 

Peux-tu développer un peu STP ?

 

Merci encore,

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

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é