doua Posté(e) le 12 mai 2006 Posté(e) le 12 mai 2006 salut j'ai fait un programme pour avoir un liste de materiel, alorsles problèmes que j'ai rencontrés sont : 1) quand jel'exécute il me donne une erreur j'ignore pourquoi?? " Commande: _appload nommat.LSP correctement chargé(s)Commande: nmat25; erreur: type d'argument incorrect: lselsetp nil voilà mon prog: je travail avec des calques, et mes équipement sont fait en wbloc avec attribut. (defun c:nmat (/ tmp II) ;recherche de tous des calques (setq tmp (tblnext "LAYER" t)) (setq ll ()) (setq paire ()) (setq listenom ()) ; renvoie de toute la liste des calques vers nomcalq (setq nomcalq (cdr (assoc 2 tmp))) ;remplir une condition (if (and (= (substr nomcalq 1 1) "0") (= (testnom nomcalq) "numerique") (/= nomcalq "0") (/= nomcalq "000")) ;si ok affecter la liste à ll (setq ll (list nomcalq)) ) ;faire ce traitement en boucle (while (setq tmp (tblnext "LAYER")) (setq nomcalq (cdr (assoc 2 tmp))) (if (and (= (substr nomcalq 1 1) "0") (= (testnom nomcalq) "numerique") (/= nomcalq "0") (/= nomcalq "000")) (setq ll (cons nomcalq ll)) ) ) ;(princ ll) ;nombre de calque trouver (setq ncalq (length ll)) (princ ncalq) (setq compt 0) (repeat ncalq ; affectation du n ème élement de la liste ll vers ncalque (setq ncalque (nth compt ll)) ; traitement d'attribut (setq jeu (ssget "x" (list (cons 0 "insert")(cons 2 "Lis*")(cons 8 ncalque)))) ;(princ jeu) (setq nbc (sslength jeu )) ;(princ nbc) (setq compte 0) (repeat nbc ;(princ nbc) (setq bl (ssname jeu compte)) ;(princ bl) (setq att (entnext bl)) (setq cle_0 (cdr (assoc 0 (entget att)))) ;exécuter ce traitement tant que cle_0 n'a pas atteint le dernier attrib (while (/= cle_0 "SEQEND") (setq cle_1 (assoc 1 (entget att))) (setq cle_2 (assoc 2 (entget att))) (if (= (cdr cle_2) "NOM") (progn (setq nomequip (cdr cle_1)) ) ) (if (= (cdr cle_2) "DES") (progn (setq design_equip (cdr cle_1)) ) ) (setq att (entnext att)) (setq cle_0 (cdr (assoc 0 (entget att)))) ) (setq compte (+ 1 compte)) (princ design_equip) ) (setq paire ()) (setq paire (list nomequip design_equip)) (setq listenom (cons paire listenom)) (setq compt (+ 1 compt)) ) (setq nblistenom (length listenom)) (setq i 0) (setq listfol ()) (repeat nblistenom (setq text1 (car(nth i listenom))) (setq listfol (cons text1 listfol)) (setq i (+ 1 i)) ) ; trier dans l'ordre alphabétique une liste de chaine (setq listfol (acad_strlsort listfol)) ;;***************************************** (setq i 0) (setq listenomtr ()) (repeat nblistenom (setq nommat (nth i listfol)) (setq titre (cadr (assoc nommat listenom))) (setq paire ()) (setq paire (list nommat titre)) (setq listenomtr (cons paire listenomtr)) (setq i (+ 1 i)) ) ; renoie de la liste avec ces elements inversés (setq listenom (reverse listenomtr)) ;;****************************************** ; pour activer un calque spécifier (setq clq_anc (getvar "CLAYER")) (if (/= clq_anc "023") (progn (command '"calque" "L" "023" "") (setvar "CLAYER" "023") (command '"calque" "G" clq_anc "") ) ) ;;****************************************** ; pour ecrire dans une coordonée en l'incrémentant (setq i 0) (repeat nblistenom (setq text1 (car(nth i listenom))) (setq text2 (cadr(nth i listenom))) (setq xif 29.8729) (setq xit 85.0348) (setq yif (- 261.8074 (* 4.9 i))) (setq yit (- 261.8074 (* 4.9 i))) (setq ptif (list xif yif)) (setq ptit (list xit yit)) ; pour désactiver l'accrochage objet (setvar "CMDECHO" 0) (setq osmode_anc (getvar "OSMODE")) (setvar "OSMODE" 0) (command "_text" ptif "" "" text1 ) (command "_text" ptit "" "" text2 ) ; pour activer l'accrochage objet (setvar "OSMODE" osmode_anc) (setvar "CMDECHO" 1) (setq i (+ 1 i)) ) (command "_regen") ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun testnom (nomc) (setq test "numerique") (setq i 1) (setq longnom (strlen nomc)) (repeat longnom (setq caract (substr nomc i 1)) (if (and (/= caract "0") (/= caract "1") (/= caract "2") (/= caract "3") (/= caract "4") (/= caract "5") (/= caract "6") (/= caract "7") (/= caract "8") (/= caract "9")) (setq test "non numerique") ) (setq i (+ i 1)) ) test ) merci pour votre aide
bonuscad Posté(e) le 12 mai 2006 Posté(e) le 12 mai 2006 L'inconvenient de ton code, est qu'il est écrit pour un environnement bien précis (calques, blocs etc..), donc difficile à tester si l'on est pas exactement dans les mêmes conditions. Cependant ; erreur:type d'argument incorrect: lselsetp nil provient certainement de la ligne: (setq nbc (sslength jeu ))En effet on ne peut obtenir la longueur d'une sélection vide, tu dois d'abords t'assurrer que le jeux de sélection est valide avant de demander le nombre d'éléments qu'il contient. Voilà pour le message d'erreur lselset qu'on peut interpréter comme suit "l"= length (longueur)"sel" = select (sélection) "set"=set (déclaration) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
doua Posté(e) le 12 mai 2006 Auteur Posté(e) le 12 mai 2006 merci bonuscad, pour ton aide et aussi l'explication de l'erreur, maintenant je comprend ça signification merci encors ! je vais vérifier mnt et te tiendrai au courant !! doua
doua Posté(e) le 12 mai 2006 Auteur Posté(e) le 12 mai 2006 RE , j'ai tester le programme et ça marche toujour pas ! je crois lorsque je lui donne le nom des attributs qui commence par "List*" il la reconnaît pas car j'ai vu dans un livre de programmation quand on fait comme ça : (setq jeu (ssget "x" (list (cons 0 "insert")(cons 2 "List*")(cons 8 ncalque)))) il va chercher tout les attributs qui commence par "List*" enfin je ne comprend vraiment pas !?? si vous avez une idée !! merci de votre aide !! douaamicalement
Tramber Posté(e) le 12 mai 2006 Posté(e) le 12 mai 2006 Impossible.Il faut balayer tes entités à l'intérieur du bloc Tentes plutot : (setq jeu (ssget "x" (list (cons 0 "insert")(cons 2 "CARTOUCHE*")))) (setq entite (ssname jeu 5)listatt nil) (while (setq entite (entnext entite)) (if (= (CDR (assoc 0 (entget entite))) "ATTRIB") (setq contenu(entget entite)listatt(append listatt(list(list(cdr(assoc 2 contenu))(cdr(assoc 1 contenu)))))))) listatt Attention, j'ai mis CARTOUCHE* En francais :Tant que des entités suivent je regarde si ces entités sont des attrib, et j'ajoute alors à la liste la paire de l'ASSOC 2 et 1 qui donnent le nom de l'attrib et sa valeur. [Edité le 12/5/2006 par Tramber] Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
doua Posté(e) le 15 mai 2006 Auteur Posté(e) le 15 mai 2006 :) bonjour Tramber, je te remercie pour ton interêt à mon problème ! en fait ce week-end j'ai pas travailler sur ce sujet , mais je vais tester aujourd'hui ça et je te tiendrai au courant ! ;) merci encors pour vous tous membres de ce super forum !! doua amicalement
doua Posté(e) le 15 mai 2006 Auteur Posté(e) le 15 mai 2006 salut tramber,j'ai tester ton programme il me donne comme ceci : mat((NOM V24) (DES Diodes 24VAC) (NOM HL25) (DES Voyant jaune + lampe 24VAC -50Hz) (X1 X1) (X2 X2) (NOM V25) (DES Diodes 24VAC) (NOM HL21) (DES Voyant vert + lampe 24VAC -50Hz) (X1 X1) (X2 X2) (NOM 1SB1D) (AMP ) (DES Boutton poussoir à fermeture - couleur Noir) (- ) (- ) (NOM 1SB2D) (AMP ) (DES Boutton poussoir à fermeture - couleur Noir) (- ) (- ) (NOM 2SB2B) (AMP ) (DES ) (- ) (- ) (NOM 2SB1B) (AMP ) (DES ) (- ) (- ) (NOM 1SB2A) (AMP ) (DES ) (- ) (- ) (NOM 1SB1A) (AMP ) (DES ) (- ) (- ) (NOM 1SB3A) (AMP ) (DES ) (- ) (- ) (NOM 2SB3B) (AR ) (- ) (- ) (NOM V23) (NOM V24) (NOM V25) (NOM V26) (NOM V27) (NOM V28) (NOM HL23) (B1 X1) (B2 X2) (NOM HL24) (B1 X1) (B2 X2) mais on faite moi il faut q'il me traite calque par calque pour qu'on fin de compte je me trouve avec : un tableau nomenclature de materiel par exemple : folio item designation 004 Q1 DISJONCTEUR (2x10A)004 Q2 DISJONCTEUR (2x20A)005 Q10 DISJONCTEUR (4x4A)etc.... on fait j'avais déja fait un programme pour la nomenclature des folioset ça marche bien j'ai pris ce dernier et j'ai modifier les étiquettes d'attribut à rechercher ça marche mais si je traite un calque bien spécifier exemple : (setq jeu (ssget "x" (list (cons 0 "insert")(cons 2 "List*")(cons 8 "004")))) mais si je lui donne la variable (ncalque) (setq jeu (ssget "x" (list (cons 0 "insert")(cons 2 "List*")(cons 8 ncalque)))) ça marche pas !! dites moi svp si je veux ajouter une autre recherche d'etiqutte d'attribut , est_ce q'il faut faire comme ça ou non car ça ce bloque aussi à ce niveau . (setq jeu (ssget "x" (list (cons 0 "insert")(cons 2 or "List*" "fol"))(cons 8 ncalque)))) merci infinnement pour votre aide précieuse!
Tramber Posté(e) le 15 mai 2006 Posté(e) le 15 mai 2006 Tu veux pas mettre ton DWG à dispo pour simplifier un peu notre aide. http://www.megaupload.com/fr/ou un autre. ton coup de la variable, ca peut marcher. Après il faut parcourir ton jeu. Dans mon code, il a un piège :(setq entite (ssname jeu 5)listatt nil) Je parcours l'entité 6 (1+5) du jeu, il faut boucler. JE vais regarder un peu ton code du début en attendant. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
doua Posté(e) le 16 mai 2006 Auteur Posté(e) le 16 mai 2006 Bonjour Tramber, on fait je connait pas la procedure pour envoyer un fichier sur cadxp !peut tu m'expliquer stp.ou bien si tu peux me donné un adresse e-mail ! merci encors doua
Tramber Posté(e) le 16 mai 2006 Posté(e) le 16 mai 2006 http://www.cadxp.com/modules.php?op=modload&name=XForum&file=misc&action=faq Pour stocker sur Internet, je te laisse te débrouiller. Ou alors ce soir à ab-cadAROBASEwanadoo.fr Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
doua Posté(e) le 16 mai 2006 Auteur Posté(e) le 16 mai 2006 Bonsoir Tramber, je t'ai envoyé le fichier dans cette adresse : ab-cad@wanadoo.fr j'espère que je me suis pas tromper ! :exclam: merci pour ton aide précieuse ! doua
doua Posté(e) le 18 mai 2006 Auteur Posté(e) le 18 mai 2006 :exclam: oh ! il ya personne qui peut m'aider à résoudre mon problème !!?? :( bon merci quand même A+ doua
Patrick_35 Posté(e) le 18 mai 2006 Posté(e) le 18 mai 2006 (setq jeu (ssget "x" (list (cons 0 "insert")(cons 2 "List*")(cons 8 ncalque))))il va chercher tout les attributs qui commence par "List*"Non, la sélection va se faire sur tous les blocs dont le nom commence par "List*"Si tu cherches les attributs ayant comme Etiquette "List*", il faut balayer la table des blocs pour retrouver le nom des blocs ou on peut retrouver "List*" et ensuite faire un jeu de sélection dans le dessin de ces blocs que l'on re-balaye pour faire ce que tu désiresA te lire, je ne saisi pas tout. Peut tu redonner une explication plus clair de ce que tu souhaites faire exactement :casstet: @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
doua Posté(e) le 19 mai 2006 Auteur Posté(e) le 19 mai 2006 desoler , je me suis pas connecter hier pour te répondre ! Si tu cherches les attributs ayant comme Etiquette "List*", il faut balayer la table des blocs pour retrouver le nom des blocs ou on peut retrouver "List*" et ensuite faire un jeu de sélection dans le dessin de ces blocs que l'on re-balaye pour faire ce que tu désireson fait oui je cherche des attributs qui portes une étiquette qui commence par "list*" tu sais comme je l'avais déja ecris dans mon message ( posté le 15/5/2006 à 18:47) ilme manque juste qlq chose dans mon programme que je ne sais pas dit patrik tu peux me donnée un adresse e-mail et je t'envoi le programme plus le fichier là je crois tu pourra comprendre ce que je veux stp Patrick, merci
Patrick_35 Posté(e) le 19 mai 2006 Posté(e) le 19 mai 2006 Salut Ok, à cette adresse Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
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