(gile) Posté(e) le 27 mai 2010 Posté(e) le 27 mai 2010 Salut, En LISP, qu'on utilise (command "_.purge ...) ou (vla-PurgeAll ...), il est difficile de savoir si tous les objets imbriqués seront effectivement purgés. .NET fournit la méthode Datase.Purge() qu,i pour une collection d'ObjectId passée comme argument, retourne la collection de ceux qui ne sont pas référencés.Utilisée dans une boucle, cela permet de garantir une purge de tous les éléments imbriqués. J'ai implémenté cette méthode pour définir une nouvelle fonction LISP : gc-purge et j'en ai profité pour ajouter quelques types d'objets qui n'existent pas dans la commande native :les groupes non référencés et, à partir de 2008 les échelles non référencées Nouvelle version (1.1)Cette fonction requiert un argument, un entier qui est la somme des code binaires suivants :1 Blocs2 Calques4 Formes8 Matériaux16 Styles de cote32 Styles de ligne de repère multiple64 Styles de mligne128 Styles de tableau256 Styles de texte512 Styles de tracé1024 Styles visuels2048 Type de ligne4096 Applications enregistrées8192 Goupes16384 Echelles32768 Textes vides65536 Entités de longueur nulle131072 Images raster262144 DWF sous-jacents524288 PDF sous-jacents1048576 DGN sous-jacents Exemples(gc-purge 1) purge les blocs(gc-purge 19) ou (gc-purge (+ 1 2 16)) purge les blocs, les calques et les style de cote(gc-purge 2097151) purge tout Nota l'utilisation de code représentant des options non accessibles dans la version courante (ex : 32 sur une 2007) est sans conséquence. : correction d'un bug avec les mtexts formatés: correction d'un bug avec les styles de ligne de repère multiple, les images et les calques sous-jascents.LispPurge.zip Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bseb67 Posté(e) le 27 mai 2010 Posté(e) le 27 mai 2010 Salut (Gile) Le nettoyage de printemps ou "osterputz" est fini ;) Ca ne sera pas plus simple de faire une seule dll dans laquelle tu testes la versiond'autocad pour savoir quel argument mettre ? Je viens d'essayer sur un fichier pris au hasard (sous autocad mep 2008) : Commande: (GC-PURGE)System.ArgumentException: Erreur lors de la liaison avec la méthode cible. à System.Delegate.CreateDelegate(Type type, Object firstArgument, MethodInfo method, Boolean throwOnBindFailure) à AcMgCommandClass.InvokeWorker(AcMgCommandClass* , MethodInfo mi, Object commandObject, Boolean bLispFunction) à AcMgCommandClass.InvokeWorkerWithExceptionFilter(AcMgCommandClass* , MethodInfo mi, Object commandObject, Boolean bLispFunction) à AcMgPerDocumentCommandClass.Invoke(AcMgPerDocumentCommandClass* , gcroot* mi, Boolean bLispFunction) à AcMgCommandClass.CommandThunk.InvokeLisp(CommandThunk* ); erreur: une erreur est survenue dans la fonction *erreur*paramètre de la variable AutoCAD rejeté: "edgemode" nil Alors pour la variable edgemode, depuis que j'ai installé autofluid 2009, si une fonction lispplante, j'ai à chaque fois ce message... Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
(gile) Posté(e) le 27 mai 2010 Auteur Posté(e) le 27 mai 2010 Ca ne sera pas plus simple de faire une seule dll dans laquelle tu testes la versiond'autocad pour savoir quel argument mettre ? Ce n'est toujours aussi simple, le code ne compile pas si tu appelles des propriétés ou méthodes qui n'existent pas dans le SDK courant.Mais, dans le cas présent, j'ai réussi à feinter, il n'y a plus qu'une seule dll qui devrait être compatible de 2007 à 2011 (et peut-être même 2006, je n'ai testé que sur 2007 et 2010). Il faut fournir un argument à la fonction gc-purge : la somme des codes binaires énumérés ci dessus pour lesquels tu veux faire la purge exemple :(gc-purge 1) ne purge que les blocs(gc-purge 7) ou (gc-purge (+ 1 2 4)) purge les blocs, les calques, les styles de cote.(gc-purge 16383) purge tout. Les codes, pour ceux que ça intéresse La classe LispFunusing System; using System.Collections.Generic; using System.Text; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.GraphicsInterface; using Autodesk.AutoCAD.Runtime; using LispExtensionTools; namespace LispPurge { public class LispFun { /* 1 Blocs * 2 Calques * 4 Formes * 8 Matériaux * 16 Styles de cote * 32 Styles de ligne de repère multiple * 64 Styles de mligne * 128 Styles de tableau * 256 Styles de texte * 512 Styles de tracé * 1024 Styles visuels * 2048 Type de ligne * 4096 Applications enregistrées * 8192 Goupes * 16384 Echelles * 32768 Textes vides * 65536 Entités de longueur nulle * 131072 Images raster * 262144 DWF sous-jascents * 524288 PDF sous-jascents * 1048576 DGN sous-jascents */ [LispFunction("gc-purge")] public TypedValue Purge(ResultBuffer resbuf) { TypedValue nil = new TypedValue((int)LispDataType.Nil); if (resbuf == null) { LispErrorMsg.TooFew(); return nil; } TypedValue[] tvs = resbuf.AsArray(); if (tvs.Length == 0) { LispErrorMsg.TooFew(); return nil; } if (tvs.Length > 1) { LispErrorMsg.TooMuch(); return nil; } TypedValue tv = tvs[0]; if (tv.TypeCode != (int)LispDataType.Int16 && tv.TypeCode != (int)LispDataType.Int32) { LispErrorMsg.BadType("fixnump", tv); return nil; } int flag = Convert.ToInt32(tv.Value); try { PurgeAll(HostApplicationServices.WorkingDatabase, flag); return new TypedValue((int)LispDataType.T_atom); } catch (Autodesk.AutoCAD.Runtime.Exception ex) { Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage( "\nErreur application: " + ex.Message + ex.StackTrace); return nil; } catch (System.Exception ex) { Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage( "\nErreur système: " + ex.Message + ex.StackTrace); return nil; } } private void PurgeAll(Database db, int flag) { ObjectIdCollection tableIds = new ObjectIdCollection(); ObjectIdCollection dictIds = new ObjectIdCollection(); if ((flag & 1) == 1) tableIds.Add(db.BlockTableId); if ((flag & 2) == 2) tableIds.Add(db.LayerTableId); if ((flag & 16) == 16) tableIds.Add(db.DimStyleTableId); if ((flag & 8) == 8) tableIds.Add(db.LinetypeTableId); if ((flag & 256) == 256) tableIds.Add(db.TextStyleTableId); if ((flag & 4096) == 4096) tableIds.Add(db.RegAppTableId); if ((flag & 64) == 64) dictIds.Add(db.MLStyleDictionaryId); if ((flag & 512) == 512) dictIds.Add(db.PlotStyleNameDictionaryId); if ((flag & 128) == 128) dictIds.Add(db.TableStyleDictionaryId); bool emptyTxt = (flag & 32768) == 32768; bool zeroLength = (flag & 65536) == 65536; if (emptyTxt || zeroLength) { using (Transaction tr = db.TransactionManager.StartTransaction()) { List locked = new List(); LayerTable lt = (LayerTable)tr.GetObject(db.LayerTableId, OpenMode.ForRead); foreach (ObjectId layerId in lt) { LayerTableRecord ltr = (LayerTableRecord)tr.GetObject(layerId, OpenMode.ForRead); if (ltr.IsLocked == true) { ltr.UpgradeOpen(); ltr.IsLocked = false; locked.Add(ltr); } } BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead); foreach (ObjectId btrId in bt) { BlockTableRecord btr = (BlockTableRecord)tr.GetObject(btrId, OpenMode.ForRead); if (!btr.IsLayout) continue; foreach (ObjectId id in btr) { if (zeroLength) { Curve crv = tr.GetObject(id, OpenMode.ForRead) as Curve; if (crv != null) { if (crv.GetDistanceAtParameter(crv.EndParam) == 0.0) { crv.UpgradeOpen(); crv.Erase(); } continue; } } if (emptyTxt) { DBText txt = tr.GetObject(id, OpenMode.ForRead) as DBText; if (txt != null) { if (txt.TextString.Trim() == string.Empty) { txt.UpgradeOpen(); txt.Erase(); } continue; } MText mTxt = tr.GetObject(id, OpenMode.ForRead) as MText; if (mTxt != null && GetStripedMtextContents(mTxt).Trim() == string.Empty) { mTxt.UpgradeOpen(); mTxt.Erase(); } } } } foreach (LayerTableRecord ltr in locked) { ltr.IsLocked = true; } tr.Commit(); } } while (PurgeDatabase(db, tableIds, dictIds, flag)) continue; } private string m_str; private string GetStripedMtextContents(MText mt) { m_str = string.Empty; mt.ExplodeFragments(new MTextFragmentCallback(FragmentCallback)); return m_str; } private MTextFragmentCallbackStatus FragmentCallback(MTextFragment fragment, object obj) { m_str += fragment.Text; return MTextFragmentCallbackStatus.Continue; } private bool PurgeDatabase(Database db, ObjectIdCollection tableIds, ObjectIdCollection dictIds, int flag) { ObjectIdCollection ids = new ObjectIdCollection(); using (Transaction tr = db.TransactionManager.StartTransaction()) { if ((flag & 8192) == 8192) { DBDictionary dict = (DBDictionary)tr.GetObject(db.GroupDictionaryId, OpenMode.ForRead, false); foreach (DBDictionaryEntry entry in dict) { Group grp = (Group)tr.GetObject(entry.Value, OpenMode.ForRead, false); if (grp.NumEntities == 0) { grp.UpgradeOpen(); grp.Erase(); } } } DBDictionary NOD = (DBDictionary)tr.GetObject(db.NamedObjectsDictionaryId, OpenMode.ForRead); Dictionary dicts = new Dictionary(); dicts.Add(32, "ACAD_MLEADERSTYLE"); dicts.Add(262144, "ACAD_DWFDEFINITIONS"); dicts.Add(524288, "ACAD_PDFDEFINITIONS"); dicts.Add(1048576, "ACAD_DGNDEFINITIONS"); foreach (KeyValuePair pair in dicts) { if ((flag & pair.Key) == pair.Key && NOD.Contains(pair.Value)) dictIds.Add(NOD.GetAt(pair.Value)); } foreach (ObjectId tableId in tableIds) { SymbolTable table = (SymbolTable)tr.GetObject(tableId, OpenMode.ForRead, false); foreach (ObjectId recordId in table) { ids.Add(recordId); } } foreach (ObjectId dictId in dictIds) { DBDictionary dict = (DBDictionary)tr.GetObject(dictId, OpenMode.ForRead, false); foreach (DBDictionaryEntry entry in dict) { if (entry.Value.IsValid) { DBObject obj = (DBObject)tr.GetObject(entry.Value, OpenMode.ForRead); if (!obj.IsAProxy) ids.Add(entry.Value); } } } if ((flag & 131072) == 131072 && NOD.Contains("ACAD_IMAGE_DICT")) { DBDictionary dict = (DBDictionary)tr.GetObject(NOD.GetAt("ACAD_IMAGE_DICT"), OpenMode.ForRead); foreach (DBDictionaryEntry entry in dict) { if (entry.Value.IsValid) { bool lck; RasterImageDef obj = (RasterImageDef)tr.GetObject(entry.Value, OpenMode.ForRead); if (!obj.IsAProxy && obj.GetEntityCount(out lck) == 0) ids.Add(entry.Value); } } } if ((flag & 16384) == 16384 && NOD.Contains("ACAD_SCALELIST")) { DBDictionary dict = (DBDictionary)tr.GetObject(NOD.GetAt("ACAD_SCALELIST"), OpenMode.ForRead); foreach (DBDictionaryEntry entry in dict) { if (entry.Key != "A0") { DBObject obj = (DBObject)tr.GetObject(entry.Value, OpenMode.ForRead); if (!obj.IsAProxy) ids.Add(entry.Value); } } } if ((flag & 8) == 8) { DBDictionary matDict = (DBDictionary)tr.GetObject(db.MaterialDictionaryId, OpenMode.ForRead, false); foreach (DBDictionaryEntry entry in matDict) { string key = entry.Key; if ((key != "ByBlock") && (key != "ByLayer") && (key != "Global")) { DBObject obj = (DBObject)tr.GetObject(entry.Value, OpenMode.ForRead); if (!obj.IsAProxy) ids.Add(entry.Value); } } } if ((flag & 1024) == 1024) { DBDictionary vsDict = (DBDictionary)tr.GetObject(db.VisualStyleDictionaryId, OpenMode.ForRead); foreach (DBDictionaryEntry entry in vsDict) { DBVisualStyle vs = tr.GetObject(entry.Value, OpenMode.ForRead) as DBVisualStyle; if (vs.Type == VisualStyleType.Custom) { DBObject obj = (DBObject)tr.GetObject(entry.Value, OpenMode.ForRead); if (!obj.IsAProxy) ids.Add(entry.Value); } } } if ((flag & 4) == 4) { TextStyleTable tst = (TextStyleTable)tr.GetObject(db.TextStyleTableId, OpenMode.ForRead); foreach (ObjectId id in tst) { TextStyleTableRecord tstr = (TextStyleTableRecord)tr.GetObject(id, OpenMode.ForRead); if (tstr.IsShapeFile && !tstr.IsAProxy) ids.Add(id); } } db.Purge(ids); foreach (ObjectId id in ids) { DBObject obj = (DBObject)tr.GetObject(id, OpenMode.ForWrite); obj.Erase(); } tr.Commit(); } return ids.Count > 0; } } } La classe LispErrorMsgusing Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Runtime; namespace LispExtensionTools { public static class LispErrorMsg { static Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; internal static void TooFew() { ed.WriteMessage("\nErreur: nombre d'arguments insuffisants\n"); } internal static void TooMuch() { ed.WriteMessage("\nErreur: nombre d'arguments trop important\n"); } internal static void BadType(string T, TypedValue tV) { string msg = tV.TypeCode == (int)LispDataType.Nil ? "nil" : tV.Value.ToString(); ed.WriteMessage("\nErreur: type d'argument incorrect: {0} {1}\n",T , msg); } internal static void Message(string msg) { ed.WriteMessage("\nErreur: {0}\n", msg); } } } Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bseb67 Posté(e) le 27 mai 2010 Posté(e) le 27 mai 2010 Il faut fournir un argument à la fonction gc-purge : la somme des codes binaires énumérés ci dessus pour lesquels tu veux faire la purge exemple :(gc-purge 1) ne purge que les blocs(gc-purge 7) ou (gc-purge (+ 1 2 4)) purge les blocs, les calques, les styles de cote.(gc-purge 16383) purge tout. J'avais zappé le fait de mettre l'argument (donc lors de l'appel)je re-teste pour voir ... et ca marche toujours pas :( j'ai toujours le même message d'erreur super long...même dans un fichier vide Et tout ca à cause d'autofluid 2009 :mad: car j'ai essayé avec autocad 2010 sans autofluid dessus, et là ca marche, pas de plantage Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
(gile) Posté(e) le 27 mai 2010 Auteur Posté(e) le 27 mai 2010 j'ai toujours le même message d'erreur super long...même dans un fichier vide Et tout ca à cause d'autofluid 2009 Là, je ne vois pas ce que je peux faire...Tu peux peut-être leur rapporter l'erreur (plus celle de la variable "edgemode"). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 27 mai 2010 Posté(e) le 27 mai 2010 Salut (gile)J'ai l'impression que mon nettoyeur t'as donné des idées ;) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 27 mai 2010 Auteur Posté(e) le 27 mai 2010 Salut (gile)J'ai l'impression que mon nettoyeur t'as donné des idées ;) @+ En fait j'ai fait un nettoyeur pour le CADnorm_Tools de GitCAD. La prochaine version aura plus de 20 fonctions plus ou moins sophistiquées (de trucs genre supprimer les textes ou blocs vides à Edit_Bloc en passant par des convertisseurs de types de ligne, de couleur, etc.) C'est cette lacune en LISP pour purger les objets imbriqués qui m'a motivé. J'en avais parlé avec Patrick ici et c'est vrai que la question du nombre de fois qu'il faut répéter la commande dans ton sujet a fini par me décider à définir cette fonction en LISP. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 27 mai 2010 Auteur Posté(e) le 27 mai 2010 J'ai modifié un peu la fonction : - réparé une erreur avec les styles visuels non natifs, non référencés mais pourtant non purgeables, peut être issus de copier/coller (CF ce fichier) - réparé un bug avec les mtextes sur les versions 2007 - ajouté deux nouvelles options : 16384 pour les textes et mtextes vides et 32768 pour les entités de longueur 0 (même s'il ne s'agit pas à proprement parler d'objets non référencés). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 28 mai 2010 Auteur Posté(e) le 28 mai 2010 Je mes suis aperçu que j'avais oublié de traiter les formes, j'en profite pour ajouter les objets sous-jacents (DWF, PDF, DGN) non référencés. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 28 mai 2010 Posté(e) le 28 mai 2010 Bonsoir à toutes et tous, Est-ce testable directement en ligne de commande ? A priori, oui puisque un argument et un entier Car, moi, j'ai ça => Commande: (gc-purge 19)System.ArgumentException: Erreur lors de la liaison avec la méthode cible. à System.Delegate.CreateDelegate(Type type, Object firstArgument, MethodInfo method, Boolean throwOnBindFailure) à AcMgCommandClass.InvokeWorker(AcMgCommandClass* , MethodInfo mi, Object commandObject, Boolean bLispFunction) à AcMgCommandClass.InvokeWorkerWithExceptionFilter(AcMgCommandClass* , MethodInfo mi, Object commandObject, Boolean bLispFunction) à AcMgPerDocumentCommandClass.Invoke(AcMgPerDocumentCommandClass* , gcroot<:reflection::methodinfo>* mi, Boolean bLispFunction) à AcMgCommandClass.CommandThunk.InvokeLisp(CommandThunk* )*Annuler*Commande:erreur: Demande ADS erronée Qu'as-tu testé sur le fichier pointé sur ta réponse 7 ? Merci d'avance, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 28 mai 2010 Auteur Posté(e) le 28 mai 2010 Curieux, c'est le même message d'erreur que bseb67. Il l'attribue à AutoFluid. Il semblerait que certaines applications ne supportent pas les fonctions LISP définies en .NET :casstet: Sinon, ou c'est du LISP, donc ça peut s'utiliser en ligne de commande, mais la fonction ne retourne pas d'informations sur ce qu'elle a fait. Elle retourne nil en cas d'erreur et T si tout c'est bien passé. À part quelques exceptions, les objets sont traités indifféremment en boucle. Pour faire un rapport, il aurait fallu faire un compteur par type d'objet traité. Comme c'est plutôt destiné à des programmeurs que pour être utilisé comme commande, j'ai préféré privilégier la performance. J'ai mis une nouvelle version avec quelques "pièges" pour attraper les erreurs et essayer de les situer plus précisément, mais d'après ton message, il semblerait qu'il refuse tout simplement de lancer la fonction LISP.Si tu veux ré-essayer... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 28 mai 2010 Posté(e) le 28 mai 2010 Re, Sur ma V2008 (Couplé avec covadis !) Commande: (gc-purge 19)System.ArgumentException: Erreur lors de la liaison avec la méthode cible. à System.Delegate.CreateDelegate(Type type, Object firstArgument, MethodInfo method, Boolean throwOnBindFailure) à AcMgCommandClass.InvokeWorker(AcMgCommandClass* , MethodInfo mi, Object commandObject, Boolean bLispFunction) à AcMgCommandClass.InvokeWorkerWithExceptionFilter(AcMgCommandClass* , MethodInfo mi, Object commandObject, Boolean bLispFunction) à AcMgPerDocumentCommandClass.Invoke(AcMgPerDocumentCommandClass* , gcroot<:reflection::methodinfo>* mi, Boolean bLispFunction) à AcMgCommandClass.CommandThunk.InvokeLisp(CommandThunk* )*Annuler*Commande:erreur: Demande ADS erronéeCommande: (gc-purge 2097151)System.ArgumentException: Erreur lors de la liaison avec la méthode cible. à System.Delegate.CreateDelegate(Type type, Object firstArgument, MethodInfo method, Boolean throwOnBindFailure) à AcMgCommandClass.InvokeWorker(AcMgCommandClass* , MethodInfo mi, Object commandObject, Boolean bLispFunction) à AcMgCommandClass.InvokeWorkerWithExceptionFilter(AcMgCommandClass* , MethodInfo mi, Object commandObject, Boolean bLispFunction) à AcMgPerDocumentCommandClass.Invoke(AcMgPerDocumentCommandClass* , gcroot<:reflection::methodinfo>* mi, Boolean bLispFunction) à AcMgCommandClass.CommandThunk.InvokeLisp(CommandThunk* )*Annuler*Commande:erreur: Demande ADS erronée Sur ma v2011 (AutoCAD base sans applicatifs) => Commande: (gc-purge 19)Commande: (gc-purge 2097151) Je ne sais pas ce qui se fait, mais ça se fait au vu du défilement en bas à gauche de l'écran (à coté des coordonnées)désolé, je ne connais pas le nom,... Donc, les applicatifs semble poser pb,... J'avais déjà testé sur ma v2008 après le message de bseb67, mais pas sur la 2011 ! Pour faire un rapport, il aurait fallu faire un compteur par type d'objet traité. Comme c'est plutôt destiné à des programmeurs que pour être utilisé comme commande, j'ai préféré privilégie la performance. Que veux-tu dire exactement par là ? Que les programmeurs pourrait se servir de cette fonction comme sou-fonction dans un prog , Donc, c'est aussi possible de l'utiliser comme tel pour ceux qui ne voudrait l'utiliser que pour purger, une option qui serait surement apprécié de certains aussi, non ? Pour faire un rapport, il aurait fallu faire un compteur par type d'objet traité. Ça serait compliqué de créer une version avec cette option ? Comme ça, on pourrait également "comparer" avec d'autres routines existantes,... Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 28 mai 2010 Auteur Posté(e) le 28 mai 2010 Que veux-tu dire exactement par là ? Que les programmeurs pourrait se servir de cette fonction comme sou-fonction dans un prog , À part les problèmes de compatibilité que vous avez bseb67 et toi il s'agit d'une fonction LISP en tout point semblables aux fonction LISP natives (si tu l'utilises dans l'éditeur, tu verras qu'elle s'affiche en bleu comme les fonction native et pas en noir comme les fonctions définies en LISP). Par exemple, Patrick_35 pourrait très bien l'utiliser dans son nettoyeur à la place de faire :(repeat 3 (vla-purgeall doc))il aurait la garantie detout purger quel que soit le niveau d'imbrication des objets non référencés. PS: pour voir (en partie) ce que fait gc-purge, tu lance PURGER et tu regarde dans la boite de dialogue les éléments purgeables. puis tu annules tu lances gc-purge et tu ré-ouvres la boite de la commande PURGER.Attention, il ne s'agit pas d'une fonction de nettoyage, mais de purge : uniquement la suppression des objets non référencés (excepté pour les textes et les entités de longueur nulle) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 29 mai 2010 Auteur Posté(e) le 29 mai 2010 gc-Purge est ajouté à LispExtension. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 29 mai 2010 Posté(e) le 29 mai 2010 Bonjour à toutes et tous, Salut Gilles, tu verras qu'elle s'affiche en bleu comme les fonction native et pas en noir comme les fonctions définies en LISP Compris ! pour voir (en partie) ce que fait gc-purge, tu lance PURGER et tu regarde dans la boite de dialogue les éléments purgeables. puis tu annules tu lances gc-purge et tu ré-ouvres la boite de la commande PURGER. Bah oui, tout simplement,.... :cool: Attention, il ne s'agit pas d'une fonction de nettoyage, mais de purge : uniquement la suppression des objets non référencés (excepté pour les textes et les entités de longueur nulle) Vu, À part les problèmes de compatibilité que vous avez bseb67 et toi il s'agit d'une fonction LISP en tout point semblables aux fonction LISP natives Étrange tout de même car je n'ai jamais rencontré ce pb avec les autres lisps,...ni, il me semble avec certaines fonctions lisps que tu as rajoutés,... Merci encore de ces explications, Par exemple, Patrick_35 pourrait très bien l'utiliser dans son nettoyeur à la place de faire :(repeat 3 (vla-purgeall doc))il aurait la garantie detout purger quel que soit le niveau d'imbrication des objets non référencés. Patrick_35 si tu nous lis, ;) Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 29 mai 2010 Auteur Posté(e) le 29 mai 2010 Étrange tout de même car je n'ai jamais rencontré ce pb avec les autres lisps,...ni, il me semble avec certaines fonctions lisps que tu as rajoutés,... Il ne s'agit pas de problème avec les LISP mais avec des fonctions LISP définies en .NET.As-tu essayé avec d'autres fonctions de LispExtension (tu peux utiliser les exemples fourni à la fin de chaque rubrique dans l'aide) ? Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 29 mai 2010 Posté(e) le 29 mai 2010 Re, Je comptais regarder dans l'AM, maintenant que j'y vois plus clair,... Je reviens donc,. ;) Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 24 juin 2010 Auteur Posté(e) le 24 juin 2010 Nouvelle version : correction d'un bug avec les mtexts formatés. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 29 juin 2010 Auteur Posté(e) le 29 juin 2010 Un nouveau bug m'a été signalé avec gc-purge.C'est réparé (j'espère).Nouvelle version en téléchargement dans le premier message. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
FREDCAD31 Posté(e) le 12 décembre 2010 Posté(e) le 12 décembre 2010 Bonjour à tous, J'ai réussi à charger le fichier dll avec netload mais maintenant comment je fais pour m'en servir ? Je dois lancer quel commande ? Merci,
(gile) Posté(e) le 12 décembre 2010 Auteur Posté(e) le 12 décembre 2010 C'est une fonction LISP, regarde dans le premier message, il y a des exemples. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
FREDCAD31 Posté(e) le 12 décembre 2010 Posté(e) le 12 décembre 2010 Ok merci Gile j'avais pas vu ! A+
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