vinz34 Posté(e) le 6 mai 2008 Auteur Posté(e) le 6 mai 2008 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]
lili2006 Posté(e) le 8 mai 2008 Posté(e) le 8 mai 2008 Bonjour à toutes et tous, D'après le peu de test réalisé, tout semble fonctionner.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 ? Merci encore de ce partage vinz34 Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lili2006 Posté(e) le 8 mai 2008 Posté(e) le 8 mai 2008 Re, Avec des objets créés sous Architecture => Commande: cdwgChargement 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/
vinz34 Posté(e) le 13 mai 2008 Auteur Posté(e) le 13 mai 2008 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]
lili2006 Posté(e) le 13 mai 2008 Posté(e) le 13 mai 2008 Bonsoir à toutes et tous, Ok ! Merci de ta réponse vinz34. PS: Je pense que tu as du oublier de fermer une balise,... Merci encore, ton lisp est vraiment super pratique et semble globalement fiable (hormis les blocs mais c'est normal à ce stade si j'ai bien compris). Au plaisir, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
vinz34 Posté(e) le 14 mai 2008 Auteur Posté(e) le 14 mai 2008 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.
lili2006 Posté(e) le 14 mai 2008 Posté(e) le 14 mai 2008 Bonsoir à toutes et tous, vinz34, que veux dire erreur: type d'argument incorrect:VLA-OBJECT nil ? Au sujet des blocs je n'abandonne pas mais je manque de temps. Alors là, ça va être de la bombe,... Bon courage & merci encore. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
vinz34 Posté(e) le 26 mai 2008 Auteur Posté(e) le 26 mai 2008 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.
lili2006 Posté(e) le 26 mai 2008 Posté(e) le 26 mai 2008 Bonjour à toutes et tous, Merci de te réponse vinz34. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
excalibur Posté(e) le 30 octobre 2008 Posté(e) le 30 octobre 2008 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
fauxsuisse Posté(e) le 9 juin 2009 Posté(e) le 9 juin 2009 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
vinz34 Posté(e) le 10 juin 2009 Auteur Posté(e) le 10 juin 2009 Salut, J'apprécie cette remarque, après un an d'utilisation je ne m'en était pas aperçu (je n'ai pas ressenti le besoin de l'ajouter)Correcton apportée sur la réponse 25 de ce même sujet.
chris_mtp Posté(e) le 13 juin 2009 Posté(e) le 13 juin 2009 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.
chris_mtp Posté(e) le 13 juin 2009 Posté(e) le 13 juin 2009 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.
vinz34 Posté(e) le 16 juin 2009 Auteur Posté(e) le 16 juin 2009 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 ) .
vindaro Posté(e) le 8 septembre 2011 Posté(e) le 8 septembre 2011 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.
vinz34 Posté(e) le 13 septembre 2011 Auteur Posté(e) le 13 septembre 2011 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.
mikl63 Posté(e) le 14 septembre 2011 Posté(e) le 14 septembre 2011 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)
mikl63 Posté(e) le 14 septembre 2011 Posté(e) le 14 septembre 2011 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
salvanorigatore Posté(e) le 19 juin 2013 Posté(e) le 19 juin 2013 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 "
salvanorigatore Posté(e) le 19 juin 2013 Posté(e) le 19 juin 2013 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 casMichaë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 "
salvanorigatore Posté(e) le 20 juin 2013 Posté(e) le 20 juin 2013 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 "
capde06 Posté(e) le 20 juin 2013 Posté(e) le 20 juin 2013 ca fais depuis 2009 que je l'utiliseil 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 !!!!
bono05 Posté(e) le 9 octobre 2013 Posté(e) le 9 octobre 2013 Bonjour à tous, Je voudrais tester ce lisp...mais est-ce la dernière version qui se trouve sur la page 2? :unsure: D'avance merci!
Messages recommandé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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant