Aller au contenu

Morgul

Membres
  • Compteur de contenus

    126
  • Inscription

  • Dernière visite

Tout ce qui a été posté par Morgul

  1. Merci les gars pour vos réponses, c'est sympa. Mais, j'ai du mal m'exprimer, en fait je ne veux plus sélectionner manuellement. Je voudrais que le Lisp trouve tout seul les blocs. Du genre : (setq NomEntSel (ssget "X" (list (cons 2 "SYN_TAB*")))) Je n'arrive pas à remplacer les lignes suivantes pour que mon Lisp puisse continuer de fonctionner : (setq BlocSel (ssget)) (setq EntTamp (entget (ssname BlocSel 0))) (setq NomBloc (cdr (assoc 2 EntTamp))) Merci encore.
  2. Bonjour à Tous, J'ai enfin terminé mon Lisp de calcul de pertes de coax.. Toutefois, je ne suis pas satisfait de la manière dont on sélectionne les blocs. En effet, on doit sélectionner les blocs à la souris, je souhaiterai que ce soit automatique. Avec du genre : (setq NomEntSel (ssget "X" (list (cons 2 "SYN_TAB*")))) (setq NbEntSel (sslength NomEntSel)) (setq Cpt1 0) Il faut donc créer une boucle, mais ça fait longtemps que j'en ai pas fait et je suis un peu perdu. Voici mon Lisp actuel : (defun c:CalculPertes (/ NomLsp BlocSel EntTamp NomBloc DefBloc EntBloc loop Val_Lg Val_GSM Val_DCS Val_UMTS C1 C2 C3 bloc ent P1 P2 P3) (setq NomLsp "Calcul_Pertes") (princ (strcat "\n...Lancement du lisp \"" NomLsp "\".")) (princ "\n...Version...1") (princ "\n...") (princ "\n...") ; Début du programme (setq echo1 (getvar "cmdecho")) ; svg cmdecho (setvar "cmdecho" 0) ; (setq lup1 (getvar "luprec")) ; svg luprec (setvar "luprec" 6) ; nombre de décimales ; Recherche du bloc (setq BlocSel (ssget)) ;<<<<<<<<<<<< début de boucle à créer (setq EntTamp (entget (ssname BlocSel 0))) (setq NomBloc (cdr (assoc 2 EntTamp))) (if (= (cdr (assoc 0 EntTamp)) "INSERT") ; si l'entité est un bloc (progn ; Récupération de la valeur via l'étiquette de l'attribut constant (setq DefBloc (tblsearch "Block" NomBloc)) (setq EntBloc (cdr (assoc -2 DefBloc))) (setq loop T) (while (and loop EntBloc) (setq NomEnt (entget EntBloc)) (setq EntBloc (entnext EntBloc)) (if (and (= (cdr (assoc 0 NomEnt)) "ATTDEF") (= (logand 2 (cdr (assoc 70 NomEnt))) 2) (= (cdr (assoc 2 NomEnt)) "COEF_GSM") ; l'étiquette en majuscules ) (setq Val_GSM (cdr (assoc 1 NomEnt))) ) (if (and (= (cdr (assoc 0 NomEnt)) "ATTDEF") (= (logand 2 (cdr (assoc 70 NomEnt))) 2) (= (cdr (assoc 2 NomEnt)) "COEF_DCS") ; l'étiquette en majuscules ) (setq Val_DCS (cdr (assoc 1 NomEnt))) ) (if (and (= (cdr (assoc 0 NomEnt)) "ATTDEF") (= (logand 2 (cdr (assoc 70 NomEnt))) 2) (= (cdr (assoc 2 NomEnt)) "COEF_UMTS") ; l'étiquette en majuscules ) (setq Val_UMTS (cdr (assoc 1 NomEnt))) ) ) ; while (setq loop nil) (setq C1 (atof Val_GSM)) (setq C2 (atof Val_DCS)) (setq C3 (atof Val_UMTS)) ; Boucle sur les autres attributs (setq Ent_dansBloc 1) ; Drapeau attribut (while Ent_dansBloc ; tant qu'il y a des entités dans le bloc ; Nom de l'entité suivante dans le bloc (setq NomEnt (entget (entnext (cdr (assoc -1 EntTamp))))) ; si cette entité est un attribut (if (= (cdr (assoc 0 NomEnt)) "ATTRIB") (progn ; Récupération et insertion des données via l'étiquette de l'attribut "..." (if (= (cdr (assoc 2 NomEnt)) "LG") ; si le nom de l'étiquette de l'attribut est (progn (setq Val_Lg (assoc 1 NomEnt)) ; valeur de l'attribut (associée à 1) (setq Val_Lg (cdr Val_Lg)) ; récupération de la valeure de l'attribut (setq LG (atoi Val_Lg)) (setq P1 (/ (* LG C1) 100)) (setq P1 (rtos P1 2 2)) (setq P1 (strcat P1 "dB")) (setq P2 (/ (* LG C2) 100)) (setq P2 (rtos P2 2 2)) (setq P2 (strcat P2 "dB")) (setq P3 (/ (* LG C3) 100)) (setq P3 (rtos P3 2 2)) (setq P3 (strcat P3 "dB")) ) ; progn ) ; if (if (= (cdr (assoc 2 NomEnt)) "P_GSM") ; si le nom de l'étiquette de l'attribut est (progn (setq NomAtt (assoc 1 NomEnt)) ; valeur de l'attribut (associée à 1) (setq NewAtt (cons 1 P1)) ; construction paire pointée) (setq ChgAtt (subst NewAtt NomAtt NomEnt)) ; remplace les valeurs (entmod ChgAtt) ; modifie les données de l'attribut ) ; progn ) ; if (if (= (cdr (assoc 2 NomEnt)) "P_DCS") ; si le nom de l'étiquette de l'attribut est (progn (setq NomAtt (assoc 1 NomEnt)) ; valeur de l'attribut (associée à 1) (setq NewAtt (cons 1 P2)) ; construction paire pointée) (setq ChgAtt (subst NewAtt NomAtt NomEnt)) ; remplace les valeurs (entmod ChgAtt) ; modifie les données de l'attribut ) ; progn ) ; if (if (= (cdr (assoc 2 NomEnt)) "P_UMTS") ; si le nom de l'étiquette de l'attribut est (progn (setq NomAtt (assoc 1 NomEnt)) ; valeur de l'attribut (associée à 1) (setq NewAtt (cons 1 P3)) ; construction paire pointée) (setq ChgAtt (subst NewAtt NomAtt NomEnt)) ; remplace les valeurs (entmod ChgAtt) ; modifie les données de l'attribut ) ; progn ) ; if ) ; progn ) ; if (if (= (cdr (assoc 0 NomEnt)) "SEQEND") ; si on atteint la fin du bloc (setq Ent_dansBloc nil) ) (setq EntTamp NomEnt) ) ; retour à while ) ; progn ) ; if retour s'il y a encore des blocs ; Affichage des données extraites (princ (strcat "\n...Données extraites :")) (princ "\n...") (princ (strcat "\n...Longueur = " Val_Lg "m")) (princ (strcat "\n...Perte GSM : " Val_Lg " x " Val_GSM "/100 = " P1)) (princ (strcat "\n...Perte DCS : " Val_Lg " x " Val_DCS "/100 = " P2)) (princ (strcat "\n...Perte UMTS : " Val_Lg " x " Val_UMTS "/100 = " P3)) (princ "\n...") ;<<<<<<<<<<<< fin de boucle à créer ; Fin du programme (setvar "cmdecho" echo1) (setvar "luprec" lup1) ; nombre de décimales (terpri) (command "regntout") (princ) (princ) ) (c:CalculPertes)
  3. Ah ouai d'accord, je comprend mieux maintenant ! Il faut donc que j'utilise un attribut classique alors. Mais c'est pas grave tout cela est utile car j'ai besoin d'attribut de ce type (constant) aussi. Merci Gile.
  4. Salut Gile, Super ta réponse. Je te remercie. Le seul Hic, c'est que je peux avoir plusieurs bloc insérer et que je veux qu'ils soient indépendants et là du coup ils récupère tous la même valeur. Comment faire ? A savoir que je sélectionne à la souris le bloc que je souhaite.
  5. Mais oui c'est vrais ! Merci de ta réponse, je suis vraiment trop naze ....
  6. Au Secours, J'ai un trou de mémoire, je n'arrive pas à avoir 2 chiffres après le virgule. Je ne me rappel plus est-ce que c'est du à Luprec ? Voici mon calcul : (setq P1 (/ (* 38 2.9) 100)) (setq P1 (itoa P1)) (princ P1) J'ai le message suivant : ; erreur: type d'argument incorrect: fixnump: 1.102 Merci.
  7. Lili2006 Voici donc mon nouveau code : (setq bloc (tblsearch "Block" "SYN_TAB_PERTES_1'1-4")) (setq ent (cdr (assoc -2 bloc))) (setq loop T) (while (and loop ent) (setq elst (entget ent)) (setq ent (entnext ent)) (if (and (= (cdr (assoc 0 elst)) "ATTDEF") (= (logand 2 (cdr (assoc 70 elst))) 2) (= (cdr (assoc 2 elst)) "P_GSM") ; l'étiquette en majuscules ) (setq Val1 (cdr (assoc 1 elst))) ) (if (and (= (cdr (assoc 0 elst)) "ATTDEF") (= (logand 2 (cdr (assoc 70 elst))) 2) (= (cdr (assoc 2 elst)) "P_DCS") ; l'étiquette en majuscules ) (setq Val2 (cdr (assoc 1 elst))) ) (if (and (= (cdr (assoc 0 elst)) "ATTDEF") (= (logand 2 (cdr (assoc 70 elst))) 2) (= (cdr (assoc 2 elst)) "P_UMTS") ; l'étiquette en majuscules ) (setq Val3 (cdr (assoc 1 elst))) ) (if (and (= (cdr (assoc 0 elst)) "ATTDEF") (= (logand 2 (cdr (assoc 70 elst))) 2) (= (cdr (assoc 2 elst)) "COEF_GSM") ; l'étiquette en majuscules ) (setq Val4 (cdr (assoc 1 elst))) ) (if (and (= (cdr (assoc 0 elst)) "ATTDEF") (= (logand 2 (cdr (assoc 70 elst))) 2) (= (cdr (assoc 2 elst)) "COEF_DCS") ; l'étiquette en majuscules ) (setq Val5 (cdr (assoc 1 elst))) ) (if (and (= (cdr (assoc 0 elst)) "ATTDEF") (= (logand 2 (cdr (assoc 70 elst))) 2) (= (cdr (assoc 2 elst)) "COEF_UMTS") ; l'étiquette en majuscules ) (setq Val6 (cdr (assoc 1 elst))) ) ) (setq loop nil)
  8. Salut, C'est bon j'ai refait mon code, j'avais fait n'importe quoi.
  9. Voici une partie de mon lisp : (setq DefBloc (tblsearch "Block" NomBloc)) (setq EntBloc (cdr (assoc -2 DefBloc))) (setq loop T) (while (and loop EntBloc) (setq NomEnt (entget EntBloc)) (setq EntBloc (entnext EntBloc)) (if (and (= (cdr (assoc 0 NomEnt)) "ATTDEF") (= (logand 2 (cdr (assoc 70 NomEnt))) 2) (Progn (= (cdr (assoc 2 NomEnt)) "P_GSM") ; si le nom de l'étiquette de l'attribut est (setq NomAtt1 (assoc 1 NomEnt)) (setq Val_P_GSM NomAtt1) (setq Val_P_GSM (cdr Val_P_GSM)) (= (cdr (assoc 2 NomEnt)) "P_DCS") ; si le nom de l'étiquette de l'attribut est (setq NomAtt2 (assoc 1 NomEnt)) (setq Val_P_DCS NomAtt2) (setq Val_P_DCS (cdr Val_P_DCS)) (= (cdr (assoc 2 NomEnt)) "P_UMTS") ; si le nom de l'étiquette de l'attribut est (setq NomAtt3 (assoc 1 NomEnt)) (setq Val_P_UMTS NomAtt3) (setq Val_P_UMTS (cdr Val_P_UMTS)) ) ) (setq loop nil) (setq ret (cdr (assoc 1 NomEnt))) ) )
  10. Ok, je te remercie, je vais regarder ça plus tard. Pour l'instant je suis bloqué. Je ne comprends pas... J'ai plusieurs attrib constant, et lorsque je veux extraire les valeurs , elles se mélange, j'ai un défaut dans mon code, mais je ne trouve pas. Je pensais que c'était mon bloc qui était mal fait, mais non.
  11. Merci Gile, Effectivement, je m'en suis souvenu après. Mais est-ce que je peux changer la valeur d'un attribut constant ? Je pense que oui, mais est-ce que tu peux m'aider une nouvelle fois ? Merci encore.
  12. Salut à vous, Merci de m'avoir répondu . Arcasdk, hélas, ça ne marche pas ta soluce, ce lisp ne donne pas la valeur d'un attribut constant. Sinon, Patrick_35, en fait je veux utiliser un bloc avec des attributs constant afin qu'un utilisateur de ce bloc ne puisse pas modifier les valeurs avec l'éditeur d'attribut classique, mais qu'il soit obligé d'utiliser le lisp que je souhaite créer. Je souhaite faire un bloc comme ceci : Longueur de câble = attrib classique l'opérateur rentre la longueur Type de câble = attrib constant invisible contient une valeur fixe Perte câble = attrib constant, le lisp calcul sa valeur en fonction de la Longueur et du Type de câble Encore merci à vous.
  13. Bonjour à Tous, Comment peut-on récupérer la valeur d'un attribut constant d'un bloc sélectionné à la souris ? Peut-on changer cette valeur ? Merci.
  14. Morgul

    Google earth!!!

    Bonjour, Il y a Photoshop, c'est un logiciel de retouche photos. Pas donné, mais très bien.
  15. Bonjour à Tous, La convention du bâtiment à changé cette année, le coefficient hiérarchique est remplacé par une lettre déterminée par vos diplômes ainsi que sur l'appréciation que l'on fait de vous. Auparavant j'étais dessinateur Projeteur 1 coeff 745. Désormais je suis Dessinateur Concepteur Niveau : E. C'est quoi Concepteur ? C'est au dessus ou en dessous de Projeteur ? Merci de m'éclairer car je ne comprend plus rien ....
  16. Merci à Tous, Vous êtes vraiment trop cool, vous vous êtes bien pris la tête (moi aussi l'air de rien). C'est vraiment un fichier de m.... que j'ai récupéré de mon client. Bien joué à toi Bred, je suis d'accord avec vous c'est un réflexe de 3D, que je pratique que trop rarement. Merci encore, c'était super.
  17. Merci de ton aide, J'ai donc envoyé le fichier sous : http://cjoint.com/data/gEqzUkAI8t_Fichier_Prb.DWG
  18. Fillmode est bien à 1. Et je confirme, elles sont vides et donc pas sur un calque interdit à l'impression. On ne voit que le contour des polylignes vides.
  19. Merci de ta réponse. Mais ce n'est pas ça, car j'ai testé. En plus je me suis apperçu que cela faisait la même chose pour les hachures solide, elles ne s'impriment pas non plus.
  20. Bonjour à Tous, J'ai un problème d'impression, toute mes polylignes sont vides alors qu'à l'écran elles sont pleines. C'est une variable qui doit être liées au fichier, car ce le ne le fait qu'avec un seul fichier. Merci de m'aider, je suis très embêté....
  21. Encore une fois tu réponds pile poile à ma question. Tu es vraiment trop fort ! Merci Gile.
  22. Bonjour à tous, Comment peut-on récupérer la valeur par défaut de plusieurs attributs d'un bloc ? Pour ensuite inscrire le résultat dans un fichier txt. Merci.
  23. Merci à vous deux, Effectivement le but est de faire un truc assez simple et efficace. Donc, je vais peut-être oublier le fichier externe. Mais, le problème n'est pas de savoir si le calque est présent dans la liste, cela devrait être assez simple, mais c'est pour le reste faut-il que je fasse des cond ? Je sais pas trop ... Car la liste est longue, et il y a donc beaucoup de nom et beaucoup de couleurs associées, par contre pour les types de traits ça va il n'y en a pas trop. Merci encore.
  24. Bonjour à tous, Voilà mon client m'impose une liste de calques à utiliser avec : Noms de calques, couleurs, types de traits Mais, mon client me donne des fichiers d'archives à remettre en conformité et là c'est galère car les sous-traitants ont fait n'importe quoi en changeant les couleurs des calques, ou en créant des calques qui ne sont pas prévus dans la liste ou en changeant le type de ligne. Je souhaite donc créer un lisp qui remettrait les couleurs et les types de lignes correctement suivant la liste imposée. Et lorsque le lisp rencontrerait un calque qui n'est pas de la liste il le renommerait en ajoutant le préfixe A_Purger_ au nom du calque en question. Ce qui serait top c'est que le lisp puisse lire la liste de calques depuis un fichier txt ou encore mieux depuis un fichier excel. Pouvez-vous me donner une piste pour démarrer ? Merci.
  25. Bonjour à tous, Je vois que ma question n'est pas si tordue que cela et qu'elle passionne les foules. :red: Mais si je comprends bien il n'y a pas trop de réponses positives, et donc ce n'est pas possible. Merci en tout cas. A+.
×
×
  • 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é