Aller au contenu

Sélection de blocs par le calque de l'attribut


Messages recommandés

Posté(e)

Salut,

 

J'ai certains blocs (points Covadis) donc l'attribut ALT est placé dans un calque "toto".

 

Comment sélectionner tous ces blocs dont l'attribut ALT est situé sur le calque "toto" ?

 

Le but est d'isoler ces points dans un nouveau layer.

 

Merci d'avance pour votre aide.

 

Cordialement.

 

Yoann

Posté(e)

Bonjour,

 

Tu peu appliquer ceci :

- Sélection du calque "toto" comme calque courrant.

- Gel de tous les calques sauf "toto".

- Sélection de tous les objets automatiquement (CTRL+A), ou en manuel à la souris.

 

Il faut bien penser à geler les calques et pas uniquement les désactiver.

 

En espérant que ça réponde à ton besoin.

 

@+

C'est en forgeant que l'on devient forgerons.

Et c'est en sciant que Léonard DeVinci!

Posté(e)

Merci mais ca ne marche pas.

 

Si je gèle tout sauf "toto" je n'ai plus rien à l'écran, car tous mes blocs sont dans le calque "point".

Seul le layer dans lequel se trouve l'attribut diffère pour certains points.

 

Cdt.

Posté(e)

et non pas réussi avec le spécial sélection de gilles : pas d'option pour sélectionner des blocs par la valeur du calque sur lequel se trouve un attribut donné.

 

@+

Posté(e)

Un lisp moche et long à traiter qui fait ce que tu a besoin (normalement):

 

(defun c:monattrib ( / Monbloc MonCalqueAttrib ss i MaSelec)
 (setq ss (ssget "_X" '((0 . "INSERT"))))
 (setq MonCalqueAttrib (getstring "Sur quel calque? "))
 (setq i 0)
 (setq MaSelec (ssadd))
 (while (setq MonBloc (ssname ss i))
   (setq i (1+ i))
   (while Monbloc
     (if (and (eq "ATTRIB" (cdr (assoc 0 (entget Monbloc)))) (eq MonCalqueAttrib (cdr(assoc 8 (entget Monbloc)))))
       (ssadd (cdr (assoc 330 (entget Monbloc))) MaSelec)
    )
     (setq Monbloc (entnext Monbloc))
     )
   )
   (setq SelectionEnCours MaSelec)
 (sssetfirst nil MaSelec)
 )

 

Si tu a un seul bloc qui est concerné tu peu ajouter à :

(setq ss (ssget "_X" '((0 . "INSERT"))))

Donc :

(setq ss (ssget "_X" '((0 . "INSERT")(2 . "Le_Nom_De_Mon_Bloc"))))

 

Sachant que les carractéres génériques sont pris en compte.

Pour exemple, pour tous les bloc TCPOINT avec une numérotation (TCPOINT_1,TCPOINT_2,...) que certains logiciels peuvent produire,tu pourra écrire "TCPOINT*" comme nom de bloc.

 

Ceci accélérera grandement le traitement si tu a de nombreux blocs qui ne sont pas concernés.

 

En espérant que ça réponde au besoin.

C'est en forgeant que l'on devient forgerons.

Et c'est en sciant que Léonard DeVinci!

Posté(e)

Merci pour ton lisp.

 

Je sais pas si il est moche mais il est long ! ;-)

Même en précisant le nom du bloc et le nom du calque, sur 10 points ca va mais sur 1000 ca ne finit jamais.

 

Si un "optimiseur de lisp" passe dans le coin ;-)

 

Mais encore merci pour votre aide.

 

@+

Posté(e)

En passant par du vlisp pour éviter de parser toute les définitions de blocs et se concentrer sur les attributs:

(defun c:monattrib ( / Monbloc MonblocO MonCalqueAttrib ss i attr a MaSelec)
 (setq ss (ssget "_X" '((0 . "INSERT"))))
 (setq MonCalqueAttrib (getstring "Sur quel calque? "))
 (setq i 0)
 (setq MaSelec (ssadd))
 (while (setq MonBloc (ssname ss i))
   (setq i (1+ i))
   (setq MonblocO (vlax-ename->vla-object Monbloc))
   (setq attr (vlax-invoke MonblocO 'getattributes))
   (foreach a attr
     (if (= (vla-get-Layer a) MonCalqueAttrib) (ssadd Monbloc MaSelec))
   )
 )
 (sssetfirst nil MaSelec)
)

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

Posté(e)

bonjour,

 

La méthode de Alala fonctionne bien à condition d'utiliser INACTIF et surtout pas GELER sur tous les calques sauf toto

 

En effet, si tu gèles le calque POINT, tout le bloc y compris ses attributs seront sortis des objets graphiques regénérés donc affichables, alors que si tu inactives ton calque POINT, seul le piqué est désactivé, les calques des sous composants du bloc (attributs) restent à volonté activable (affichable) ou pas.

 

Olivier

Posté(e)

Merci pour ton lisp.

 

Je sais pas si il est moche mais il est long ! ;-)

Même en précisant le nom du bloc et le nom du calque, sur 10 points ca va mais sur 1000 ca ne finit jamais.

 

Si un "optimiseur de lisp" passe dans le coin ;-)

 

Mais encore merci pour votre aide.

 

@+

Bonjour,

 

Le truc (comme dit par vincentp010 ) c'est que je passe en revu tous les objets des blocs.

Dans le cas d'un point d'alti classique ça fait juste 3 élément (point + 2 atributs), donc si en plus il n'y a pas de filtres de blocs et que tu a des blocs lourd ça devient TRES LONG!

 

Le Vlist fournis par vincentp010 résoud se problème de vitesse en se concentrant sur les attributs et en passant par du Vlisp.

 

Il tes reste plus qu'a lancer la routine et à prendre la pause dej' ;)

 

@+

C'est en forgeant que l'on devient forgerons.

Et c'est en sciant que Léonard DeVinci!

Posté(e)

bonjour,

 

La méthode de Alala fonctionne bien à condition d'utiliser INACTIF et surtout pas GELER sur tous les calques sauf toto

 

En effet, si tu gèles le calque POINT, tout le bloc y compris ses attributs seront sortis des objets graphiques regénérés donc affichables, alors que si tu inactives ton calque POINT, seul le piqué est désactivé, les calques des sous composants du bloc (attributs) restent à volonté activable (affichable) ou pas.

 

Olivier

Bonjour,

 

Dans ce cas pas de CTRL+A sinon tu sélectionne tous les objets de tous les calques même les innactif!

 

@+

C'est en forgeant que l'on devient forgerons.

Et c'est en sciant que Léonard DeVinci!

Posté(e)

Bonjour,

 

Pour information, pour parcourir les calques, on peut utiliser la commande bien pratique, dans la BARRE CALQUE 2 (Menu Format : Outils de calques >) : PARCOURIR LES CALQUES...

 

Cette fonction isole très rapidement le ou les calques sélectionnés (double clic)... Une fois terminé, on fait CALQUE PRECEDENT et on retrouve le dessin avec les calques qui étaient initialement afffcihés ! Cette commande utilise d'ailleurs INACTIF !

 

Mais après comme il s'agit d'un élément appartenant à un BLOC c'est tout le bloc qui sera placé sur le calque de "L'attribut"...

 

Il faudra attaquer en LISP...

 

Christian

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é