Aller au contenu

zebzeb

Membres
  • Compteur de contenus

    66
  • Inscription

  • Dernière visite

Tout ce qui a été posté par zebzeb

  1. En effet je n'avais pas fait de regen, j'avais juste ajouté à la fin (vla-regen activedocument 1) ... oups! Du coup avec le regen maintenant ça fonctionne nikel
  2. Bonjour Patrick, Cette dernière version est vraiment géniale et comble toutes mes espérances :D , en revanche la seconde ne fonctionne toujours pas ??? Merci beaucoup
  3. Je viens de tester: Pour un dessin dont les blocs sont insérer directement pas de soucis je cache bien les attributs sélectionnés, et pour faire réapparaitre attsync. Par contre sur les xref ça ne fonctionne pas, lors de la sélection de l'attribut, celui reste visible. Mais ce sont les propriètés de l'étiquette du bloc qui sont modifiées hors l'xref est indépendant du dessin ainsi que les blocs qui le compose. Une idée comme ça, et merci pour ta patience, mais est-il réellement possible de dire "aucun attribut visible sur Xref sélectionné" comme la variable attmode ?
  4. Bonjour Patrick et merci pour la solution que tu apportes toutes fois mon soucis est différent Je charge pliseurs dessins de différents corps d'état en xref ensuite je fais mon attmode=0 pour pouvoir y voir un peu mieux dont notament les conflits. Les dessins montés en xref je ne peu les modifiers. Le problème est qu'à l'impression mes cartouches sont eux aussi sans attribut actuellement la seul solution que j'ai trouvée est de faire un copier/coller de mon cartouche en supperposant, ensuite j'en "burst" un, bref pas terrible comme solution.
  5. Bonjour, Pour la synthèse et l'impression de différents plans j’aurais besoin de masquer les attributs de certains blocs sans modifier les blocs sachant que chacun de ces blocs contient des attributs visible et non visible. Je souhaiterais savoir s’il existe une technique pour faire un ATTMODE=0 uniquement sur des blocs sélectionnés ? Ou le cas échéant ATTMODE=0 dans l’espace objet et ATTMODE=1 ou 2 dans les présentations ? Peut-être qu’un lisp existe ? Merci pour vos conseils
  6. Re bonjour, C'est vrai que ta solution est beaucoup plus simple 8) même visuellement! Mais les mapcar, les listes je ne maitrise pas vraiement. En faite, je génère le lisp à partir d'une table excel en vba mais bon le lisp est plus lourd et la méthode archaïque. En tout cas merci
  7. Ben j'ai poster pour rien désolé, je viens de trouver la réponse ICI j'ai fait (if (tblsearch "block" "LU9451")(vla-put-Name (vla-item(vla-get-Blocks(vla-get-ActiveDocument(vlax-get-acad-object))) "LU9451")"LU-TYP-01")) etc... Et ça fonctionne ;)
  8. Bonjour, J'ai fait ce lisp qui me permet de renommer plusieurs Blocs (defun c:nn(/) (vl-load-com) (vla-put-Name (vla-item(vla-get-Blocks(vla-get-ActiveDocument(vlax-get-acad-object))) "LU9451")"LU-TYP-01")) (vla-put-Name (vla-item(vla-get-Blocks(vla-get-ActiveDocument(vlax-get-acad-object))) "LU3902")"LU-TYP-02")) etc ... (princ) ) Mon soucis est que si le bloc n'existe pas le programme s'arrête et génère une erreur. Ayant plusieurs dessins à modifier, je cherche donc une solution du type si le bloc "LU9451" existe je le renomme si non je passe au suivant. Merci pour votre aide
  9. Bonjour, Enfin ça fonctionne ... Donc si ça peut intéresser quelqu'un d'autre, même je sais que l'on peut faire mieux en moins brouillon ;) (defun gc:str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (gc:str2lst (substr str (+ (strlen sep) pos 1)) sep) )(list str)) ) (defun c:goCSV (/ dataCSV openCSV lireL Titre LongueurL echelle ang DataL ptOrigine pt x) (setq dataCSV (getfiled "Selection du fichier" "" "CSV" 0)) (setq CoefEch (getint "\nCoef (1|mm, 10|cm, 1000|m etc...),: ")) (setq openCSV (open dataCSV "r")) (setq lireL (read-line openCSV)) (setq Titre (gc:str2lst lireL ";")) (setq LongueurL (length Titre)) (setq d2r90 (* Pi (/ 90.0 180.0))) (setq d2r180 (* Pi (/ 180.0 180.0))) (setq echelle (* CoefEch 1)) (setq ang 0 ) (setq dataL " ") (while (/= DataL nil) (setq lireL (read-line openCSV)) (setq DataL (gc:str2lst lireL ";")) (setq ptOrigine (Getpoint (strcat "\nPoint d'insertion du local: " (nth 0 DataL)))) (command "_TEXT" "S" "SB_TITRE" ptOrigine "0.15" 0 "%%UCourants forts:"); "" "") (setq x 1) (while (> LongueurL x) (setq Bloc (nth x Titre)) (setq ValAtt (strcat "x" (nth x DataL))) (if (/= Bloc "") (progn (if (= x 1) (setq pt (polar ptOrigine d2r90 -0.4)) (setq pt (polar pt d2r180 -0.8)) ) (if (/= CFA "on") (command "inserer" Bloc pt echelle echelle ang ValAtt ) (command "inserer" Bloc pt echelle echelle ang ValAtt ) ) ) (progn (setq CFA "on") (setq pt (polar ptOrigine d2r90 -0.8)) (command "_TEXT" "S" "SB_TITRE" pt "0.15" 0 "%%UCourants faibles:" "" "") (setq pt (polar ptOrigine d2r90 -1.2)) (setq pt (polar pt d2r180 0.8)) ) ) (setq x (+ x 1)) (princ (strcat "\nX + 1 = " (itoa x) "\n")) ) (setq CFA "off") ) (close openCSV) (princ) ) Type de fichier CSV extrait d'une base excel après un filtre: NOM DE ZONE;NOM-BLOC-CFO1;NOM-BLOC-CFO2;NOM-BLOC-CFO.etc;;NOM-BLOC-CFA1;NOM-BLOC-CFA.etc ZONE 1 ;1;2;3;;4;5 ZONE 2;1;0;3;;1;9 ZONE Etc...;7;2;?;;4;8 Les chiffres sont des quantités Le double ;; permet de différencier le CFO du CFA Les blocs son prévu avec un seul attribut Bonne journée et merci pour votre aide
  10. Bonjour, Oui en effet hier soir, j'ai pu constater ces problèmes et d'autre d'ailleurs!! Par contre devrait être Je crois que c'est le chargement des variables (?) un peu comme "Option Explicit" en VBA Mais en lisp je n'ai jamais vu de différence les programmes fonctionnent avec et sans (?) J'en profite également pour soliciter une explication (avec un exemple simple si possible) de la fonction polar car je ne m'en sort pas ! Je chercher à faire des pas de 1 horizontal vers la droite mais le "retour à la ligne" pas de 1 je galère Merci à vous
  11. Oups! en effet impardonnable le ' pour les listes, je n'ai plus l'erreur mais ça ne marche toujours pas grrr, j'vais quand même pouvoir avancer Merci Maxence
  12. Bonjour, Je cherche à inserer des plusieurs blocs avec un lisp qui charge un fichier CSV Mon CVS à le format suivant: TITRE;BLOC1;BLOC2;BLOC3; etc... Local1;Qantité1;Qantité2;Qantité3; etc... Local2;Qantité1;Qantité2;Qantité3; etc... Mon soucis est que j'avance à tâton donc pas très vite, , mais je me heurte à ce message continuellement: erreur: fonction incorrecte: "" (defun c:go (/) (setq dataCSV (getfiled "Selection du fichier" "" "CSV" 0)) (setq openCSV (open dataCSV "r")) (setq lireL (read-line openCSV)) (setq Titre (gc:str2lst (read-line openCSV) ";")) (setq LongueurL (length Titre)) (setq echelle 1 angle 0) (setq dataL " ") (setq Lpt ("" "0.5,-0.5" "1,-0.5" "0.5,-1" "1,-1" "1.5,-1")) (while (/= lig nil) (setq DataL (gc:str2lst (read-line openCSV) ";")) (setq pt (Getpoint (strcat "\nPoint d'insertion: " (nth x DataL)))) (setq x 2) (while (> LongueurL x) (command "inserer" (nth x Titre) (nth x pt) echelle echelle angle (nth x DataL)) (setq x (+ x 1)) ) ) (princ) ) (defun gc:str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (gc:str2lst (substr str (+ (strlen sep) pos 1)) sep) )(list str)) ) Merci pour votre aide
  13. Merci olivier
  14. Bonjour, Je voudrais savoir s'il existe une routine qui permettrais d'accéder à une liste par son numérique. Par exemple: Maliste ("a" "12" "rr") Maliste(1) => a Maliste(2) => 12 Maliste(3) => rr Merci pour votre aide
  15. Bonjour C'est exactement ce que je voulais un très grand MERCI à toi Brice. Oui je sais le Crable, mais les blocs ne sont pas de moi je récupère les plans en l'état. Bonne journée
  16. J’ai suivi le lien ainsi que beaucoup d’autre, j'aurais passé une partie de la nuit sans résultat probant, donc j'ai donc tout extrait et fait un traitement sur Excel, histoire de gagner quand même un peu de temps. Mais si toutefois une bonne âme pouvait me dépatouillé le problème, j’en lui en serais reconnaissant. Bon week-end
  17. Il est évident que je n'est pas tes connaissances, je tente tant bien que mal d'adapter ce que tu à écris... ; erreur: type d'argument incorrect: lselsetp nil (defun c:concat() (setq n 0); compteur (setq valeur (getstring "Valeur:")) (setq ss (ssget "X" '((2 . "CARTOUCHE"))));enregistremss d'une sélection (repeat (sslength ss); boucle autant de fois qu'il y a d'ssité dans la sélection (ssname ss n); récupération du nom de la n-1 ssité. (cond (= (cdr (assoc 1(ssget ss))) "AFFAIRE") (progn (setq affaire (assoc 2(ssget ss))) (setq b (+ b 1)) ) (= (cdr (assoc 1(ssget ss))) "PHASE") (progn (setq phase (assoc 2(ssget ss))) (setq b (+ b 1)) .....etc (= (cdr (assoc 1(ssget ss))) "N°DOC") (progn (if (= (cdr (assoc 2(ssget ss))) valeur) (progn (setq numdoc (assoc 2(ssget ss))) (setq b (+ b 1)) (setq c 1)) ) ) ) (= (cdr (assoc 1(ssget ss)) "INDICE") (progn (setq indice (assoc 2(ssget ss))) (setq b (+ b 1)) ) ) ) (setq sortie (strcat affaire "_" phase "_" emet "_" lot "_" doc "_" zone "_" niv "_" numdoc "_" indice)) (princ sortie) (princ) ) Je tourne en rond ...
  18. Bonsoir Olivier Merci pour ta réponse... Mais je ne comprends pourquoi tu dis 2 fois la sélection, et je sais pas qu’elle sont les corrections nécessaires. La première fois c'est (censé l'être) pour le nom du bloc concerné La deuxième c'était pour faire la sélection des blocs de ce nom Je ne connais pas vraiment le lisp, je bidouille avec ce je comprends (ou crois comprendre), j'ai donc besoin encore de votre aide. A la base j'avais trouvé ce lisp: (defun c:sk (/ dxf ent) (defun dxf (code ent) (cdr (assoc code (entget ent)))) (if (and (setq ent (car (entsel "\nSelect an Attributed Block: "))) (eq "INSERT" (dxf 0 ent)) (= 1 (dxf 66 ent))) (while (not (eq "SEQEND" (dxf 0 (setq ent (entnext ent))))) (princ (strcat "\n\nAtt_Tag:" (dxf 2 ent) "\nAtt_Value: " (dxf 1 ent))))) (princ) ) Mais après avoir l'après-midi à essayer de remplacer (entsel "\nSelect an Attributed Block: ") par (ssget "X" '((2 . "CARTOUCHE"))) ... Sans succès Encore un peu d'aide s’il vous plait, merci
  19. Bonjour, Je souhaite créer une chaine de caractères à partir de certains attributs d’un bloc nommé "CARTOUCHE". Ce bloc étant présent plusieurs fois dans le dessin (dans les onglets), j’ai besoin d’une correspondance de valeur (entrée manuellement) et de la valeur d’une étiquette d'attribut "N°DOC" valeur unique. Lorsque je trouve le bloc concerné, je concatène quelques uns des attributs. ("AFFAIRE" "PHASE" etc..) (defun c:concat() (setq monbloc (ssget "X" '((2 . "CARTOUCHE")))) (setq valeur (getstring "Valeur:")) (setq lis (ssget "_X" (list '(0 . "INSERT") (cons 2 monbloc)))) (setq y (sslength lis)) (setq a 0) (setq b 0) (setq c 0) (while (or (< a y) (= c 1)) (setq detect (ssname lis a)) (setq ent (entnext detect)) (setq verif "debut") (setq b 0) (while (/= verif "fin") (cond (= (cdr (assoc 1(entget ent))) "AFFAIRE") (progn (setq affaire (assoc 2(entget ent))) (setq b (+ b 1)) ) (= (cdr (assoc 1(entget ent))) "PHASE") (progn (setq phase (assoc 2(entget ent))) (setq b (+ b 1)) ) (= (cdr (assoc 1(entget ent))) "EMETEUR") (progn (setq emet (assoc 2(entget ent))) (setq b (+ b 1)) ) (= (cdr (assoc 1(entget ent))) "LOT") (progn (setq lot (assoc 2(entget ent))) (setq b (+ b 1)) ) (= (cdr (assoc 1(entget ent))) "DOCUMENT") (progn (setq doc (assoc 2(entget ent))) (setq b (+ b 1)) ) (= (cdr (assoc 1(entget ent))) "ZONE") (progn (setq zone (assoc 2(entget ent))) (setq b (+ b 1)) ) (= (cdr (assoc 1(entget ent))) "NIVEAU") (progn (setq niv (assoc 2(entget ent))) (setq b (+ b 1)) ) (= (cdr (assoc 1(entget ent))) "N°DOC") (progn (if (= (cdr (assoc 2(entget ent))) valeur) (progn (setq numdoc (assoc 2(entget ent))) (setq b (+ b 1)) (setq c 1)) ) ) ) (= (cdr (assoc 1(entget ent)) "INDICE") (progn (setq indice (assoc 2(entget ent))) (setq b (+ b 1)) ) ) (if (> b 9)(setq verif "fin")) ) (setq a (+ a 1)) ) (setq sortie (strcat affaire "_" phase "_" emet "_" lot "_" doc "_" zone "_" niv "_" numdoc "_" indice)) (alert sortie) ) (princ) Le code est indéniablement très... lourd ou simpliste et en plus je m'arrache les cheveux ;) Help! J'ai l'erreur: valeur de liste SSGET incorrecte Merci
  20. Enfin!... Après beaucoup de tâtonnement, j'y suis arrivé :D Avec tous mes meilleur remerciement Patrick
  21. Bonjour, Encore besoin de votre soutient Je n'ai su utiliser ce qui suit :blink: Car je n'en comprends pas le sens... Actuellement le lisp fonctionne en l'état toutefois je galère à cause de la sélection, je n'arrive pas à "débrancher" avec un "if" avant l'erreur 1. Si un bloc n'a d'attribut => lentityp nil 2. Si un bloc n'a pas l'attribut "DISTANCE" => lentityp nil 3. Si un autre élément à était sélectionné (par exemple une ligne) => lentityp nil Dans les 3 cas l'exécutions est arrêtée, je n'arrive pas à écrire "si c'est nil passe au suivant" ;) (defun c:dstvdi() (setq comp 0) (initget (+ 1 2 4)) (setq ech (getint "\nEchelle: " )) (initget (+ 1 4)) (setq comp (getint "\nCompensation: ")) (princ "\nSélectionnez le point d'origine") (setq pt1(getpoint)) (setq pt1X(car pt1)) (setq pt1Y(cadr pt1)) (princ "\nSélectionnez les blocs à affecter") (setq lis (ssget)) (setq y (sslength lis)) (setq a 0) (while (< a y) (setq detect (ssname lis a)) (setq ent (entnext detect)) (setq verif "debut") (while (/= verif "fin") (setq kt (cdr (assoc 2(entget ent)))) (if (= kt "DISTANCE") (progn (setq pt2(cdr (assoc 10 (entget detect)))) (setq pt2X(car pt2)) (setq pt2Y(cadr pt2)) (setq di1 (abs (- pt1X pt2X))) (setq di2 (abs (- pt1Y pt2Y))) (setq di (+ (+ di1 di2) 100)) (setq divdi (fix (/ di ech))) (setq divdi(+ divdi comp)) (setq ent(subst (cons 1 (rtos divdi)) (assoc 1 (entget ent))(entget ent))) (entmod ent) (entupd detect) (setq verif "fin") ) (setq ent (entnext ent)) ) ) (setq a (+ a 1)) ) ) Merci par avance
  22. C'est nikel, encore merci
  23. Merci pour ta réponse super rapide, je testerais demain au boulot ici je n'ai pas autocad Bonne soirée
  24. Bonjour, Je me tourne à nouveau vers vous car sèche complètement :huh: sur la méthode de réalisation, Je n'arrive pas à récupérer les coordonnées des blocs ; Insertion des distances de blocs (defun c:ditoblocs() (setq di 0) (princ "\nSélectionnez le point d'origine") (setq ptorigine(getpoint)) (princ "\nSélectionnez les blocs à affecter") (setq lis (ssget)) (setq y (sslength lis)) (setq a 0) (while (< a y) (setq detect (ssname lis a)) (setq ent (entnext detect)) (setq verif "debut") (while (/= verif "fin") (setq kt (cdr (assoc 2(entget ent)))) (if (= kt "DISTANCE") (progn ; ; Ici je souhaite récupérer la distance entre ; le point d'origine et le blocs concerné ; Et l'insérer dans l'attribut DISTANCE ; (setq divdi(strcat (fix (/ di 100) " mètres") (setq ent(subst divdi (assoc 1 (entget ent))(entget ent))) (entmod ent) (entupd detect) (setq verif "fin") ) (setq ent (entnext ent)) ) ) (setq a (+ a 1)) ) ) J'espère ne pas être trop confus dans ma demande qui pour moi est grandement épineuse ! Et par avance merci
  25. Bonjour, La vitesse est bien supérieur en effet, merci pour ces précisions... C'est dommage j'ai déployé avant ton dernier message donc je le garde sous le coude pour des applis avenir Bonne journée
×
×
  • 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é