Aller au contenu

Rechercher un bloc


Clément.a

Messages recommandés

Pour expliquer un peu mieux mon probleme j'ai un nombe x de bloc avec attribut qui se nome "annotation", quand j'applique une action (depuis une routine) j'aimerai que ça modifie un bloc "annotation" dont je connais seulement les coordonnées de son point de base. Y a t'il un moyen de resortir tout les blocs du nom "annotation" avec leur entget et retrouver celui dont j'ai besoin en cherchant celui qui à les coordonnées de base que je connais.

 

Donc ce qu'il me faudrait c'est tout les enames des blocs "annotation", pour pouvoir interrogé le paire poibté (10. ..) et vérifier si elle est égale à celle que je veut. J'ai deja vu qu'on pouvait ressortir la liste de tout les noms des bloc inserés dans le dessin,

est ce possible de faire ce que j'aiemerais?

 

Merci

Modifié par Clément.a
Lien vers le commentaire
Partager sur d’autres sites

coucou

 

ce que tu demandes n'a pas l'air bien compliqué, mais, franchement,

fais un effort pour expliquer car c'est à la limite du compréhensible.

 

je pense te donner une piste de recherche : utilisation du (entnext),

en effet si tu as l'ename d'un bloc qui contient des attributs,

avec (entnext), tu auras la définition de ''entité qui suit le bloc dans la base donc le premier attribut

 

si j'ai bien compris, ce dont il est possible de douter...

 

amicalement

Lien vers le commentaire
Partager sur d’autres sites

Bonjour

 

Oui, désolé pour le message de hier soir j'était un peu fatigué quand je l'ai écrit et je n'ai pas pris le temps de relire je m'en excuse.

 

Ce que me propose -Olivier- me parait bien mais j'arrive pas à l'appliquer avec les coordonnées.

J'ai essayé dans un plan avec un seul bloc mais il ne trouve rien quand je met les coordonnées et quand je les enlèves il me trouve quelque chose.

Voila ce que j'ai écris :

(setq nom (ssget "_X" '((0 . "INSERT")(2 . "annotation")(10 28482.7 408.153 0.0))))

 

D'autre pas quand ça marche nom rend la valeur

<Selection set: aa>

 

Comment ça s'utilise <Selection set: aa>

 

Merci

Lien vers le commentaire
Partager sur d’autres sites

Pour ta première question :

le problème doit provenir de la précision des coordonnées.

 

Soit pt1 les coordonnées et ton point.

 

(setq lupr (/ 1.000000000 (expt 10 (getvar 'luprec))))

 

Permet de définir une précion plus ou moins grande suivant la valeur de la variable LUPREC

Puis :

  (setq ss1 (ssget "_C"
	 (mapcar 'lambda (x) (- x lupr)) pt1)
	 (mapcar 'lambda (x) (+ x lupr)) pt1) (list '(0 . "INSERT") '(2 . "annotation")))

 

Défini une sélection avec une fenêtre autour des coordonnées de ton point.

 

Pour la seconde question :

Le résultat est une sélection. Pour obtenir l'entité, il te suffit de récupérer le premier (et normalement unique objet) de la sélection avec

 

(ssname ss1 0)

 

Olivier

Lien vers le commentaire
Partager sur d’autres sites

Astucieux le coup de la fenêtre suivant le précision, mais je ne devrait pas avoir bessoin de ça car dans ma routine je calcul les coordonnées de la même façon que pour l'inserer donc sa devrait etre bon.

C'est pour mes essais ça ne marchais pas car je reprennais les coordonnées dans le entget de mon bloc et comme je vien de le constaté elles sont arrondi ce qui me surpend, surtout que avec cette arrondi ça me permet pas de les retrouver avec le ssget c'est un peut contradictoire il arrondi les coordonnées mais pas partout, bizzard...

Est ce que quelqu'un à une expliquation à cela?

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Quand tu fais ceci:

(setq nom (ssget "_X" '((0 . "INSERT")(2 . "annotation")(10 28482.7 408.153 0.0))))

 

tu 'quote ton point

'((10 28482.7 408.153 0.0))

Ce qui n'est pas du tout la même chose que:

(cons 10 pt_ins) même si !pt_ins te retourne (28482.7 408.153 0.0)

Si tu fais (rtos (car pt_ins) 2 12) tu pourrais obtenir par exemple: "28482.729563457823" <> 28482.7

 

Quand tu 'quote tu perds la précision, donc la sélection échoue si le point est quelconque...

 

 

(repeat (setq n (sslength nom)) (print (ssname nom (setq n (1- n)))))

Dans ton cas vas retourner tout les noms d'entités contenu dans le jeu de sélection "nom"

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Dans le cas d’une sélection sur un point d’insertion d’une référence de bloc, je ne pense pas que la sélection par "Capture" soit la plus judicieuse, pour cela il suffit de penser aux blocs qui sont définit très loin de leur point d’insertion ou aux blocs circulaire dont l’origine et souvent le centre du cercle.

 

 

Donc pour rebondir sur la proposition de filtre sur le code 10, et compléter les propos de BonusCAD sur l’emploie du quote et des erreurs d’arrondie.

 

On peut également par sécurité introduire des tests relationnels dans les filtres de sélections, par exemple si on a calculé un point de sélection pins.

Pour avoir ses coordonnées par excès et par défaut à 1e-8 prés, on peut faire :

(setq pinSup (mapcar '(lambda (x) (+ x 1e-8)) pins) ; coordonnées par excès
     pinInf (mapcar '(lambda (x) (- x 1e-8)) pins) ; coordonnées par défaut
)

 

Puis il ne reste plus qu’à sélectionner les références du bloc annotation dont le point d’insertion est compris entre ces 2 intervalles de coordonnées:

(setq nom (ssget "_X" (list '(0 . "INSERT") '(2 . "annotation") '(-4 . ">,>,>") (cons 10 pinInf) '(-4 . "<,<,<") (cons 10 pinSup))))

 

A+

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

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é