Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous,

 

J'ai énormément de mal, malgré mes recherches, à comprendre le fonctionnement d'un appel à une commande Autocad en utilisant les TypedValues.

N'ayant pas accès à Editor.Command(), j'utilise:

 

[DllImport("accore.dll", EntryPoint = "acedCmd", CallingConvention = CallingConvention.Cdecl)]

private static extern int acedCmd(IntPtr vlist);

 

Et du coup, je peux faire des choses simples comme:

ResultBuffer rb = new ResultBuffer();           
rb.Add(new TypedValue(5005, "ZOOM"));
rb.Add(new TypedValue(5005, "E"));
rb.Add(new TypedValue(5005, ""));
acedCmd(rb.UnmanagedObject);

 

J'ai également la liste des codes:

//RT CODES
#define RTNONE 5000 /* No result
#define REAL 5001 /*Real number 
#define RTPOINT 5002 /* 2D point X and Y only 
#define RTSHORT 5003 /* Short integer 
#define RTANG 5004 /* Angle 
#define RTSTR 5005 /* String 
#define RTENAME 5006 /* Entity name 
#define RTPICKS 5007 /* Pick set 
#define RTORINT 5008 /* Orientation 
#define RT3DPOINT 5009 /* 3D point - X, Y, and Z 
#define RTLONG 5010 /* Long integer 
#define RTVOID 5014 /* Blank symbol 
#define RTLB 5016 /* list begin 
#define RTLE 5017 /* list end 
#define RTDOTE 5018 /* dotted pair 
#define RTNIL 5019 /* nil 
#define RTDXF0 5020 /* DXF code 0 for ads_buildlist only 
#define RTT 5021 /* T atom 
#define RESBUF 5023 /* resbuf 
#define RTMODELESS 5027 /* interrupted by modeless dialog

 

Mais je ne comprends toujours pas comment cela marche.

Concrètement, j'aimerais par exemple lancer une commande PLINE, où le premier point serait d'office indiqué via le code. Mais comment faire?

Posté(e)

Salut,

 

Depuis AutoCAD 2015, il n'est plus nécessaire d'utiliser P/Invoke avec acedCmd. La classe Editor fournit deux méthodes Editor.Command() et Editor.CommandAsync() qui acceptent comme arguments des valeur typées comma string, int double, Point3d, SelectionSet, etc.

 

ed.Command("_PLINE", new Point2d(10.0, 5.0));

 

Voir ce sujet et celui-ci.

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

Posté(e)

Merci pour votre réponse, mais je précisais justement dans mon post que je n'ai pas accès à Editor.Command() (je suis sous Autocad 2013). C'est pour cela que j'utilise le palliatif acedCmd().

Posté(e)

Au temps pour moi, j'avais mal lu.

 

Tu peux utiliser la méthode d'extension suivante écrite par Tony Tanzillo. Elle "expose" la méthode non publique RunCommand et fonctionne comme Editor.Command.

 

        // Tony Tanzillo (reflection free)
       // http://www.theswamp.org/index.php?topic=44191.msg494502#msg494502

       // <summary>
       // Appelle une commande de manière synchrone.
       // </summary>
       // <param name="ed">L'instance de Editor à laquelle s'applique la méthode.</param>
       // <param name="args">Le nom de la commande suivi des options.</param>
       // <returns>Le statut de l'exécution de la commande.</returns>
       // <exception cref="System.ArgumentNullException">Lancée si l'instance à laquelle s'applique la méthode est null.</exception>
       public static PromptStatus Command(this Editor ed, params object[] args)
       {
           if (ed == null)
               throw new ArgumentNullException("ed");
           return runCommand(ed, args);
       }

       static Func<Editor, object[], PromptStatus> runCommand = GenerateRunCommand();

       static Func<Editor, object[], PromptStatus> GenerateRunCommand()
       {
           MethodInfo method = typeof(Editor).GetMethod(
               "RunCommand", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
           ParameterExpression instance = Expression.Parameter(typeof(Editor), "ed");
           ParameterExpression args = Expression.Parameter(typeof(object[]), "args");
           return Expression.Lambda<Func<Editor, object[], PromptStatus>>(
              Expression.Call(instance, method, args), instance, args)
                 .Compile();
       }

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

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é