.NET

Exécuter en tant qu'administrateur et Marshal.GetActiveObject

Aujourd'hui, en examinant un problème sur l'application d'un client, je suis tombé sur quelque chose de bien étrange.

L'application tente de se connecter à AutoCAD en utilisant Marshal.GetActiveObject de façon à récupérer le nom du document actif comme je l'avais expliqué dans cet article. Mais il semblerait que l'application ne fonctionne pas sur certaines machines.

Etiquettes:

ZWCAD .NET API

Je dois (essayer de) migrer pour un client un complément AutoCAD utilisant l'API .NET vers ZWCAD. ZWCAD est un de ces clones d'AutoCAD qui tentent de reproduire au mieux les fonctionnalités d'AutoCAD pour un prix bien plus modique. ZWCAD dispose d'une API .NET, censée être très largement compatible avec l'API AutoCAD.

Etiquettes:

AutoCAD .NET API : exporter des entités dans un DXF

Pour un projet, je dois exporter certaines entités dans un fichier DXF. Sur la classe DBObject, il y a une méthode DxfOut qui semblerait adaptée mais elle prend en argument un objet de la classe DxfFiler qu'on ne sait pas créer (son constructeur prend en argument un pointeur). Donc il faut trouver une approche alternative.

Etiquettes:

Paramètres booléens

En général, il est préférable d'éviter d'écrire une méthode avec des paramètres booléens car ce n'est pas très lisible. Supposons par exemple qu'on écrit une méthode qui recherche des entités, avec un paramètre qui permet d'exclure les cercles de la recherche :

IList<Entity> FindEntities(bool ignoreCircles)
{
  //...
}

Quand on appelle la méthode, ça donne ceci :

Utiliser DebuggerDisplay sur des types externes

L'attribut DebuggerDisplay est très utile pour afficher une représentation textuelle explicite d'un type. C'est très utile surtout pour les collections. Pour vos propres types, il suffit d'ajouter l'attribut à votre déclaration de classe. Par exemple:

[DebuggerDisplay("{FirstName} {LastName}")]
public class Person {
  public string FirstName { get; set; }
  public string LastName { get; set; }
}

Extraire tous les textes d'un dessin AutoCAD

En théorie, c'est faisable avec la commande EXTRACTDONNEES mais le problème c'est que les codes de formatages sont inclus dans les chaînes extraites. Voici donc le code d'une petite commande en C#/.NET :

Etiquettes:

Petit exemple montrant comment écrire dans Excel en C#

Le texte écrit dans Excel Voici le code complet d'une application console en C# qui se connecte à une session Excel existante ou qui en crée une nouvelle si Excel n'est pas en cours d'exécution.

Etiquettes:

AutoCAD : l'API .NET est parfois un peu compliquée

AutoCAD propose de nombreuses API : ObjectARX, .NET, ActiveX/COM, AutoLISP. Il faut en plus maintenant ajouter l'API Javascript qui est une nouveauté d'AutoCAD 2014. Et parfois, ce qui s'avère très simple dans une des API se révéle très compliqué dans une autre. Prenons par exemple le cas du zoom étendu.

Avec l'API ActiveX et VBA, il suffit de faire :

ThisDrawing.Application.ZoomExtents

Avec l'API .NET, c'est un peu plus compliqué :

Etiquettes:

AutoCAD indexed colors list

A little bit of code to export the list of Red, Green and Blue values for indexed AutoCAD colors:

[CommandMethod("DUMPCOLORS")]
public void DumpColors()
{
    using (var sw = new StreamWriter(@"C:\temp\acadColors.txt"))
    {
        sw.WriteLine(" I ; R ; G ; B ");
        for (short colorIndex = 1; colorIndex <= 255; colorIndex++)
        {
            using (Color color = Color.FromColorIndex(ColorMethod.ByAci, colorIndex))
            {
                sw.WriteLine("{0,3};{1,3};{2,3};{3,3}", colorIndex,
                    color.ColorValue.R, color.ColorValue.G, color.ColorValue.B);
            }
        }
    }
}

Etiquettes:

Liste des valeurs RVB pour les couleurs indexées d'AutoCAD

Un petit bout de code pour exporter la liste des valeurs Rouge, Vert, Bleu pour les couleurs indexées d'AutoCAD :

[CommandMethod("DUMPCOLORS")]
public void DumpColors()
{
    using (var sw = new StreamWriter(@"C:\temp\acadColors.txt"))
    {
        sw.WriteLine(" I ; R ; G ; B ");
        for (short colorIndex = 1; colorIndex <= 255; colorIndex++)
        {
            using (Color color = Color.FromColorIndex(ColorMethod.ByAci, colorIndex))
            {
                sw.WriteLine("{0,3};{1,3};{2,3};{3,3}", colorIndex,
                    color.ColorValue.R, color.ColorValue.G, color.ColorValue.B);
            }
        }
    }
}

Etiquettes:

Pages

Subscribe to RSS - .NET