Aller au contenu

Messages recommandés

Posté(e)

Bon, je déclare forfait pour tester les blocs dans leurs tables respectives.

Le code s'en trouve beaucoup trop alourdi et le temps aussi.

 

J'ai rajouté un contrôle du nombre d'entités dans le bloc et corrigé les bugs rencontrés au fil des tests.

 

Voici la dernière version :

 

;;; par Vincent Dufournaud (vinz34)
;;; mrvd34@hotmail.com
;;;créé le 16.04.2008
;;;modifié le 02.05.2008 : (compare les attributs et analyse par Object.dbx
;;;modifié le 06.05.2008 : corrections d'erreurs, ajout de comparaison du nombre d'entité
dans les blocs.
;;;modifié le 10.06.2009 : ajout de la vérification des calques d'entités

(vl-load-com)

(defun c:cdwg (/       app     cdoc    fichier dbx     name    sp1
       sp2     e       obj     lstmodif	       lstajout
       lstsuppr	       lst     obj     sup     h
      )

 (setq	app  (vlax-get-acad-object)
cdoc (vla-get-activedocument app)
name (vla-get-fullname cdoc)
s    (getvar "date")
t1   (* 86400.0 (- s (fix s)))
 )

 (while (not fichier)
   (setq fichier
   (getfiled
     "Sélection de l'ancien plan"
     (strcat (vl-filename-directory (vla-get-fullname cdoc))
	     "/"
     )
     "dwg"
     4
   )
   )
 )

 (vla-open (if	(< (atoi (substr (getvar "ACADVER") 1 2)) 16)
      (setq dbx (vlax-create-object "ObjectDBX.AxDbDocument"))
      (setq dbx	(vlax-create-object
		  (strcat "ObjectDBX.AxDbDocument."
			  (substr (getvar "ACADVER") 1 2)
		  )
		)
      )
    )
    fichier
 )

 (vla-saveas
   cdoc
   (strcat (substr name 1 (- (strlen name) 4))
    " Modications"
   )
 )

 (setq	sp1 (vla-get-modelspace cdoc)
sp2 (vla-get-modelspace dbx)
 )

 (vlax-for lay	(setq layers (vla-get-layers cdoc))
   (vlax-put lay 'color 253)
   (vla-put-lock lay :vlax-false)
 )

 (vlax-for lay	(vla-get-layers dbx)
   (vla-put-lock lay :vlax-false)
 )

 (vlax-for ent	sp1
   (setq lst1 (cons ent lst1))
 )

 (defun equal-objects (obj1 obj2)
   (vl-every
     (function
(lambda	(p)
  (and
    (or
      (not (vlax-property-available-p obj1 p))
      (equal (vlax-get obj1 p)
	     (vlax-get obj2 p)
	     1e-9
      )
    )
    (or
      (not
	(and (= (vla-get-ObjectName obj1) "AcDbBlockReference")
	     (= (vla-get-HasAttributes obj1))
	)
      )
      (and
	(vl-every 'equal-objects
		  (vlax-invoke obj1 'getAttributes)
		  (vlax-invoke obj2 'getAttributes)
	)
	(= (vla-get-count
	     (vla-item (vla-get-blocks cdoc) (vla-get-name obj2))
	   )
	   (vla-get-count
	     (vla-item (vla-get-blocks dbx) (vla-get-name obj1))
	   )
	)
      )
    )
  )
)
     )
     '(ObjectName     Center	      Radius	     Coordinates
StartPoint     EndPoint	      StartAngle     EndAngle
MajorAxis      RadiusRatio    TextString     InsertionPoint
Width	       Height	      Rotation	     XScaleFactor
YScaleFacor    ZScaleFactor     Layer
      )
   )
 )

 (vlax-put (vla-add layers "0.Ajouts") 'color 172)
 (vlax-put (vla-add layers "0.Modications") 'color 10)
 (vlax-put (vla-add layers "0.Suppressions") 'color 92)

 (vlax-for ent	sp2
   (if	(handent (setq h (vla-get-handle ent)))
     (if (entget (handent h))
(progn
  (setq e (vla-handletoobject cdoc h))
  (cond	((and (not (equal-objects ent e))
	      (vlax-property-available-p e 'layer)
	 )
	 (vla-put-layer e "0.Modications")
	)
  )
  (setq lst1 (vl-remove e lst1))	  
)
(vla-put-layer
  (car (vlax-invoke dbx 'CopyObjects (list ent) sp1))
  "0.Suppressions"
)
     )
     (vla-put-layer
(car (vlax-invoke dbx 'CopyObjects (list ent) sp1))
"0.Suppressions"
     )
   )
 )

 (if lst1
   (foreach n lst1
     (cond ((vlax-property-available-p e 'layer)
     (vla-put-layer n "0.Ajouts")
    )
     )
   )
 )

 (vlax-for b (vla-get-blocks cdoc)
   (vlax-for i	b
     (vla-put-color i 256)
   )
 )

 (vlax-release-object dbx)
 (vla-purgeall cdoc)
 (vla-save cdoc)
 (setq	s  (getvar "date")
t2 (* 86400.0 (- s (fix s)))
tt (- t2 t1)
 )

 (if (> tt 60)
   (progn
     (setq sec	(rem tt 60)
    mn	(strcat (rtos (/ (- tt sec) 60) 2 0) " mn ")
    sec	(strcat (rtos sec 2 0) " s")
     )
   )
   (progn
     (setq sec	(strcat (rtos tt 2 0) " s")
    mn	"0 mn "
     )
   )
 )

 (alert
   (strcat
     "Plan de repérages des modifications\n\nLes ajouts sont en vert\nLes modifications en rouge\nLes suppressions en bleu\n\nTemps d'éxecution : "
     mn
     sec
   )
 )
)

 

Si vous rencontrez des messages d'erreurs, merci de les signaler.

 

Tout commentaire reste le bienvenu.

 

 

 

[Edité le 10/6/2009 par vinz34]

Posté(e)

Re,

 

Avec des objets créés sous Architecture =>

 

Commande: cdwg

Chargement de Base AEC...

Chargement de Base étendue AEC...

Chargement de IU base AEC...

Chargement de Base du projet AEC...

Chargement de Données de nomenclature AEC...

Chargement de Base architecturale AEC...

Chargement de Base de structure AEC...

Chargement de Base d'aires AEC...

Chargement de Base des cotes AEC...

Chargement de Nomenclature AEC...; [surligneur] erreur: type d'argument incorrect:

VLA-OBJECT nil[/surligneur]

 

Que se passe t-il alors ?

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Posté(e)

Salut,

 

Une remarque : Si on lance la routine, dans la BD "Selection de l'ancien plan", on ne peut pas décider de stopper la manip,.. ?

 

Beug ou voulu ?

 

C'est un choix suite à la remarque de (gile) :

 

Juste une petite remarque, il n'y a pas de contrôle au cas où l'utilisateur ferait "Annuler" dans la boite de dialogue getfiled.

 

J'ai choisi de mettre une boucle plûtot qu'un if comme me le conseillait (gile).

 

Tu peux toujours remplacerle while par un if.

 

[Edité le 14/5/2008 par vinz34]

Posté(e)

Salut,

 

Bien vu pour la balise, c'est corrigé.

 

Pour ton erreur du type erreur: type d'argument incorrect:VLA-OBJECT nil , je pense l'avoir trouvé, je fais encore des tests et je modifierai le code en conséquence.

 

Au sujet des blocs je n'abandonne pas mais je manque de temps.

  • 2 semaines après...
Posté(e)

Salut lili2006 ,

 

Le "vla-object nil" signifie la même chose que le "lentytip nil" avec autolisp.

Ca signifie que l'objet traité n'a pas de définition ou tout simplement qu'il n'y en a pas.

  • 5 mois après...
Posté(e)

Bonjour,

 

Il m'arrrive d'avoir quelques soucis avec cette routine.

 

Lorsque j'utilise cette routine avec un simple dessin (5 à 6 objets), elle fonctionne sans problème.

 

Par contre lorsque je l'utilise avec un plan archi par exemple Autocad plante quelque fois.

 

Quelqu'un arrait-il une idée.

 

Merci

Excalibur

  • 7 mois après...
Posté(e)

Bonjour vinz34

 

J'ai testé votre lisp et c'est super top, ça fonctionne très bien mais j'ai remarqué qu'il ne prenait pas en compte si un élément à changé de calque ou de couleur, y a t'il une possibilité.

 

Encore bravo pour ce lisp car il nous fait gagner beaucoup de temps.

 

Salutations

Posté(e)

Bonjour à tous,

 

J'ai remarqué une anomalie.

Le code permet de voir si des entités ont changé de calques mais pas de couleur

 

J'ai modifié volontairement la couleur d'une polyligne mais toujours dans le même calque et le lisp ne l'a pas vu. Mais c'est à mon sens qu'un petit cas.

 

John.

Posté(e)

Sur les attributs, il y a un bug.

Je n'ai pas modifié de place les attributs de mes blocs et le code me les a mis quand même mis en modifications ceci à cause de la commande ATTSYNC non mis à jour.

Posté(e)

Salut,

 

Ca me reviens maintenant, je n'acvais pas intégré les changements de calque ni de couleur (et d'autres propriétés) étant donné que le but initial était de voir les réelles modifications (aménagement des locaux, modifications structurelles,....) et non pas purement graphiques.

Quand aux attributs, je les utilise très peu, je vais regarder mais je ne te promets rien.

 

Si tu tiens à tester aussi la couleur, tu peux rajouter COLOR à la liste suivante que tu retrouveras dans lisp (merci à (gile) pour cette partie du code) :

 

'(ObjectName     Center	      Radius	     Coordinates

StartPoint     EndPoint	      StartAngle     EndAngle

MajorAxis      RadiusRatio    TextString     InsertionPoint

Width	       Height	      Rotation	     XScaleFactor

YScaleFacor    ZScaleFactor     Layer

      ) 

.

 

  • 2 ans après...
Posté(e)

Bonjour,

 

Je tenais à remercier vinz34 pour son Lisp et (gile) pour son complément qui permet de comparer 2 dwg, il me sert régulièrement...

 

mais je bute sur la comparaison de 2 fichiers: j'ai la même erreur que lili2006 (erreur: type d'argument incorrect:VLA-OBJECT nil)...

 

vinz34 a répondu

Le "vla-object nil" signifie la même chose que le "lentytip nil" avec autolisp.

Ca signifie que l'objet traité n'a pas de définition ou tout simplement qu'il n'y en a pas.

 

Mais je ne vois ce que signifie l'absence de définition?

 

Est ce quelqu'un pourrait me renseigner?

 

Merci d'avance.

Posté(e)

Salut,

 

Il y a surement un problème avec un type d'entité que je n'aurais pas géré.

Si tu le peux, envoies moi le fichier par MP pour que je rectifies le tir en complétant le lisp.

Posté(e)

ohhhhhhhhh ! je crois que je suis amoureux là...

Merci à toi, ce truc, je le teste immédiatement

 

edit : je viens de tester, c'est magique.

Si j'étais pas déjà marié, je t'épouserai tiens (bon ma femme sera pas d'accord de toutes façons)

  • 1 an après...
Posté(e)

Bonjour,

je voulais moi aussi t'adresser mes félicitations et mes remerciements pour cet excellent lisp :wub:

 

Puisque tu souhaitais des remarques en voici une petite :

la fenêtre qui s'ouvre pour choisir le dwg a comparer est un peu petite, y-t-il moyen de l'agrandir un peu ?

 

Merci encore

 

Ciao.

 

Merci a mikl63 de me l'avoir fait découvrir ;)

 

Salvatore

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Posté(e)

Juste une question toute bête : la dernière version du lisp se trouve en 1ère page ? c'est celle que j'ai récupéré en tout cas

Michaël, je crois que la dernière version se trouve à la réponse 25 :unsure:

 

Ciao.

 

Salvatore

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Posté(e)

J'ai rajouté un contrôle du nombre d'entités dans le bloc et corrigé les bugs rencontrés au fil des tests.

 

Voici la dernière version :

 

;;;modifié le 10.06.2009 : ajout de la vérification des calques d'entités

Si vous rencontrez des messages d'erreurs, merci de les signaler.

 

Tout commentaire reste le bienvenu.

Bonjour,

j'ai un souci : j'ai testé d'abord la version originale qui se trouve à la 1ere page et ça marche bien.

Puis j'ai testé la version qui se trouve à la réponse 25 et là AutoCAD sa plante !:angry:

 

Je travaille avec AutoCAD 2013, est-ce que ce lisp fonctionne avec la version 2013 ?

 

Merci d'avance vinz34 pour ton aide (et aux autres aussi si quelqu’un connait la réponse...).

 

Salvatore

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Posté(e)

ca fais depuis 2009 que je l'utilise

il m'a beaucoup aidé

utile quand il n'y a pas les nuages de révision.

Vous fîtes ce que vous pûtes

et vous m'épatâtes !!!!

  • 3 mois après...

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é