Aller au contenu

COMPARER DEUX BLOCS


PHILPHIL

Messages recommandés

HELLO

 

est il possible de comparer deux blocs de noms différents pour savoir s'ils sont identique

 

j'ai utilisé "DWG COMPARE" puis importé des entités d'un fichier a l'autre

 

et je me retrouve avec des blocs dont le nom commence par "$0$" ou "$1$"

hors je sais que j'ai de blocs identiques dans se fichier qui on des noms sans "$0$" ou "$1$"

 

je voudrais les comparer et s'ils sont identique remplacer les "$0$ ... " par l'autre

 

ce qui pourrait etre utile pour les fichiers issus de ARCHICAD

 

bon week end

 

Phil

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

Salut,

ci dessous un code qui extrait la définition (dxf) d'un bloc.

le pb c'est que tu ne peux pas directement comparer, car certains codes changent, alors que la représentation est la même (pare exemple les entity name, les handle, etc ...

donc il te faudrait décortiquer les codes dxf de chaque entité pour savoir quels codes prendre en compte ou pas.

 

; ****************************************************************************
;;§/dxf/extrait la definition d'un block sous forme de liste/nombl
;;retourne une liste de listes :
;;;(((0 . "BLOCK");_entete par tblsearch
;;;   (2 . "NUM")
;;;   (70 . 2)
;;;   (10 0.0 0.0 0.0)
;;;   (-2 . <Nom d	'entité: 7fffa2f06f0>);_ename de la 1ère entité du bloc
;;; );_fin retourné par tblsearch

;;;  ;;première entité (retournée par entnext)
;;;  ((-1 . <Nom d 'entité: 7fffa2f06f0>)
;;;    (0 . "LWPOLYLINE")
;;;    (330 . <Nom	d 'entité: 7fffa2f06e0>)
;;;    (5 . "25717")
;;;    (100 . "AcDbEntity")
;;;    (67 . 0)
;;;    (8 .
;;;       "0"
;;;    )
;;;    (62 . 255)
;;;    (100 . "AcDbPolyline")
;;;    ...
;;;    (210 0.0 0.0 1.0)
;;;  )

;;;  ;;deuxième entité (retournée par entnext)
;;;  ((-1
;;;     . <Nom d 'entité: 7fffa2f0700>)
;;;    (0 . "ATTDEF")
;;;    (330 . <Nom	d 'entité: 7fffa2f06e0>)
;;;    (5 . "25718")
;;;    (100 . "AcDbEntity")
;;;    ...
;;;    (280 . 0)
;;;  )
;;;);;fin de définition de bloc, la prochaine entité retournée par entnext sera un endblock

(defun pw_block_def ( nombl / debut res extrait ent lent )
(setq nombl (strcase nombl))
(setq debut 't)
 
(defun extrait ( / )
 (while (setq ent (entnext ent))
(setq res (cons (entget ent) res))
 )
)
 
(while (setq lent (tblnext "block" debut))
 (setq debut nil)
 (if (= nombl (strcase (cdr (assoc 2 lent))));;si c'est la definition qu'on cherche
   (progn
     (setq res (cons lent res));; le debut de la def
     (setq res (cons (entget (setq ent (cdr (assoc -2 lent)))) res));;l'entget du 1er -2
     (extrait)
   )
  )
)
 (reverse res)
)

----------------------------------------------------------------------

Site: https://www.g-eaux.fr

Blog: http://g-eaux.over-blog.com

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é