Aller au contenu

Faire un synoptique à partir d'un plan d'implantation


zza427

Messages recommandés

Bonjour,je relance mon sujet que j'avais fait paraitre dans le mauvais forum (autocad 2004).

 

A partir d'un plan d'implantation dans lequel j'ai un bloc inséré plusieur fois avec des attributs différents, je souhaite faire un synoptique.

Du coup je cherche une commande ou un lisp qui permettrait de récuperer des blocs existant dispersés et de les aligner avec un pas. Si en plus on peut tenir compte de la valeur alphanumérique d'un des attributs pour les ordonner dans l'alignement, ce serait parfait.

 

Si vous connaissez quelque chose de ce type ou si vous avez une piste, je serais intéressé.

 

Merci.

 

J'ai depuis réfléchi, pour aligner les blocs, il me semble qu'il faut récuperer les coordonnées du 1er bloc, le déplacer de X= -1*ancienne coordonnée x + A et Y= -1* ancienne coordonnée y ; où A est une valeur incrémenté à chaque bloc traité.

Ce que j'ai du mal a concevoir c'est si il est possible de traiter les blocs dans l'ordre alphanumérique d'un attribut, est ce qu'il existe une fonction qui fait ca ou est ce que c'est tout un programme à faire?

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Tu peux essayer ça :

 

(defun c:synoptique (/ att dist tag bloc elst base ss lst i)
 (if
   (and
     (setq att (car (nentsel "\nSélectionnez un attribut: ")))
     (= (getpropertyvalue att "LocalizedName") "Attribut")
     (setq dist (getdist "\nSpécifiez le pas: "))
   )
    (progn
      (setq tag  (getpropertyvalue att "Tag")
     bloc (getpropertyvalue att "OwnerId")
     elst (entget bloc)
     base (cdr (assoc 10 elst))
     ss	  (ssget "_X"
		 (list (assoc 0 elst) (assoc 2 elst) (assoc 410 elst))
	  )
      )
      (repeat (setq i (sslength ss))
 (setq lst (cons (ssname ss (setq i (1- i))) lst))
      )
      (setq lst
	 (vl-sort
	   lst
	   '(lambda (x y)
	      (< (getpropertyvalue x tag) (getpropertyvalue y tag))
	    )
	 )
     i	 0
      )
      (foreach	b lst
 (setpropertyvalue
   b
   "Position"
   (mapcar '+ base (list (* i dist) 0 0))
 )
 (setq i (1+ i))
      )
    )
 )
 (princ)
)

 

Un petit screencast.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

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é