bbteddy Posté(e) le 13 janvier 2010 Posté(e) le 13 janvier 2010 Bonsoir,j'ai chercher , mais la je bloc et je comprend pas pourquoi ca ne marche pas : (defun c:net () (setq plan1 "ST_N_Poteaux BA Hach") (setq plan2 "ST_N_Indices") (setq selpoch (ssget "X" '((-4 . "")))) (command "ordretrace" selpoch "AR")) Si vous pouvez m'aider ça doit surement etre de la syntaxe !!! je pense Bonaller bonne soirée à demain
Carboleum Posté(e) le 13 janvier 2010 Posté(e) le 13 janvier 2010 le quote (') fait que AutoCAD considère la liste exactement comme tu l'as écrite, il ne l'évalue pas, il ne remplace donc pas tes variables par leur valeur. il faut utiliser la fonction list pour qu'il évalue l'entièreté de la liste et mettre les quotes sur chaque membres de la liste qu'il ne faut pas évaluer; et concernant les membres à évaluer tu dois les construire avec la fonction cons, ce qui donne: (setq selpoch (ssget "X" (list '(-4 . "")))) [Edité le 13/1/2010 par Carboleum] Carboléüm, qui dessine aussi à la main -> Carboleum's sketchblog
(gile) Posté(e) le 13 janvier 2010 Posté(e) le 13 janvier 2010 Salut, Quand on spécifie une liste avec une apostrophe : '(ele1 ele2 ele3), l'apostrophe est un raccourci pour la fonction LISP quote qui sert à ne pas évaluer l'expression. Donc, quand tu écrit : '((-4 . "")) aucune des paires pointées n'est évaluée, ni leur contenu, c'est à dire que plan1 et plan2 ne sont pas évalués et la liste ssget n'est pas valide. Il faudrait écrire : (list (-4 . "")) pour que les variables soient évaluées. Mais tu peux faire plus simple et plus efficace, d'abord en évitant de déclarer des variables (déclaration + évaluation) ensuite en utilisant le fait que dans une liste ssget, si la valeur de la paire pointée est de type chaîne, on peut en spécifier plusieurs séparés par des virgules.Essaye :(defun c: net (/ selpoch) (if (setq selpoch (ssget "X" '((8 . "ST_N_Poteaux BA Hach,ST_N_Indices")))) (command "ordretrace" selpoch "" "AR") ) (princ) ) Petites explications : - la variable selpoch est déclarée ceci a pour effet de limiter la portée de la variable à la fonction c:net et libérer la mémoire à la fin de son exécution. C'est d'autant plus important qu'il s'agit d'un jeu de sélection et que le nombre de jeux de sélection dans un dessin est limité à 128. - l'utilisation d'une expression (if ...) permet de ne lancer la commande que si le jeu de sélection existe réellement (qu'il y a bien des entités sur les calques spécifiés) et évite une erreur si ce n'était pas le cas. - (princ) en fin de routine évite d'avoir le retour de la dernière expression (ici nil) qui s'affiche en ligne de commande. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
vincentp010 Posté(e) le 14 janvier 2010 Posté(e) le 14 janvier 2010 Merci de m'avoir fait découvrir (-4 . "") , je ne connaissais pas et ça va me rendre service. Aide au téléchargement du cadastre dgfip-download-helper Insertion de photos géolocalisées exif https://www.dropbox.com/s/gkf6o9ac2hxen97/exifscr.zip?dl=0 Script correction BUG SPDC V2, propriétaire département 21 et 22 : https://greasyfork.org/scripts/442400-spdcv2/code/SPDCV2.user.js
bbteddy Posté(e) le 14 janvier 2010 Auteur Posté(e) le 14 janvier 2010 Bonsoir,j'ai chercher , mais la je bloc et je comprend pas pourquoi ca ne marche pas : (defun c:net () (setq plan1 "ST_N_Poteaux BA Hach") (setq plan2 "ST_N_Indices") (setq selpoch (ssget "X" '((-4 . "")))) (command "ordretrace" selpoch "AR")) Si vous pouvez m'aider ça doit surement etre de la syntaxe !!! je pense Bonaller bonne soirée à demain BonjourCette solution ne fonctionne pas il y a une erreur !!!
bbteddy Posté(e) le 14 janvier 2010 Auteur Posté(e) le 14 janvier 2010 le quote (') fait que AutoCAD considère la liste exactement comme tu l'as écrite, il ne l'évalue pas, il ne remplace donc pas tes variables par leur valeur. il faut utiliser la fonction list pour qu'il évalue l'entièreté de la liste et mettre les quotes sur chaque membres de la liste qu'il ne faut pas évaluer; et concernant les membres à évaluer tu dois les construire avec la fonction cons, ce qui donne: (setq selpoch (ssget "X" (list '(-4 . "")))) [Edité le 13/1/2010 par Carboleum] Celle ci me fait un truc bizard car il faut que j'appuis 2fois sur entrée pour finir l'action mais il marque aussi une erreurde ce type !!! Commande: net ordretrace Choix des objets: 6 trouvé(s) Choix des objets: AR *Sélection non valable* Attend un point ou Fenêtre/Dernier/Capture/BOîte/TOUT/Trajet/SPolygone/CPolygone/Groupe/Ajouter/Sup primer/Multiple/Précédent/annUler/AUto/uniQue ; erreur: Fonction annulée Choix des objets: Entrez une option de disposition d'objets [Dessus/dEssous/AVant/ARrière] : Commande:
(gile) Posté(e) le 14 janvier 2010 Posté(e) le 14 janvier 2010 Salut, Dans l'expression (command ...) il faut valider le jeu de sélection avec une chaîne vide "" comme quand tu fais Entrée à l'invite "Choix des objets: " (command "ordretrace" selpoch [surligneur]""[/surligneur] "AR") Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bbteddy Posté(e) le 16 juin 2010 Auteur Posté(e) le 16 juin 2010 Bonjour,je souhaiterai améliorer ce lisp : (defun c:net2 (/ selpoch plan1 plan2 col3) (setq plan1 "ST_N_Poteaux BA Hach") (setq plan2 "ST_N_Indices") (setq col3 (ssget '([surligneur]OBJETS DE COULEUR 11,13,15[/surligneur]))) (setq selpoch (ssget "X" (list '(-4 . "")))) (command "draworder" selpoch "" "AR" )) Voila je ne trouve pas le code surligner qui me sélectionnerai tous les éléments de couleur 11-13-15 MERCI d'avance
Patrick_35 Posté(e) le 17 juin 2010 Posté(e) le 17 juin 2010 Salut (ssget '(OBJETS DE COULEUR 11,13,15))) (ssget '((-4 . " (62 . 11) (62 . 13) (62 . 15) (-4 . "OR>")) ) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bbteddy Posté(e) le 17 juin 2010 Auteur Posté(e) le 17 juin 2010 Salut il me semblait l'avoir essayé celui-ci mais bon.....je vais retenter la chose merci @+
bbteddy Posté(e) le 17 juin 2010 Auteur Posté(e) le 17 juin 2010 J'ai un bug .....voila mon code, j'ai du faire un truc qui ne va pas !!!j'ai un message d'erreur : - ; erreur: valeur de liste SSGET incorrecteEt en plus il me demande de sélectionner des objets alors que je souhaite que ça opère sur tout le dessin . (defun c:net2 (/ selpoch plan1 plan2 col3) (setq plan1 "ST_N_Poteaux BA Hach") (setq plan2 "ST_N_Indices") (setq col3 (ssget '((-4 . "")))) (setq selpoch (ssget "X" (list '(-4 . "")))) (command "draworder" selpoch "" "AR" ))
(gile) Posté(e) le 17 juin 2010 Posté(e) le 17 juin 2010 Salut, (cons 8 col3) col 3 est un jeu de sélection, pas un nom de calque (type PICKSET au lieu de STR) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bbteddy Posté(e) le 18 juin 2010 Auteur Posté(e) le 18 juin 2010 bonjour Et donc je ne peut pas mélanger col3 avec les autres variables qui sont des calques ? ou c'est parce-que je m'y prend mal ? merci !
Patrick_35 Posté(e) le 18 juin 2010 Posté(e) le 18 juin 2010 Salut (ssget "x" (list (cons 8 (strcat plan1 "," plan2)) (cons -4 " (cons 62 11) (cons 62 13) (cons 62 15) (cons -4 "OR>") ) ) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 18 juin 2010 Posté(e) le 18 juin 2010 Le code groupe 8 est celui des calques, le code de groupe 62 celui des couleurs, etc.Regarde l'aide aux développeurs > Référence DXF. Si tu veux faire un seul filtre pour les calques et les couleurs (autrement dit sélectionner les objets sur les claques "ST_N_Poteaux BA Hach" et "ST_N_Indices" ou de couleur 11, 13, 15) tu peux tout grouper dans le même filtre :(ssget "_X" '((-4 . "")))Regarde dans l'aide aux développeurs la fonction LISP ssget et le lien tout en bas : Selection Set Filter Lists + les liens en bas de cette dernière page. EDIT : Patrick_35 a été plus rapide mais les deux filtres ne font pas la même chose.Patrick_35 : calques "ST_N_Poteaux BA Hach" ou "ST_N_Indices" ET couleur 11 ou 13 ou 15.(gile) : calques "ST_N_Poteaux BA Hach" ou "ST_N_Indices" OU couleur 11 ou 13 ou 15. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 18 juin 2010 Posté(e) le 18 juin 2010 Tiens, j'ai devancé (gile) Juste une remarque pour le filtre que j'ai indiqué et celui de (gile) Le mien fait une sélection sur les objets de couleurs 11,13 et 15 qui se situent sur les calques déterminésCelui de (gile) sélectionne tous les objets sur les calques déterminés ainsi que tous les objets de couleurs 11,13 et 15 Edit: (gile) a été plus rapide, mais les deux réponses se valent @+ [Edité le 18/6/2010 par Patrick_35] Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bbteddy Posté(e) le 18 juin 2010 Auteur Posté(e) le 18 juin 2010 Ouuffff merci à tous les deux je vais essayer de trier les infos.... MERCI @+
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