Aller au contenu

*super purge*


(gile)

Messages recommandés

J'ouvre un nouveau fil pour faire suite à celui-ci qui devenait long et confus.

 

Donc, avec l'aide Fraid, sergeluc et Patrick_35, nous en sommes à 3 routines pas encore tout à fait abouties semble-t-il.

 

Raster_purge qui supprime du dictionnaire des images les images non réfrencées ou non contenues dans des blocs :

 

Version 1.1

 

;;; RASTER_PURGE version 1.1
;;; Purge les images raster non référencées ou non contenues dans des blocs

(defun c:raster_purge (/ AcDoc lay l_lst im_dict n im_lst ss name obj bloc ent)

 ;; Chargement des fonctions ActiveX

 (vl-load-com)

 ;; AcDoc : pointeur vers le document actif

 (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)))

 ;; Dévérouillage de tous les calques

 (repeat (setq n (vla-get-count (vla-get-Layers AcDoc)))
   (setq lay (vla-item (vla-get-Layers AcDoc) (setq n (1- n))))
   (if	(= :vlax-true
   (vla-get-lock lay)
)
     (progn
(vla-put-lock lay :vlax-false)
(setq l_lst (cons lay l_lst))
     )
   )
 )

 ;; Recherche du "dictionnaire" des images (s'il existe)

 (setq
   im_dict (vl-catch-all-apply
      'vla-item
      (list (vla-get-Dictionaries acdoc) "ACAD_IMAGE_DICT")
    )
 )
 (if (vl-catch-all-error-p im_dict)
   (setq im_dict nil)
 )

 ;; Constitution d'une liste des images contenues dans la "bibliothèque"

 (if im_dict
   (progn
     (repeat (setq n (vla-get-Count im_dict))
(setq im_lst (cons (vla-item im_dict (setq n (1- n))) im_lst))
     )

     ;; Suppression de la liste des images insérées dans le dessin

     (if (setq ss (ssget "_X" '((0 . "IMAGE"))))
(repeat	(setq n (sslength ss))
  (setq	name   (vla-get-Name
		 (vlax-ename->vla-object (ssname ss (setq n (1- n))))
	       )
	im_lst (vl-remove (vla-item im_dict name) im_lst)
  )
)
     )

     ;; Suppression de la liste des images contenues dans les blocs insérées

     (if (setq ss (ssget "_X" '((0 . "INSERT"))))
(repeat	(setq n (sslength ss))
  (setq
    obj	(vlax-ename->vla-object (ssname ss (setq n (1- n))))
  )
  (if (vlax-property-available-p obj 'EffectiveName)
    (setq name (vla-get-EffectiveName obj))
    (setq name (vla-get-Name obj))
  )
  (setq bloc (vla-item (vla-get-blocks AcDoc) name))
  (if (/= 0 (vla-get-count bloc)) ;_ éviter les blocs vides
    (repeat (setq m (vla-get-count bloc))
      (setq ent (vla-item bloc (setq m (1- m))))
      (if (= (vla-get-ObjectName ent) "AcDbRasterImage")
	(setq im_lst
	       (vl-remove (vla-item im_dict (vla-get-Name ent))
			  im_lst
	       )
	)
      )
    )
  )
)
     )

     ;; Suppression du dessin des images restant dans la liste

     (mapcar '(lambda (x) (vl-catch-all-apply 'vla-delete (list x)))
      im_lst
     )
   )
 )

 ;; Restauration de l'état des calques

 (if l_lst
   (mapcar '(lambda (x)
       (vla-put-lock x :vlax-true)
     )
    l_lst
   )
 )
 (princ)
)

 

Xref_purge qui purge les xref non référencées :

 

Version 1.2

 

;;; XREF_PURGE version 1.2
;;; Purge les xrefs non référencées

(defun c:xref_purge (/ AcDoc lay n l_lst blocks name n_lst cnt item obj x_lst)

 ;; Chargement des fonctions ActiveX

 (vl-load-com)

 ;; AcDoc : pointeur vers le document actif

 (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)))

 ;; Dévérouillage de tous les calques

 (repeat (setq n (vla-get-count (vla-get-Layers AcDoc)))
   (setq lay (vla-item (vla-get-Layers AcDoc) (setq n (1- n))))
   (if	(= :vlax-true
   (vla-get-lock lay)
)
     (progn
(vla-put-lock lay :vlax-false)
(setq l_lst (cons lay l_lst))
     )
   )
 )

 ;; Pour chaque nom de xref de la collection, on teste si une référence
 ;; est présente dans le dessin, si non la xref est détachée du dessin

 (vlax-for x (setq blocks (vla-get-Blocks AcDoc))
   (if	(and (= :vlax-true (vla-get-isXref x))
     (/= 0 (vla-get-count x))
     (not (member (setq name (vla-get-name x)) n_lst))
)
     (setq n_lst (cons name n_lst))
   )
 )
 (foreach n n_lst
   (repeat
     (setq cnt (vla-get-Count (setq item (vla-item blocks (eval n)))))
      (setq obj (vla-item item (setq cnt (1- cnt))))
      (if (and	(= (vla-get-objectname obj) "AcDbBlockReference")
	(member (vla-get-Name obj) n_lst)
   )
 (setq x_lst (cons (vla-get-Name obj) x_lst))
      )
   )
 )
 (foreach n n_lst
   (if	(member (eval n) x_lst)
     (setq n_lst (vl-remove (eval n) n_lst))
   )
 )
 (foreach n n_lst
   (if	(not
  (ssget "_X"
	 (list (cons 0 "INSERT") (cons 2 (eval n)))
  )
)
     (vla-detach (vla-item (vla-get-Blocks AcDoc) (eval n)))
   )
 )

 ;; Restauration de l'état des calques

 (if l_lst
   (mapcar '(lambda (x)
       (vla-put-lock x :vlax-true)
     )
    l_lst
   )
 )
 (princ)
) 

 

Et enfin Spurge qui, après avoir effectué raster_purge et xref_purge, purge tout le dessin dans un boucle pour s'assurer que les sous-blocs des blocs imbriqués sont purgés aussi :

 

Version 1.3

 

;;; SPURGE version 1.3
;;; Purge tout, y compris les blocs imbriqués, les blocs vides,
;;; les xrefs et les images non référencées

(defun c:spurge
	(/	AcDoc  lay    l_lst  ss	    n	   obj
	 name	bloc   ent    r_lst  x_lst  p_lst  c_lst
	 m
	)
 (vl-load-com)
 (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)))

 ;; Purge les xrefs et rasters non référencées

 (c:xref_purge)
 (c:raster_purge)

 ;; Dévérouillage de tous les calques

 (repeat (setq n (vla-get-count (vla-get-Layers AcDoc)))
   (setq lay (vla-item (vla-get-Layers AcDoc) (setq n (1- n))))
   (if	(= :vlax-true
   (vla-get-lock lay)
)
     (progn
(vla-put-lock lay :vlax-false)
(setq l_lst (cons lay l_lst))
     )
   )
 )

 ;; r_lst : liste des blocs et "sous-blocs" insérés
 ;; x_lst : liste des xrefs insérées

 (setq ss (ssget "_X" '((0 . "INSERT"))))
 (if ss
   (progn
     (repeat (setq n (sslength ss))
(setq
  obj (vlax-ename->vla-object (ssname ss (setq n (1- n))))
)
(if (vlax-property-available-p obj 'EffectiveName)
  (setq name (vla-get-EffectiveName obj))
  (setq name (vla-get-Name obj))
)
(if (and
      (= 0
	 (vla-get-count (vla-item (vla-get-Blocks AcDoc) name))
      )
      (= :vlax-false
	 (vla-get-isXref
	   (vla-item (vla-get-Blocks AcDoc) name)
	 )
      )
    )
     (vla-delete obj) ;_ Suppression des blocs vides
   (if (= :vlax-true
	  (vla-get-isXref
	    (vla-item (vla-get-Blocks AcDoc) name)
	  )
       )
     (if (not (member name x_lst))
       (setq x_lst (cons name x_lst))
     )
     (if (not (member name r_lst))
       (setq r_lst (cons name r_lst))
     )
   )
  )
)

     ;; Ajout des "sous-blocs" des blocs insérés à r_lst

     (setq n 0)
     (if r_lst
(while (setq name (nth n r_lst))
  (setq bloc (vla-item (vla-get-blocks acDoc) name))
  (repeat (setq m (vla-get-count bloc))
    (setq ent (vla-item bloc (setq m (1- m))))
    (if	(and (= (vla-get-ObjectName ent) "AcDbBlockReference")
	     (not (member (vla-get-name ent) r_lst))
	)
      (setq
	r_lst
	 (reverse (cons (vla-get-Name ent) (reverse r_lst)))
      )
    )
  )
  (setq n (1+ n))
)
     )
   )
 )

 (setq p_lst T)
 (while p_lst
   (vla-PurgeAll AcDoc)

   ;; c_lst liste des définitions de blocs de la collection

   (setq c_lst nil)
   (repeat (setq n (vla-get-count (vla-get-blocks AcDoc)))
     (setq
c_lst
 (cons (vla-get-name
	 (vla-item (vla-get-blocks AcDoc) (setq n (1- n)))
       )
       c_lst
 )
     )
   )

   ;; p_lst : liste des blocs à purger, soit les blocs de la collection ...
   ;; ... moins les blocs "*Model_Space" "*Paper_Space*" et les blocs insérées

   (setq p_lst	(vl-remove-if
	  '(lambda (x)
	     (or (= (substr x 1 1) "*")
		 (member x r_lst)
	     )
	   )
	  c_lst
	)
   )

   ;; ... moins les xrefs insérées et les blocs qu'elles contiennent

   (mapcar '(lambda (x)
       (setq p_lst
	      (vl-remove-if
		'(lambda (y)
		   (wcmatch y (strcat x "*"))
		 )
		p_lst
	      )
       )
     )
    x_lst
   )
 )

 (vla-AuditInfo AcDoc :vlax-true)

 ;; Restauration de l'état des calques

 (if l_lst
   (mapcar '(lambda (x)
       (vla-put-lock x :vlax-true)
     )
    l_lst
   )
 )
 (princ)
)

[Edité le 13/6/2006 par (gile)][Edité le 13/6/2006 par (gile)][Edité le 6/7/2006 par (gile)][Edité le 8/7/2006 par (gile)]

[Edité le 9/10/2006 par (gile)]

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

Lien vers le commentaire
Partager sur d’autres sites

les 2 autres me donne le meme message d'erreur

 

Il semblerait donc qu'il y ait déjà un problème avec raster_purge, c'est bizarre parceque tout à l'heure tu disais qu'il purgeait trop (images insérées dans les blocs).

 

Le message ; "; erreur: Erreur Automation. Aucune description n'a été entrée." intervient, par exemple, quand, pour trouver un élément dans une collection, on fait (vla-item collection nom) et que nom est à nil.

 

Dans ces LISP, l'argument "nom" est soit un index (là il ne devrait pas y avoir de souci) soit acquis avec (vla-get-Name ...)

 

Dans le dessin incriminé, peux tu essayer, si tu as le temps, de faire :

 

(vla-get-Name (vlax-ename->vla-object (car (entsel))))

 

en sélectionnant les images insérées ou celles contenues dans les blocs (après décomposition, bien sûr) pour voir s'il t'es bien retourné le nom de l'image. C'est peut-être une piste.

 

Ou, si tu veux, m'envoyer un dessin (pas trop lourd) pour lequel tu as ce message.

 

gilecantel(a)wanadoo.fr

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

Lien vers le commentaire
Partager sur d’autres sites

Peut-être une autre piste : la présence d'un bloc vide (ne contennt aucune entité) inséré dans le dessin ferait retourner ce message d'erreur à l'interprétation de :

(setq ent (vla-item bloc (setq m (1- m)))).

 

Je modifie SPURGE pour qu'il efface du dessin les blocs vides avant de lancer la purge qui les supprimera définitvement. (version 1.1)

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

Lien vers le commentaire
Partager sur d’autres sites

Comme il est nécessaire d'exécuter xref_purge et raster_purge avant de faire la boucle pour purger les blocs imbriqués, j'ai modifié raster_purge pour tester l'éventuelle présence de blocs vides (version 1.1) et re-modifié spurge en conséquence (version 1.2).

 

On va finir par y arriver :cool:

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

Lien vers le commentaire
Partager sur d’autres sites

J'ai essayé sur ton dessin test, çà a marché.

 

S'il subsiste un problème c'est peut-être une histoire de version d'AutoCAD, j'ai vu qu'il était au format AutoCAD 2000, si tu travailles effectivement sur une 2000, il y a parfois des problèmes avec certaines fonctions vlax...

 

PS j'ai testé avec le dessin au format 2000 et au format 2007

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Gile

Je viens de récupérer ta dernière version 1.1 je testerai demain (le 14-06) sur 2000 et 2006

Tant qu'il sagit d'xref et de purge cela m'intéresse .

A+

de monis en monis de disponibilité en ce moment,mais je ne désespère pas.....

 

[Edité le 16/6/2006 par sergeluc]

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Bonjour Gile

j'ai testé sur autocad2000 et 2006 avec un plan de 1.8méga et 2 xrefs.

 

spurge version 1.2 avec 1 xref chargé et l'autre chemin non reconnu .

j'ai arreté la procédure au bout de 5 minutes.(trop long)

 

XREF_PURGE seul

aucun résultat .les xrefs conservent leur état initial quel qu'il soit.

 

et purge_xref du 5/6/2006 à 21:15 avec les corrections pour la version 2000 .

détache les xrefs quelque soit leur état (chemin reconnu ou pas)

 

a+

 

Lien vers le commentaire
Partager sur d’autres sites

Houlà ! Je les avais presque oublié celles là !

 

Bon je vais essayer dans l'ordre, en expliquant bien à quoi sert chaque routine.

 

XREF_PURGE seul

aucun résultat .les xrefs conservent leur état initial quel qu'il soit.

 

XREF_PURGE purge du dessin les xref non référencées, c'est à dire celles qui ont été insérées puis effacées elles ne sont plus apparentes dans le dessin mais apparaissent toujours dans la palette des xrefs (comme non référencées), en vlisp on les retrouve aussi dans la collection des blocs du dessin.

Chez moi çà fonctionne très bien.

 

et purge_xref du 5/6/2006 à 21:15 avec les corrections pour la version 2000 .

détache les xrefs quelque soit leur état (chemin reconnu ou pas)

 

PURGE_XREF détache du dessin les xref introuvables (celles dont le chemin n'est plus valide) elles sont aussi signalée comme telle dans la palette.

 

Je crois me souvenir que c'est un problème de version avec 2000.

 

Je te propose de faire un test :

 

après avoir fait (vl-load-com), fait :

 

(vla-get-Name (vlax-ename->vla-object (car (entsel)))) et sélectionne une xref

 

s'il est retourné nil, c'est que la propriété n'est accessible la routine ne peut pas marcher avec 2000. si c'est T, essaye çà :

 

(vla-get-Path

(vla-item (vla-get-blocks

(vla-get-ActiveDocument (vlax-get-acad-object))

)

(vla-get-Name (vlax-ename->vla-object (car (entsel))))

)

)

 

et vérifie que le chemin est valable.

 

SPURGE exécute xref_purge et raster_purge puis purge tous le dessin en faisant une purge "profonde" des blocs imbriqués.

 

[Edité le 25/6/2006 par (gile)]

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

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

bonjour Gile

 

je me permet de revenir sur ce lisp

 

car purge xref enleve les xref qui sont déchargées

et la c'est embétant

 

je voulais seulement les xrefs sans reference (supprimer manuelement)

 

en plus sur 2006 le fonctionnement de spurge me parait aléatoire

des fois sa marche et des fois non sur un meme plan

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Je n'avais effectivement pas pensé aux xref déchargées et xref_purge détachait toutes les xrefs non présentes dans le dessin.

 

Le seul moyen que j'ai trouvé pour différencier les xrefs déchargées c'est qu'elles ne "comptent" aucune entité. Donc je modifie xref_purge pour qu'il détache toutes les xrefs non présentes dans le dessin sauf celles qui n'ont aucune entité (ce qui, à priori, ne devrait concerner que les xrefs déchargées).

 

Pour ce concerne le fonctionnement aléatoire sur AutoCAD 2006, je ne suis pas sûr de pouvoir t'aider, je n'ai que la version 2007 et je dois avouer n'avoir pas fais énormément de tests approfondis et être proche de la limite de mes connaissances en VisualLISP.

 

[Edité le 6/7/2006 par (gile)]

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

Lien vers le commentaire
Partager sur d’autres sites

La modification apportée à xref_purge (version 1.1) pour éviter de purger les xrefs déchargées faisait entrer SPURGE (qui purge les blocs vides) dans une boucle sans fin.

 

Je modifie SPURGE (version 1.3) pour corriger le problème.

 

 

Pour sergeluc,

 

Je te remercie mais j'avais fait ce nouveau sujet pour éviter les confusions qui avaient cours dans le sujet précédent, il n'est question ici que des xrefs non-référencées (pas des xrefs introuvables).

 

[Edité le 8/7/2006 par (gile)]

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

Lien vers le commentaire
Partager sur d’autres sites

  • 2 mois après...

bonjour Gile

 

Je me permet de ramener cette discussion sur le devant

car il arrive parfois que cela tourne en boucle

 

j'ai beau chercher je ne trouve pas pourquoi

 

je precise que c'est la version 1.3

 

je viens de m'apercevoir que ce sont des dessins fait a partir de gabarits fournis par les clients qui on peut etre Autodesk Architectural Desktop ou une autre application perpendiculaire

 

est-ce lié?[Edité le 12/9/2006 par Fraid]

 

il y a 2 blocs récalcitrant

archtick et ELLIPSE

ainsi que le calque defpoint sans cotes :casstet:

 

[Edité le 12/9/2006 par Fraid]

Lien vers le commentaire
Partager sur d’autres sites

Salut Fraid

 

Décidément je crois que je me débrouille mieux pour faire des LISP qui créent ou qui transforment des objets graphiques que pour "nettoyer" un dessin :casstet:

 

Je peux difficilement répondre à la question comme ça, il faudrait d'abord essayer de situer le (ou les) bug(s) dans une des sous routines Raster_purge ou xref_purge ou dans la routine Spurge.

Depuis que j'ai découvert des zombies dans certains blocs et qu'ils faisaient planter Edit_Bloc je m'attends à tout.

 

Le plus simple serait que tu m'envoie un fichier ou fragment de fichier (si confidentiel) avec les blocs incriminés. Pour le calque Defpoint, je vais essayer de voir, demain, je devrais avoir un peu de temps, ce soir je suis trop fatigué.

 

gilecantel(at)wandoo.fr

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

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Je n'ai pas réussi à trouver pourquoi le bloc _Archtick n'est pas purgeable ni avec la commande PURGER ni avec la fonction vla-PurgeAll, si le fichier est issu d'une suite verticale ou d'un autre logiciel ceci explique peut-être cela, mais ça ne m'aide pas à comprendre.

Toujours est il que j'ai pu contourner le problème en supprimant tous les blocs non référencés avec vla-delete plutôt que vla-PurgeAll.

 

Pour le calque Defpoints, dans le fichier que tu m'as envoyé, les fenêtres de présentation et les polylignes qui ont servi à les faire sont sur ce calque, il n'est donc pas supprimable en l'état.

 

Je poste ici une nouvelle version provisoire de Spurge en attendant de trouver quelque chose de fiable pour le calque Defpoints.

 

;;; SPURGE version 1.40
;;; Purge tout, y compris les blocs imbriqués, les blocs vides,
;;; les xrefs et les images non référencées

(defun c:spurge
	(/	AcDoc  lay    l_lst  ss	    n	   obj
	 name	bloc   ent    r_lst  x_lst  p_lst  c_lst
	 m
	)
 (vl-load-com)
 (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)))

 ;; Purge les xrefs et rasters non référencées

 (c:xref_purge)
 (c:raster_purge)

 ;; Dévérouillage de tous les calques

 (vlax-for c (vla-get-Layers AcDoc)
   (if	(= :vlax-true
   (vla-get-lock c)
)
     (progn
(vla-put-lock c :vlax-false)
(setq l_lst (cons c l_lst))
     )
   )
 )

 ;; r_lst : liste des blocs et "sous-blocs" insérés
 ;; x_lst : liste des xrefs insérées

 (setq ss (ssget "_X" '((0 . "INSERT"))))
 (if ss
   (progn
     (repeat (setq n (sslength ss))
(setq
  obj (vlax-ename->vla-object (ssname ss (setq n (1- n))))
)
(if (vlax-property-available-p obj 'EffectiveName)
  (setq name (vla-get-EffectiveName obj))
  (setq name (vla-get-Name obj))
)
(if (and
      (= 0
	 (vla-get-count (vla-item (vla-get-Blocks AcDoc) name))
      )
      (= :vlax-false
	 (vla-get-isXref
	   (vla-item (vla-get-Blocks AcDoc) name)
	 )
      )
    )
  (vla-delete obj) ;_ Suppression des blocs vides
  (if (= :vlax-true
	 (vla-get-isXref
	   (vla-item (vla-get-Blocks AcDoc) name)
	 )
      )
    (if	(not (member name x_lst))
      (setq x_lst (cons name x_lst))
    )
    (if	(not (member name r_lst))
      (setq r_lst (cons name r_lst))
    )
  )
)
     )

     ;; Ajout des "sous-blocs" des blocs insérés à r_lst

     (setq n 0)
     (if r_lst
(while (setq name (nth n r_lst))
  (setq bloc (vla-item (vla-get-blocks acDoc) name))
  (repeat (setq m (vla-get-count bloc))
    (setq ent (vla-item bloc (setq m (1- m))))
    (if	(and (= (vla-get-ObjectName ent) "AcDbBlockReference")
	     (not (member (vla-get-name ent) r_lst))
	)
      (setq
	r_lst
	 (reverse (cons (vla-get-Name ent) (reverse r_lst)))
      )
    )
  )
  (setq n (1+ n))
)
     )
   )
 )

 ;; c_lst liste des définitions de blocs de la collection

 (setq c_lst nil)
 (vlax-for b (vla-get-blocks AcDoc)
   (setq c_lst (cons (vla-get-name b) c_lst))
 )

 ;; p_lst : liste des blocs à purger, soit les blocs de la collection ...
 ;; ... moins les blocs "*Model_Space" "*Paper_Space*" et les blocs insérées

 (setq	p_lst (vl-remove-if
	'(lambda (x)
	   (or (= (substr x 1 1) "*")
	       (member x r_lst)
	   )
	 )
	c_lst
      )
 )

 ;; ... moins les xrefs insérées et les blocs qu'elles contiennent

 (mapcar '(lambda (x)
     (setq p_lst
	    (vl-remove-if
	      '(lambda (y)
		 (wcmatch y (strcat x "*"))
	       )
	      p_lst
	    )
     )
   )
  x_lst
 )

 ;; suppression de tous le blocs de p_lst

 (mapcar '(lambda (x)
     (vla-delete (vla-item (vla-get-Blocks AcDoc) x))
   )
  p_lst
 )

 ;; Purge et audit du dessin

 (vla-PurgeAll AcDoc)
 (vla-AuditInfo AcDoc :vlax-true)

 ;; Restauration de l'état des calques

 (if l_lst
   (mapcar '(lambda (x)
       (vla-put-lock x :vlax-true)
     )
    l_lst
   )
 )
 (princ)
)

 

[Edité le 13/9/2006 par (gile)]

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

Lien vers le commentaire
Partager sur d’autres sites

Même si tu enlèves tous les objets qui y sont le calque Defpoints ne pourra pas être purgé (comme le calque 0).

 

J'arrive à le supprimer à chaque ouverture du dessin avec vla-delete mais plus s'il est recréé après avoir créer puis effacer une cote. Je vais esssayer de trouver...

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

Lien vers le commentaire
Partager sur d’autres sites

j'ai trouvé un plan ou j'ai l'erreur suivante

 

; erreur: Erreur Automation Objet référencé

 

ce n'est pas la premiere fois

 

je te l'ai mailer

 

jusqu'a maintenant il suffisait de faire une purge ordinaire avant et cela fonctionnais

pas dans celui la

 

apres une recherche sur google cela ressemble a une erreur VBA :casstet:

 

[Edité le 13/9/2006 par Fraid]

Lien vers le commentaire
Partager sur d’autres sites

apres une recherche sur google cela ressemble a une erreur VBA

 

C'est normal en VisualLISP les fonction ActiveX sont utilisées comme en VBA.

 

Le problème vient du bloc "_OBLIQUE" et de la dernière modification apportée au LISP.

 

Il est considéré comme référencé par AutoCAD et donc non purgeable, d'où pas d'erreur avec la commande purge ou (vla-purgeall).

 

Dans le LISP pour savoir si un bloc est référencé, je fais une sélection sur tout le dessin en filtrant avec le nom de chaque bloc de la collection, si, pour un nom de bloc, le jeu de sélection est vide, le bloc est considéré comme non-référencé (ce qui me semble logique).

 

C'est le cas pour ce bloc "_OBLIQUE", d'où le message d'erreur.

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é