Aller au contenu

Extension LISP


(gile)

Messages recommandés

Salut,

 

J'ai rassemblé dans cet assembly des fonctions LISP définies en dotNET que j'avais données ici ou là.

On est encore loin de DOSlib (et je n'en suis pas capable) mais contrairement aux ARX il ne devrait pas y avoir de problème compatibilité suivant les format DWG (depuis 2007).

 

Fonctions défines :

Presse-papier

gc-CopyToClipboard

gc-TextFromClipboard

 

Boites de dialogue

gc-GetFileDlg

gc-GetFolderDlg

gc-InputBox

gc-MessageBox

 

Calques dans les fenêtres de présentation

gc-VpFreeze

gc-VpThaw

gc-VpThawAll

 

Excel

gc-XlRead

gc-XlWrite

 

[Edit : ajouté un argument 'defaut' à gc-getfolderdlg]

 

[Edit : ajout de la fonction gc-Purge]

 

[Edit : correction d'un bug dans gc-Purge]

 

Téléchargez LispExtension.zip sur cette page extraire et installer LispExtensionSetup.msi. Un raccourci vers l'aide est créé sur le bureau.

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

Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines après...

salut Gile, et merci pour le boulot,

pourquoi gc-GetFolderDlg n'a pas d'argument "defolder" alors que gc-GetFileDlg en a un ?

ou au moins, stocker le dernier répertoire dans une variable statique ...

Sinon c'est vrais que ça comblerait un manque ...

Gégé

 

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

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

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

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

La classe FolderBrowserDialog a bien une propriété RootFolder qui définit le dossier racine à partir duquel la recherche démarre.

J'ai volontairement écarté cette option car elle empêche de remonter dans l'arborescence au delà du dossier racine spécifié.

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

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Il existe également une propriété SelectedPath :

co joint un exemple que je ne suis pas arrivé à faire marcher, mais qui se compile

(la function lisp n'est pas reconnue par Autocad)

 

Imports System.Windows.Forms

Module module3

   ' First create a FolderBrowserDialog object
   Dim FolderBrowserDialog1 As New FolderBrowserDialog

    _
   Public Function SelectFolder(ByVal Msg As String, ByVal Folder As String, ByVal Create As Boolean)

       Dim DirectoryBrowser As System.Windows.Forms.FolderBrowserDialog
       Dim SelFolder As String
       DirectoryBrowser = New System.Windows.Forms.FolderBrowserDialog
       ' Desktop is the root folder in the dialog.
       DirectoryBrowser.RootFolder = Environment.SpecialFolder.Desktop
       'DirectoryBrowser.Description = "Which directory do you want to use?"
       DirectoryBrowser.Description = Msg
       '
       DirectoryBrowser.SelectedPath = Folder

       If (DirectoryBrowser.ShowDialog() = System.Windows.Forms.DialogResult.OK) Then
           'Console.WriteLine(DirectoryBrowser.SelectedPath)
           SelFolder = DirectoryBrowser.SelectedPath
       Else
           SelFolder = Folder

       End If
       Return SelFolder
   End Function




End Module

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

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

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

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

La propriété SelectedPath sert à récupérer le répertoire sélectionné, pas à définir la racine de la recherche.

 

Il me semble qu'il manque le type de retour dans la signature de ta fonction :

Public Function SelectFolder(ByVal Msg As String, ByVal Folder As String, ByVal Create As Boolean)  [surligneur]As String[/surligneur]

 

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

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

La propriété SelectedPath sert à récupérer le répertoire sélectionné, pas à définir la racine de la recherche.

 

Il me semble qu'il manque le type de retour dans la signature de ta fonction :

Public Function SelectFolder(ByVal Msg As String, ByVal Folder As String, ByVal Create As Boolean)  [surligneur]As String[/surligneur]

 

pour le as string, je l'avais oublié, mais ça ne marche pas mieux.

mais j'ai déjà eu des pb semblables de commandMethod ou lisp function pas reconnus, qui le sont miraculeusement après sans que je sache pourquoi ...

 

par contre, d'après la littérature, SelectedPath peut être initialisée, mais il faut que le chemin initial soit compatible avec le RootFolder .

pour celà, il est conseillé d'utiliser :

Environment.SpecialFolder.MyComputer

 

je dis ça, je ne suis pas arrivé à le tester puisque ma commande n'est pas reconnue ...

 

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

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

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

Lien vers le commentaire
Partager sur d’autres sites

Effectivement, le dossier spécifié est présélectionné.

Je vais modifier les fichiers en téléchargement.

 

Pour ton problème, les références acdbmgd.dll et acmgd.dll sont elles bien en Copie locale = false ?

 

PS : intéressante littérature que tu as trouvé là, c'est où, si c'est pas indiscret.

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

Lien vers le commentaire
Partager sur d’autres sites

Pour ton problème, les références acdbmgd.dll et acmgd.dll sont elles bien en Copie locale = false ?

Tout est sur false.

mais bon, je fait surtout des tests à l'aveugle, sans connaitre les bases théoriques, il faut que je me trouve un bouquin sérieux, pour arrêter de perdre du temps par tâtonnement.

 

PS : intéressante littérature que tu as trouvé là, c'est où, si c'est pas indiscret.

pas de la littérature, mais des discussions en français sur code source, develloppez,

tiens une qui parle de ce pb

http://

http://www.developpez.net/forums/d475455/dotnet/csharp/windows-forms/folderbrowserdialog-repertoire-initiale/

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

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

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

Lien vers le commentaire
Partager sur d’autres sites

J'avais mal regardé ton code.

Avec l'attribut LispFunction la méthode (procédure ou fonction) doit avoir un et un seul paramètre de type RessultBuffer

 

Un ResultBuffer est un conteneur de TypedValue qui sont un peu l'équivalent des paires pointées du LISP.

Une TypedValue est constituée d'un 'typeCode et d'une valeur. le typeCode est un entier, mais il est souvent plus explicite d'user les enum LispDataType (dans ce cas) ou DxfCode (pour les xdata, les filtres de sélection etc...)

On utilise aussi un ResultBuffer pour retourner ce sera traduit en liste LISP (un peu comme les array de variant un ResultBuffer permet de constituer une collection d'objets de types différents)

 

C'est en anglais, mais les exemples sont assez simple à comprendre (et en VB et C#) AutoCAD .NET developer's help > Basics of the AutoCAD .NET API > Define Commands and AutoLISP Functions > AutoLISP Function Definition

 

Le code de gc-Getfolderdlg (la majeure partie du code teste la validité des arguments (les TypedValues) et comme les messages d'erreur sont récurrents, j'ai fait une classe spéciale pour toutes les fonction LISP)

using System.Windows.Forms;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
using LispExtensionTools;

namespace LispDialog
{
   public class Folder
   {
       /// <summary> 
       /// Fonction LISP gc-getfolderdlg
       /// Ouvre une boite de dialogue permettant de choisir un répertoire
       /// (gc-getfolderdlg message defaut [nouveau])
       /// Exemple : 
       /// (getfolder "Choisir ou créer un dossier" (getvar 'dwgprefix) T)
       /// </summary>

       [LispFunction("gc-getfolderdlg")]
       public static string GetFolder(ResultBuffer buff)
       {
           try
           {
               if (buff == null)
               {
                   LispErrorMsg.TooFew();
                   return null;
               }

               TypedValue[] args = buff.AsArray();

               if (args.Length < 2)
               {
                   LispErrorMsg.TooFew();
                   return null;
               }

               if (args.Length > 3)
               {
                   LispErrorMsg.TooMuch();
                   return null;
               }

               int tCode = args[0].TypeCode;
               if (tCode != (int)LispDataType.Text)
               {
                   LispErrorMsg.BadType("stringp", args[0]);
                   return null;
               }

               tCode = args[1].TypeCode;
               if (tCode != (int)LispDataType.Text)
               {
                   LispErrorMsg.BadType("stringp", args[1]);
                   return null;
               }

               bool newFolder = 
                   ((args.Length == 3) && (args[2].TypeCode != (int)LispDataType.Nil)) ? true : false;

               using (FolderBrowserDialog openDialog = new FolderBrowserDialog())
               {
                   openDialog.Description = (string)args[0].Value;
                   openDialog.ShowNewFolderButton = newFolder;
                   openDialog.RootFolder = System.Environment.SpecialFolder.Desktop;
                   openDialog.SelectedPath = (string)args[1].Value;

                   if (openDialog.ShowDialog() == DialogResult.OK)
                   {
                       return openDialog.SelectedPath;
                   }
                   else return null;
               }
           }

           catch (System.Exception ex)
           {
               LispErrorMsg.Message(ex.Message);
               return null;
           }
       }
   }
}

 

Les messages d'erreur

using 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

Lien vers le commentaire
Partager sur d’autres sites

Je met aussi gc-getfiledlg qui retourne un ResultBuffer

 

using System.Windows.Forms;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
using LispExtensionTools;

namespace LispDialog
{
   public class Files
   {
       /// <summary> 
       /// Fonction LISP gc-getfiledlg
       /// Ouvre une boite de dialogue permettant de choisir un ou plusieurs fichier
       /// (gc-getfiledlg titre repertoire filtre [multiple])
       /// Exemple : 
       /// (getfiles "Choix des fichiers" "C:\\" "Dessin (*.dwg)|*.dwg|Tous (*.*)|*.*" T)
       /// </summary>

       [LispFunction("gc-getfiledlg")]
       public static ResultBuffer GetFileDialog(ResultBuffer buff)
       {
           ResultBuffer result = new ResultBuffer();

           try
           {
               if (buff == null)
               {
                   LispErrorMsg.TooFew();
                   return null;
               }

               TypedValue[] args = buff.AsArray();

               if (args.Length < 3)
               {
                   LispErrorMsg.TooFew();
                   return null;
               }

               if (args.Length > 4)
               {
                   LispErrorMsg.TooMuch();
                   return null;
               }

               for (int i = 0; i != 3; i++)
               {
                   int tCode = args[i].TypeCode;
                   if (tCode != (int)LispDataType.Text)
                   {
                       LispErrorMsg.BadType("stringp", args[i]);
                       return null;
                   }
               }

               string filter = (string)args[2].Value;
               bool mult =
                   ((args.Length == 4) && (args[3].TypeCode != (int)LispDataType.Nil)) ? true : false;

               using (OpenFileDialog openDialog = new OpenFileDialog())
               {
                   openDialog.Title = (string)args[0].Value;
                   openDialog.InitialDirectory = (string)args[1].Value;
                   openDialog.Filter = (filter == "") ? "Tous (*.*)|*.*" : filter;
                   openDialog.FilterIndex = 1;
                   openDialog.Multiselect = mult;

                   if (openDialog.ShowDialog() == DialogResult.OK)
                   {
                       if (mult)
                       {
                           string[] fileNames = openDialog.FileNames;

                           foreach (string file in fileNames)
                           {
                               result.Add(new TypedValue((int)LispDataType.Text, file));
                           }
                       }
                       else
                       {
                           string file = openDialog.FileName;
                           result.Add(new TypedValue((int)LispDataType.Text, file));
                       }

                       return result;
                   }
                   else return null;
               }
           }

           catch (System.Exception ex)
           {
               LispErrorMsg.Message(ex.Message);
               return null;
           }
       }
   }
}

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

Lien vers le commentaire
Partager sur d’autres sites

J'avais mal regardé ton code.

Avec l'attribut LispFunction la méthode (procédure ou fonction) doit avoir un et un seul paramètre de type RessultBuffer

 

Un ResultBuffer est un conteneur de TypedValue qui sont un peu l'équivalent des paires pointées du LISP.

Une TypedValue est constituée d'un 'typeCode et d'une valeur. le typeCode est un entier, mais il est souvent plus explicite d'user les enum LispDataType (dans ce cas) ou DxfCode (pour les xdata, les filtres de sélection etc...)

On utilise aussi un ResultBuffer pour retourner ce sera traduit en liste LISP (un peu comme les array de variant un ResultBuffer permet de constituer une collection d'objets de types différents)

 

C'est en anglais, mais les exemples sont assez simple à comprendre (et en VB et C#) AutoCAD .NET developer's help > Basics of the AutoCAD .NET API > Define Commands and AutoLISP Functions > AutoLISP Function Definition

 

Merci des infos,

je suis bien couillon, puisque ce resultbuffer était déjà utilisé dans le code des fonction d'échange Lisp/.net qu'on a vu la semaine dernière.

Gégé

 

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

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

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

Lien vers le commentaire
Partager sur d’autres sites

  • 3 mois après...

Bonjour à toutes et tous,

 

Salut Gilles

 

Exemple sur une v2008 couplé avec covadis =>

 

[surligneur]Essai presse papier [/surligneur]

 

Commande: (gc-copytoclipboard "Voyons") 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

 

[surligneur]Essais Boites de dialogue [/surligneur]

 

Ouvre une boite de dialogue pour choisir un (ou plusieurs) fichier(s)

 

Commande: (gc-getfiledlg "Choisir les fichiers" "C:\\Program Files" "" T)

("C:\\Users\\Lilian\\Desktop\\269 Insertion XREF.BMP")

 

Ouvre une boite de dialogue pour choisir (ou de créer) un répertoire

 

-En sélectionnant un dossier existant :

 

Commande: (gc-getfolderdlg "Choisir ou créer un dossier" (getvar 'dwgprefix) T)

"C:\\Users\\Lilian\\Desktop\\test"

 

- Par création d'un nouveau dossier :

 

Commande: (gc-getfolderdlg "Choisir ou créer un dossier" (getvar 'dwgprefix) T)

"C:\\Users\\Lilian\\Documents\\test2"

 

Ouvre une boite de dialogue pour récupérer une entrée utilisateur

 

Commande: (gc-inputbox "Quizz" "Question 1\Alors, ça fonctionne ?" "Yes !")

"Yes !"

 

Ouvre une boite de dialogue qui délivre un message et retourne une réponse

 

Commande: (gc-messagebox "Dernier test pour les BD" "Est-ce que celle-ci aussi

fonctionne ?" 0 16)

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)

à AcMgCommandClass.Invoke(AcMgCommandClass* ,

gcroot<:reflection::methodinfo>* mi, Boolean bLispFunction)

à AcMgCommandClass.CommandThunk.InvokeLisp(CommandThunk* )*Annuler*

Commande:

erreur: Demande ADS erronée

 

Pas de pb particulier,...SAUF pour "gc-messagebox " à priori,...

 

[surligneur]Essai Calques dans les fenêtres de présentation [/surligneur]

 

Dégèle les calques dans la fenêtre de présentation

 

Commande: (gc-vpthaw (car (entsel)) '("test 1" "test 2"))

Choix de l'objet: 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)

à AcMgCommandClass.Invoke(AcMgCommandClass* ,

gcroot<:reflection::methodinfo>* mi, Boolean bLispFunction)

à AcMgCommandClass.CommandThunk.InvokeLisp(CommandThunk* )*Annuler*

Commande:

erreur: Demande ADS erronée

 

fonctionne jusqu'à la sélection de l'objet,...

 

[surligneur]Essai Excel [/surligneur]

 

Lit une feuille Excel

 

Commande: (gc-xlread (getfiled "Choisir le fichier Excel" "" "xls;xlsx" 0)

(_> "Feuil1")

System.FormatException: Le format de la chaîne d'entrée est incorrect.

à System.Text.StringBuilder.FormatError()

à System.Text.StringBuilder.AppendFormat(IFormatProvider provider, String

format, Object[] args)

à System.String.Format(IFormatProvider provider, String format, Object[]

args)

à Autodesk.AutoCAD.EditorInput.Editor.WriteMessage(String message, Object[]

parameter)

à LispExtensionTools.LispErrorMsg.Message(String msg)

à LispExcel.ExcelFunctions.ExcelRead(ResultBuffer resbuf)

à 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

 

fonctionne jusqu'à la sélection du fichier,...

 

[surligneur]Essai Purge [/surligneur]

 

Purge le dessin

 

Commande: (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

 

Marche pas !

 

Je vais faire les mêmes tests depuis une v2011 sans applicatif et reviens faire le point.

 

PS: Existe t-il une méthode, comme F1 dans AutoCAD par exemple pour lancer le fichier d'aide "Extension Lisp" par hasard ?

Civil 3D 2024 - COVADIS_18.2

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

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Sur une v2011 sans applicatif =>

 

[surligneur]Essai presse papier [/surligneur]

 

Commande: (gc-copytoclipboard "Voyons") "Voyons"

Commande: AIDE

 

M'ouvre tout de suite après l'aide !!

 

[surligneur]Essais Boites de dialogue [/surligneur]

 

Ouvre une boite de dialogue pour choisir un (ou plusieurs) fichier(s)

 

Commande: (gc-getfiledlg "Choisir les fichiers" "C:\\Program Files" "" T)

("C:\\Users\\Lilian\\Desktop\\test\\Notes Stagiaires-.xls")

 

Ouvre une boite de dialogue pour choisir (ou de créer) un répertoire

 

-En sélectionnant un dossier existant :

 

Commande: (gc-getfolderdlg "Choisir ou créer un dossier" (getvar 'dwgprefix) T)

"C:\\Users\\Lilian\\Desktop\\test"

 

- Par création d'un nouveau dossier :

 

Commande: (gc-getfolderdlg "Choisir ou créer un dossier" (getvar 'dwgprefix) T)

"C:\\Users\\Lilian\\Desktop\\test2"

 

Ouvre une boite de dialogue pour récupérer une entrée utilisateur

 

Commande: (gc-inputbox "Quizz" "Question 1\Alors, ça fonctionne ?" "Yes !")

"Yes !"

 

Ouvre une boite de dialogue qui délivre un message et retourne une réponse

 

Commande: (gc-messagebox "Dernier test pour les BD" "Est-ce que celle-ci aussi

fonctionne ?" 0 16)

 

http://free0.hiboox.com/images/2110/77fd819a3d87b3685ed0d95bc6d407da.jpg

 

Pas de pb particulier,.....

 

[surligneur]Essai Calques dans les fenêtres de présentation [/surligneur]

 

Dégèle les calques dans la fenêtre de présentation

 

Commande: (gc-vpthaw (car (entsel)) '("test 1" "test 2"))

Choix de l'objet: System.FormatException: Le format de la chaîne d'entrée est

incorrect.

à System.Text.StringBuilder.FormatError()

à System.Text.StringBuilder.AppendFormat(IFormatProvider provider, String

format, Object[] args)

à System.String.Format(IFormatProvider provider, String format, Object[]

args)

à Autodesk.AutoCAD.EditorInput.Editor.WriteMessage(String message, Object[]

parameter)

à LispExtensionTools.LispErrorMsg.Message(String msg)

à VpLayerLisp.VpLayer.vpFreezeOrThaw(ResultBuffer resbuf, Boolean frz)

à VpLayerLisp.VpLayer.VpThaw(ResultBuffer resbuf)

à Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorker(MethodInfo mi, Object

commandObject, Boolean bLispFunction)

à

Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorkerWithExceptionFilter(MethodInfo

mi, Object commandObject, Boolean bLispFunction)

à Autodesk.AutoCAD.Runtime.CommandClass.Invoke(MethodInfo mi, Boolean

bLispFunction)

à Autodesk.AutoCAD.Runtime.CommandClass.CommandThunk.InvokeLisp(); erreur:

Demande ADS erronée

 

fonctionne jusqu'à la sélection de l'objet,... Ou alors, je m'y prend mal,.. (Création des calques en question et sélection d'une entité sur le calque "test 1")

 

[surligneur]Essai Excel [/surligneur]

 

Lit une feuille Excel

 

Commande: (gc-xlread (getfiled "Choisir le fichier Excel" "" "xls;xlsx" 0)

"Feuil1")

nil

 

Alors que la "feuil1" existe en 3éme onglet mais est vide, une raison surement ?!

 

Test avec le premier onglet "NOTES STAGIAIRES CN"

 

Commande: (gc-xlread (getfiled "Choisir le fichier Excel" "" "xls;xlsx" 0)

"NOTES STAGIAIRES CN")

(("" "Date:" "29-mai-10" "" "" "TABLEAU DE NOTES" "" "" "" "" "" "" "" ""

"Matière:" "EPREUVE ECRITE N° 2" "" "" "" "" "" "" "" "" "" "") ("" "Classe:"

"STAGIAIRES" "" "" "" "" "" "" "" "" "" "" "" "Semestre:" "

 

Etc,etc, (Ce n'est qu'un extrait de la feuille qui est assez longue et il me semble avoir l'ensemble en ligne de commande,...

 

[surligneur]Essai Purge [/surligneur]

 

Purge le dessin

 

Commande: (gc-purge 2097151)

T

 

J'ai regardé avant ce qu'il y avait à purger, c'est ok !

 

Je vais maintenant tester sur mon portable qui a une v2008 sans applicatif,...

 

 

Civil 3D 2024 - COVADIS_18.2

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

Lien vers le commentaire
Partager sur d’autres sites

Merci.

 

Je ne comprends l'erreur (toujours la même) que tu as avec Covadis.

 

L'autre erreur, est due à une faute de frappe de ma part dans le message d'erreur retourné quand l'utilisateur sélectionne une entité non valide.

 

Le premier argument pour gc-vpthaw doit être le nom d'entité de la fenêtre de présentation, c'est donc la fenêtre qu'il faut sélectionner et pas une entité dans la fenêtre, ou encore faire :

(setq vp (car (entsel)))

puis

(gc-vpthaw vp '("test1" "test2"))

 

J'ai modifier la DLL en téléchargement.

 

M'ouvre tout de suite après l'aide !!

tu as du faire 2 fois entrée et donc relancer la dernière commande (AIDE).

 

Existe t-il une méthode, comme F1 dans AutoCAD par exemple pour lancer le fichier d'aide "Extension Lisp" par hasard ?

Je ne sais pas le faire pour les fonctions LISP.

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

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Sur une v2008 sans applicatif =>

 

[surligneur]Essai presse papier [/surligneur]

 

Commande: (gc-copytoclipboard "Voyons") 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* ); erreur: Demande

ADS erronée

Commande: (gc-copytoclipboard "Voyons") 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* ); erreur: Demande

ADS erronée

 

Décidément, semble ne pas aimer 2008 !

 

[surligneur]Essais Boites de dialogue [/surligneur]

 

Ouvre une boite de dialogue pour choisir un (ou plusieurs) fichier(s)

 

Commande: (gc-getfiledlg "Choisir les fichiers" "C:\\Program Files" "" T)

("C:\\Documents and Settings\\Lilian LESCOUËT\\Bureau\\TEST\\Extraction

d'attributs.xls")

 

Ouvre une boite de dialogue pour choisir (ou de créer) un répertoire

 

-En sélectionnant un dossier existant :

 

Commande: (gc-getfolderdlg "Choisir ou créer un dossier" (getvar 'dwgprefix) T)

"C:\\Documents and Settings\\Lilian LESCOUËT\\Bureau\\TEST"

 

- Par création d'un nouveau dossier :

 

Commande: (gc-getfolderdlg "Choisir ou créer un dossier" (getvar 'dwgprefix) T)

"C:\\Documents and Settings\\Lilian LESCOUËT\\Bureau\\test 2"

 

Le dossier est bien créé !

 

Ouvre une boite de dialogue pour récupérer une entrée utilisateur

 

Commande: (gc-inputbox "Quizz" "Question 1\Alors, ça fonctionne ?" "Yes !")

"Yes !"

 

Ouvre une boite de dialogue qui délivre un message et retourne une réponse

 

Commande: (gc-inputbox "Quizz" "Question 1\Alors, ça fonctionne ?" "Yes !")

"Yes !"

Commande: (gc-messagebox "Dernier test pour les BD" "Est-ce que celle-ci aussi

("_> fonctionne ?" 0 16)

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)

à AcMgCommandClass.Invoke(AcMgCommandClass* ,

gcroot<:reflection::methodinfo>* mi, Boolean bLispFunction)

à AcMgCommandClass.CommandThunk.InvokeLisp(CommandThunk* ); erreur: Demande

ADS erronée

 

Pas de pb particulier,.....Si ce n'est "gc-messagebox " avec ou sans applicatif, marche pas sous V2008

 

[surligneur]Essai Calques dans les fenêtres de présentation [/surligneur]

 

Dégèle les calques dans la fenêtre de présentation

 

Commande: (gc-vpthaw (car (entsel)) '("test 1" "test 2"))

Choix de l'objet: 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)

à AcMgCommandClass.Invoke(AcMgCommandClass* ,

gcroot<:reflection::methodinfo>* mi, Boolean bLispFunction)

à AcMgCommandClass.CommandThunk.InvokeLisp(CommandThunk* ); erreur: Demande

ADS erronée

Commande: (gc-vpthaw (car (entsel)) '("test 1" "test 2"))

Choix de l'objet: 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)

à AcMgCommandClass.Invoke(AcMgCommandClass* ,

gcroot<:reflection::methodinfo>* mi, Boolean bLispFunction)

à AcMgCommandClass.CommandThunk.InvokeLisp(CommandThunk* ); erreur: Demande

ADS erronée

 

fonctionne jusqu'à la sélection de l'objet,... Ou alors, je m'y prend mal,.. (Création des calques en question et sélection d'une entité sur le calque "test 1")

 

[surligneur]Essai Excel [/surligneur]

 

Lit une feuille Excel

 

Commande: (gc-xlread (getfiled "Choisir le fichier Excel" "" "xls;xlsx" 0))

"" "" "" "" "" "" "" "" "" "") ("" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

"" "" "" "" "" "" "" "" "" "" "") ("" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

"" "" "" "" "" "" ""

 

Semble fonctionner, pourquoi tous ces "" "" "" "" "" "" "" "" "" "" "" " sur les cellules vides ?

 

Test avec le second onglet "ixl 1"

 

Commande: (gc-xlread (getfiled "Choisir le fichier Excel" "" "xls;xlsx" 0)

(_> "ixl 1")

"" "" "" "" "" "" "" "" "" "") ("" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

"" "" "" "" "" "" "" "" "" "" "") ("" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

"" "" "" "" "" "" "" "" "" "" "" "") ("" "" "" "" "" "" "" "" "" "" "" "" "" ""

"" "" "" "" "" "" "" "" "" "" "" "" "") ("" "" "" "" "" "" "" "" "" "" "" "" ""

"" "" "" "" "" "" "" "" "" "" "" "" "" "") ("" "" "" "" "" "" "" "" "" "" "" ""

"" "" "" "" "" "" "" "" "" "" "" "" "" "" "") ("" "" "" "" "" "" "" "" "" "" ""

"") ("" "" "" "" "" "" "" "" "" "" "" "") ("" "" "" "" "" "" "" "" "" "" "" "")

("" "" "" "" "" "" "" "" "" "" "" "") ("" "" "" "" "" "" "" "" "" "" "" "") (""

"" "" "" "" "" "" "" "" "" "" "") ("" "" "" "" "" "" "" "" "" "" "" "") ("" ""

"" "" "" "" "" "" "" "" "" "") ("" "" "" "" "" "" "" "" "" "" "" "") ("" "" ""

"" "" "" "" "" "" "" "" "") ("" "" "" "" "" "" "" "" "" "" "" "") ("" "" "" ""

"" "" "" "" "" "" "" "") ("" "" "" "" "" "" "" "" "" "" "" "") ("" "" "" "" ""

"" "" "" "" "" "" "") ("" "") ("" "") ("" "") ("" "") ("" "") ("" "") ("" "")

("" "") ("" "") ("" "") ("" "") ("" "") ("" "") ("" "") ("" "") ("" "") ("" "")

("" "") ("" "") ("" "") ("" "") ("" "") ("" "") ("" "") ("" "") ("" "") ("" "")

("" "") ("" "")) "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

"" "" "" "") ("" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

"" "" "" "" "467C" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "") ("" ""

"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "4650"

"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "

 

Une écriture ("TEST" en cellule A2 ne semble pas reconnue, et pour le reste ?????!!!

 

 

[surligneur]Essai Purge [/surligneur]

 

Purge le dessin

 

Commande: (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* ); erreur: Demande

ADS erronée

 

Idem V2008 avec applicatif,

 

Voila pour cette batterie de tests, plus qu'à analyser,

Civil 3D 2024 - COVADIS_18.2

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

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Je ne comprends l'erreur (toujours la même) que tu as avec Covadis.

 

Et sur la V2008 sans covadis ? (Message précédent)

 

L'autre erreur, est due à une faute de frappe

 

Retesté :

 

V2008 + covadis =>

 

Commande: (gc-vpthaw (car (entsel)) '("test 1" "test 2"))

Choix de l'objet: 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)

à AcMgCommandClass.Invoke(AcMgCommandClass* ,

gcroot<:reflection::methodinfo>* mi, Boolean bLispFunction)

à AcMgCommandClass.CommandThunk.InvokeLisp(CommandThunk* )*Annuler*

Commande:

erreur: Demande ADS erronée

 

V2008 sans covadis =>

 

Commande: (gc-vpthaw (car (entsel)) '("test 1" "test 2"))

Choix de l'objet: 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)

à AcMgCommandClass.Invoke(AcMgCommandClass* ,

gcroot<:reflection::methodinfo>* mi, Boolean bLispFunction)

à AcMgCommandClass.CommandThunk.InvokeLisp(CommandThunk* ); erreur: Demande

ADS erronée

 

V2011 sans covadis =>

 

Commande: (gc-vpthaw (car (entsel)) '("test 1" "test 2"))

Choix de l'objet: Régénération de la présentation.

Régénération du modèle.

T

 

Marche nickel !, c'est donc 2008 qui pose pb ?

 

tu as du faire 2 fois entrée et donc relancer la dernière commande (AIDE).

 

Vraisemblablement,...

 

Je ne sais pas le faire pour les fonctions LISP.

 

 

C'était juste une question car comme tu l'as constaté à maintes reprises, je passe à coté de certaines choses assez régulièrement par manque de "maitrise" (voire de compréhension par moment,... :exclam: ), ;)

 

 

Civil 3D 2024 - COVADIS_18.2

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

Lien vers le commentaire
Partager sur d’autres sites

Je ne comprends vraiment pas pourquoi certaines fonctionnent et d'autres non.

Ni pourquoi c'est uniquement sur 2008 (décidément un grand cru !) qu'il y a des soucis.

 

pourquoi tous ces "" "" "" "" "" "" "" "" "" "" "" " sur les cellules vides ?

Pourquoi toutes ces cellules vides ?

 

Sérieusement, pour pouvoir être traiter en LISP la lecture du fichier Excel le résultat est retourné sous forme d'une liste composée d'une sous-liste pour chaque rangée, chaque sous liste contenant une chaîne par cellule (donc une chaîne vide su la cellule est vide).

Ce qui permet, pour connaître ce contenu de la cellule B3 (2ème colonne de la 3ème rangée) de faire (nth 1 (nth 2 lst)) où lst est la liste retournée par gc-xlread.

 

Inversement, pour écrire, l'argument doit être une liste de sous-listes de chaînes.

Pour reprendre l'exemple de l'aide :

(gc-xlwrite 
 (getfiled "Choisir le fichier Excel" "" "xls;xlsx" 1)
 nil 
 '(("N°" "Aire") (12 258.3))
)

 

La fonction écrit dans la feuille active (nil) du fichier sélectionné "N°" dans la cellule A1 "Aire" dans la cellule B1, "12" dans la cellule A2 et "258.3" dans la cellule B2.

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

Lien vers le commentaire
Partager sur d’autres sites

  • 4 semaines 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é