Aller au contenu

Begood

Membres
  • Compteur de contenus

    44
  • Inscription

  • Dernière visite

Tout ce qui a été posté par Begood

  1. J'ai envoyée la demande de code d'enregistrement. Je vous tiens au courant. J'ai trouvé une autre petite perle sur ce site : ALTEXT Si ça fonctionne le repérage va être vite fait à l'avenir ! Je vous tient au courant.
  2. Quand la routine s'arrête et que j'ai à nouveau la main il reste des blocs dans le dessin. On est d'accord, j'utilise ta routine seule, elle n'est pas prévue pour être ajoutée à celle que j'ai posté au début ?
  3. Je viens de re-tester, la boucle ne se fait pas.
  4. Je viens de tester ta routine Patrick_35, elle décompose bien les blocs du premier niveau en gardant les valeurs d'attribut mais elle ne tourne pas en boucle. J'ai du mal à interpréter le code, si je comprends bien il s'agit d'une partie de la routine finale ? Cette portion permet d'exécuter BURST uniquement ?
  5. Merci pour ta réponse Tramber. Dans l'état la routine avec le while fonctionne mais il arrive qu'elle plante selon les éléments présents dans le dessin. Pour le déverrouillage ça roule, les 2 lignes que j'ai rajouté font le boulot. C'est effectivement BURST que j'utilise actuellement, pour faire simple CTRL A et puis BURST et ça décompose tous les blocs tout en conservant les valeurs d'attribut sous forme de texte. L'idéal serait de pouvoir placer BURST dans un while mais je ne sais pas si c'est possible. Je rappelle que je suis novice, je ne connais rien à la programmation lisp. Pour les routines existantes, j'ai cherché, j'en ai trouvé et testé pas mal mais je n'ai jamais trouvé le saint graal à part celle que j'ai posté ici, selon les dessins elle tourne impec.
  6. D’où l'intérêt de décomposer les blocs. Tu parles des mises à jour archi ? Je bosse sur les plans EXE, à partir de là il y a rarement de nouveaux indices. Si c'est le cas je reporte les modifs me concernant sur mon fichier. Pas de réseaux pour moi, je ne suis pas dans le CVC mais dans les menuiseries extérieures.
  7. J'ai horreur des xrefs... Et après nettoyage le fichier n'est pas si lourd que ça, par exemple aujourd'hui je bosse sur un fichier avec 12 niveaux et il ne fait que 3mo.
  8. Si j'ai pris la peine de poster cette demande c'est qu'il y a un intérêt. Ceux qui font du nettoyage de plans comprendront. Un exemple : réunir tous les niveaux d'un même batiment sur le même fichier. Selon l'archi et la provenance du fichier les blocs posent problème à cause d'un nom commun pour des blocs différents.
  9. Bonjour à tous, Je reviens vers vous pour faire appel à votre expertise afin de peaufiner une routine. Elle permet de décomposer tous les blocs y compris ceux imbriqués. (defun c:exp (/ bSet) (command "-calque" "d" "*"); déverrouille tous les calques (command); stoppe la commande -calque (setvar "qaflags" 1) (while(setq bSet(ssget "_x" '((0 . "insert")))) (command "_.explode" bSet "") ); end while (setvar "qaflags" 0) (princ "\n==> Tous les blocs ont été explosés.") (princ) ); end of c:exp Le problème c'est qu'elle plante si le dessin contient : des calques verrouillés des xrefs des blocs non décomposables etc J'ai donc rajouté les lignes 2 et 3 qui permettent de déverrouiller tous les calques. Est-ce qu'il serait possible de la modifier en intégrant la procédure suivant : (si ça demande trop de boulot, laissez tomber) Déverrouiller tous les calques Insérer (et non lier) les xrefs s'il y en a Rendre les blocs non décomposables décomposables Décomposer tous les blocs en convertissant les attributs en texte jusqu'à ce qu'il n'y ai plus de bloc Stopper la routine si elle rencontre un obstacle Merci d'avance. David.
  10. Super merci, ça fonctionne. Voici la routine mise à jour pour ceux que ça intéresse : ;; Select Blocks by Attribute Value - Lee Mac ;; Selects all attributed blocks in the current layout which contain a specified attribute value. (defun c:selblkbyattval ( / att atx ent idx sel str ) (vl-load-com) (if (/= "" (setq str (strcase (getstring t "\nEntrez la ou les valeurs de l'attribut (Séparez les valeurs par une virgule) : ")))) (if (and (setq sel (ssget "_X" (list '(0 . "INSERT") '(66 . 1) (if (= 1 (getvar 'cvport)) (cons 410 (getvar 'ctab)) '(410 . "Model") ) ) ) ) (progn (repeat (setq idx (sslength sel)) (setq ent (ssname sel (setq idx (1- idx))) att (entnext ent) atx (entget att) ) (while (and (= "ATTRIB" (cdr (assoc 0 atx))) (not (wcmatch (strcase (cdr (assoc 1 atx))) str)) ) (setq att (entnext att) atx (entget att) ) ) (if (= "SEQEND" (cdr (assoc 0 atx))) (ssdel ent sel) ) ) (< 0 (sslength sel)) ) ) ;;; Modification by Patrick_35 (progn (zoomobject (mapcar '(lambda(x)(vlax-ename->vla-object (cadr x))) (ssnamex sel))) (sssetfirst nil sel) ) ;;; Fin de la modification by Patrick_35 (princ (strcat "\nAucun bloc trouvé avec la valeur d'attribut \"" str "\".")) ) ) (princ) ) ;; ZoomObject Effectue un zoom sur les objets contenus dans la liste ;; ;; Argument ;; objlst : une liste de vla-object ;; ;; Variables ;; dir : normale du plan de la vue courante ;; ang : angle de la vue courante ;; 3x3 : matrice de transformation du SCG vers la vue courante (dimension 3) ;; 4x4 : matrice de transformation du SCG vers la vue courante (dimension 4) ;; ptlst : liste des points minimum et maximum des bounding-boxes des objets sélectionnés (SCG) (defun ZoomObject (objlst / dir ang 3x3 4x4 ptlst) (vl-load-com) (setq dir (mapcar '- (trans (getvar "viewdir") 1 0) (trans '(0 0 0) 1 0) ) ang (- (getvar "viewtwist")) 3x3 (mxm (mapcar '(lambda (x) (trans x 0 dir)) '((1 0 0) (0 1 0) (0 0 1)) ) (list (list (cos ang) (- (sin ang)) 0) (list (sin ang) (cos ang) 0) '(0 0 1) ) ) 4x4 (append (mapcar '(lambda (v o) (append v (list o)) ) 3x3 '(0 0 0) ) (list '(0 0 0 1)) ) ) (foreach obj objlst (vla-TransformBy obj (vlax-tmatrix (trp 4x4))) (vla-getBoundingBox obj 'minpt 'maxpt) (vla-TransformBy obj (vlax-tmatrix 4x4)) (setq ptlst (cons (vlax-safearray->list minpt) (cons (vlax-safearray->list maxpt) ptlst) ) ) ) (vla-ZoomWindow (vlax-get-acad-object) (vlax-3d-point (mxv 3x3 (apply 'mapcar (cons 'min ptlst)))) (vlax-3d-point (mxv 3x3 (apply 'mapcar (cons 'max ptlst)))) ) ) ;; transpose une matrice Doug Wilson (defun trp (m) (apply 'mapcar (cons 'list m)) ) ;; Apply a transformation matrix to a vector by Vladimir Nesterovsky (defun mxv (m v) (mapcar '(lambda (r) (apply '+ (mapcar '* r v))) m) ) ;; Multiply two matrices by Vladimir Nesterovsky (defun mxm (m q) (mapcar '(lambda (r) (mxv (trp q) r)) m) )
  11. Re, @ Patrick_35, J'ai voulu installé la routine sur le poste d'un collègue qui est sous 2013 et ça ne fonctionne pas, j'ai le message d'erreur suivant : ; erreur: no function definition: VLAX-ENAME->VLA-OBJECT Est-ce qu'il est possible de la faire fonctionner quand même ? Merci
  12. Je ne connaissais pas la commande RECHERCHER, je viens de tester. Elle permet effectivement de chercher la valeur d'un attribut mais je n'arrive pas à effectuer une recherche multiple. Le résultat de la recherche ne sélectionne pas le bloc mais surligne juste la valeur recherchée. Pour une sélection il est nécessaire de cliquer sur un bouton. La recherche est aussi partielle par défaut, pas pratique pour une recherche ciblée. Après plusieurs tests, la routine est bien meilleure pour mes besoins. Merci quand même pour le tuyau, ça peut toujours servir.
  13. Merci pour vos réponses. C'est la merde si ce n'est plus possible, je m'en servait pour compter des repères et vérifier les quantités sur le fichier correspondant mais là ben je peux plus... et c'est clair que ça fait chi**.
  14. Re, J'ai cru comprendre qu'avec un fichier d'aide xaml on pouvait ajouter du texte dans l'info bulle au survol du bouton de commande. Je souhaiterai ajouter les exemples ci-dessus mais je n'arrive pas à mettre la main sur la structure de base d'un fichier xaml pour qu'il soit reconnu par Autocad. Merci
  15. Merci beaucoup Patrick_35. La routine fonctionne impec, c'est du bonheur ! Merci d'avoir mis en application le ZoomObject de (gile), je n'y serais pas arrivé, trop compliqué pour moi... Je précise aussi pour ceux que ça intéresse que cette fonction de recherche est compatible avec la recherche multiple et la recherche partielle. Exemples : Vous recherchez l'attribut B001, entrez : B001 Vous recherchez les attributs B001 et B002, entrez : B001,B002 Vous recherchez les attributs qui commencent par B, entrez : B* Vous recherchez les attributs qui contiennent 00, entrez : *00* Autre info importante, la fonction ne tient pas compte de la casse. Exemple : Vous recherchez l'attribut B001, vous pouvez entrer : b001 Merci encore ;) ++
  16. Re, Merci pour la réponse rapide ;) La routine de (gile) pour la sélection par attribut ne convient pas pour ce que je veux faire (je l'ai testé). J'ai juste besoin de rechercher par la valeur d'attribut, peu importe l'étiquette. Pour ce qui est du zoom, la commande "zoom" "o" fonctionne très bien, le problème c'est que je perds la sélection. Je voudrais juste pouvoir re-sélectionner le jeu de sélection précédent.
  17. Bonjour, Je souhaitais pouvoir sélectionner un ou plusieurs blocs selon la valeur d'un attribut et j'ai trouvé cette routine sur le net : ;; Select Blocks by Attribute Value - Lee Mac ;; Selects all attributed blocks in the current layout which contain a specified attribute value. (defun c:selblkbyattval ( / att atx ent idx sel str ) (if (/= "" (setq str (strcase (getstring t "\nEntrez la valeur de l'attribut: ")))) (if (and (setq sel (ssget "_X" (list '(0 . "INSERT") '(66 . 1) (if (= 1 (getvar 'cvport)) (cons 410 (getvar 'ctab)) '(410 . "Model") ) ) ) ) (progn (repeat (setq idx (sslength sel)) (setq ent (ssname sel (setq idx (1- idx))) att (entnext ent) atx (entget att) ) (while (and (= "ATTRIB" (cdr (assoc 0 atx))) (not (wcmatch (strcase (cdr (assoc 1 atx))) str)) ) (setq att (entnext att) atx (entget att) ) ) (if (= "SEQEND" (cdr (assoc 0 atx))) (ssdel ent sel) ) ) (< 0 (sslength sel)) ) ) (sssetfirst nil sel) (princ (strcat "\nAucun bloc trouvé avec la valeur d'attribut \"" str "\".")) ) ) (princ) ) (J'ai traduit les textes) Elle fonctionne parfaitement mais j'aimerais bien la personnaliser un peu. Je voudrais effectuer un zoom sur le ou les objets sélectionnés grâce à cette fonction, j'ai donc rajouté à la fin : (command "zoom" "o") (command) Le problème c'est que je perds la sélection en cours. Si je tape "select" et "p" je sélectionne à nouveau le ou les blocs recherchés Alors je rajoute ça : (command "select" "p") Mais ça ne fonctionne pas, ça me sélectionne tous mes blocs et non ceux recherchés avec la fonction. Une idée ? Merci d'avance. David
  18. Up Personne ne sait comment garder la sélection en cours ?
  19. Bonjour, Je me présente, David, nouvel inscrit sur votre forum et utilisateur d'Autocad depuis une vingtaine d'années. Je suis récemment passé à la version 2017 et je rencontre un léger problème, je perds la sélection en cours en basculant d'un fichier à l'autre. Je m'explique, deux fichiers ouverts, A et B, je travaille sur A et sélectionne un certain nombre d'objets, je bascule sur B pour vérifier un truc et quand je reviens sur A je n'ai plus de sélection courante. Y a t'il une variable système qui permet de configurer cela ? Merci.
×
×
  • 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é