autocad 3d generator
plugin autocad · ia générative · modélisation 3d
plugin autocad · ia générative · modélisation 3d

Génère des modèles 3D directement dans AutoCAD

Un plugin qui intègre une interface web dans AutoCAD pour créer des modèles 3D à partir d'une simple description textuelle, et les importer en un clic dans l'espace de dessin.

ce que fait ce plugin
nrfonction — description
01

Description en langage naturel

Décris l'objet que tu veux modéliser en français ou anglais. Le plugin envoie ta description à l'API Meshy.

02

Génération IA automatique

Meshy génère un modèle 3D complet (fichier .obj) en 1 à 2 minutes grâce à l'intelligence artificielle.

03

Import direct dans AutoCAD

D'un seul clic, le modèle est téléchargé et importé directement dans l'espace de dessin AutoCAD 2027.

04

Interface web intégrée

L'interface est une page HTML/CSS/JS affichée dans une palette AutoCAD via WebView2 de Microsoft.

aperçu de l'interface
●●● AutoCAD 2027 — Générateur 3D

Générateur 3D

✓ Modèle prêt ! Cliquez pour importer dans AutoCAD.

Comment ça marche ?

Le plugin ouvre une palette dans AutoCAD. Tu décris ton objet, l'IA génère le modèle, et il est importé automatiquement.

  • 01Tape la commande GEN3D dans AutoCAD
  • 02Décris l'objet dans la palette
  • 03Attends 1-2 min que l'IA génère le modèle
  • 04Clique "Importer dans AutoCAD"
technologies utilisées
AutoCAD 2027 C# / .NET 10 Visual Studio 2022 HTML / CSS / JavaScript Visual Studio Code Microsoft WebView2 API Meshy (IA 3D) SDK .NET 10

Tutoriel complet

Guide pas à pas pour créer un plugin AutoCAD avec interface web, destiné aux débutants complets sous Visual Studio 2022.

01

Ce dont tu as besoin avant de commencer

Logiciels à installer

  • AutoCAD 2027 — déjà installé sur ta machine
  • Visual Studio 2022 Community (gratuit) — l'outil pour créer le plugin en C#. Téléchargeable sur visualstudio.microsoft.com
  • Visual Studio Code (gratuit) — pour créer la partie web HTML/CSS/JS. Téléchargeable sur code.visualstudio.com
  • SDK .NET 10 — téléchargeable sur dotnet.microsoft.com/download/dotnet/10.0, choisir "SDK x64 Windows"
⚠️ Important — SDK .NET 10 AutoCAD 2027 utilise .NET 10 en interne. Sans ce SDK installé, la compilation va échouer avec des erreurs de version. Il faut l'autoriser à modifier ton ordinateur (répondre Oui à la fenêtre Windows).

Compte à créer

Va sur meshy.ai, crée un compte gratuit, puis dans les paramètres du compte cherche API Key. Copie cette clé — tu en auras besoin dans le fichier JavaScript.

02

Créer la partie web avec Visual Studio Code

Avant de toucher à Visual Studio, on crée l'interface visuelle du plugin. C'est une page web normale.

étape 1
Créer un dossier Web

Crée un dossier sur ton bureau appelé Web. À l'intérieur, crée trois fichiers : index.html, style.css et script.js

étape 2
Ouvrir dans Visual Studio Code

Lance VS Code → Fichier → Ouvrir le dossier → sélectionne ton dossier Web

Fichier index.html

html
<!DOCTYPE html>
<html lang="fr">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>AI 3D Generator</title>
  <link rel="stylesheet" href="style.css" />
</head>
<body>
  <div class="plugin-container">
    <h1>Générateur 3D</h1>
    <div class="input-section">
      <label for="promptInput">Description de l'objet :</label>
      <textarea id="promptInput"
        placeholder="Ex: Une chaise moderne en bois..."></textarea>
    </div>
    <button id="generateBtn">Générer le modèle 3D</button>
    <div id="loader" class="hidden">
      <div class="spinner"></div>
      <p>Création en cours... (peut prendre 1-2 min)</p>
    </div>
    <div id="statusMsg" class="hidden"></div>
    <div id="resultArea" class="hidden">
      <p class="success-msg">✓ Modèle prêt !</p>
      <button id="importBtn" class="secondary">Importer dans AutoCAD</button>
    </div>
  </div>
  <script src="script.js"></script>
</body>
</html>

Fichier style.css

css
* { margin: 0; padding: 0; box-sizing: border-box; }

body {
  font-family: Arial, sans-serif;
  background: #1e1e1e;
  color: #ffffff;
  padding: 20px;
}

.plugin-container { max-width: 460px; }

h1 { font-size: 18px; margin-bottom: 20px; color: #4fc3f7; }

.input-section { margin-bottom: 15px; }

label { display: block; margin-bottom: 5px; font-size: 13px; color: #aaaaaa; }

textarea {
  width: 100%; height: 100px;
  background: #2d2d2d; border: 1px solid #444;
  color: #ffffff; padding: 10px;
  border-radius: 4px; font-size: 13px; resize: vertical;
}

button {
  width: 100%; padding: 10px;
  background: #4fc3f7; color: #000000;
  border: none; border-radius: 4px;
  font-size: 14px; cursor: pointer; font-weight: bold;
}

button:hover { background: #81d4fa; }

button.secondary {
  background: #2d2d2d; color: #4fc3f7;
  border: 1px solid #4fc3f7; margin-top: 10px;
}

.hidden { display: none; }

#loader { margin-top: 15px; text-align: center; }

.spinner {
  width: 30px; height: 30px;
  border: 3px solid #444;
  border-top: 3px solid #4fc3f7;
  border-radius: 50%;
  animation: spin 1s linear infinite;
  margin: 0 auto 10px auto;
}

@keyframes spin { to { transform: rotate(360deg); } }

#statusMsg {
  margin-top: 10px; padding: 10px;
  background: #2d2d2d; border-radius: 4px; font-size: 13px;
}

.success-msg { color: #81c784; font-weight: bold; }

#resultArea { margin-top: 15px; }

Obtenir ta clé API Meshy

Va sur meshy.ai, crée un compte, connecte-toi, puis dans les paramètres cherche API Key. Copie-la.

Fichier script.js

⚠️ Remplace TA_CLE_API_MESHY Dans le code ci-dessous, remplace le texte TA_CLE_API_MESHY par la vraie clé que tu viens de copier sur Meshy.
javascript
const MESHY_API_KEY = "TA_CLE_API_MESHY";

document.getElementById("generateBtn")
  .addEventListener("click", async () => {
  const prompt = document.getElementById("promptInput").value.trim();
  if (!prompt) { alert("Décris d'abord l'objet !"); return; }

  document.getElementById("loader").classList.remove("hidden");
  document.getElementById("resultArea").classList.add("hidden");
  document.getElementById("statusMsg").classList.add("hidden");
  document.getElementById("generateBtn").disabled = true;

  try {
    const response = await fetch("https://api.meshy.ai/v2/text-to-3d", {
      method: "POST",
      headers: {
        "Authorization": `Bearer ${MESHY_API_KEY}`,
        "Content-Type": "application/json"
      },
      body: JSON.stringify({
        mode: "preview",
        prompt: prompt,
        art_style: "realistic"
      })
    });

    const data = await response.json();
    const taskId = data.result;
    const modelUrl = await pollForResult(taskId);

    document.getElementById("loader").classList.add("hidden");
    document.getElementById("resultArea").classList.remove("hidden");

    document.getElementById("importBtn").onclick = () => {
      window.chrome.webview.postMessage("IMPORT:" + modelUrl);
    };

  } catch (err) {
    document.getElementById("loader").classList.add("hidden");
    document.getElementById("statusMsg").classList.remove("hidden");
    document.getElementById("statusMsg").textContent = "Erreur : " + err.message;
  }

  document.getElementById("generateBtn").disabled = false;
});

async function pollForResult(taskId) {
  while (true) {
    await new Promise(r => setTimeout(r, 5000));
    const res = await fetch(
      `https://api.meshy.ai/v2/text-to-3d/${taskId}`,
      { headers: { "Authorization": `Bearer ${MESHY_API_KEY}` } }
    );
    const data = await res.json();
    if (data.status === "SUCCEEDED") return data.model_urls.obj;
    if (data.status === "FAILED") throw new Error("La génération a échoué");
  }
}
03

Créer le projet Visual Studio

étape 1
Nouveau projet

Lance Visual Studio 2022 → Créer un projet → cherche "Bibliothèque de classes" → sélectionne Bibliothèque de classes (.NET) → Suivant

étape 2
Configurer

Nom : AutoCAD3DPlugin → choisis un dossier → Créer

étape 3
Modifier le .csproj

Dans l'Explorateur de solutions, double-clique sur AutoCAD3DPlugin (l'icône C#). Remplace tout le contenu par :

xml
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net10.0-windows</TargetFramework>
    <UseWindowsForms>true</UseWindowsForms>
    <Platforms>x64</Platforms>
    <PlatformTarget>x64</PlatformTarget>
    <Nullable>enable</Nullable>
    <ImplicitUsings>disable</ImplicitUsings>
    <NoWarn>$(NoWarn);MSB3277;CS1705</NoWarn>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="acdbmgd">
      <HintPath>C:\Program Files\Autodesk\AutoCAD 2027\acdbmgd.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="acmgd">
      <HintPath>C:\Program Files\Autodesk\AutoCAD 2027\acmgd.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="accoremgd">
      <HintPath>C:\Program Files\Autodesk\AutoCAD 2027\accoremgd.dll</HintPath>
      <Private>False</Private>
    </Reference>
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.Web.WebView2" Version="1.0.3967.48" />
  </ItemGroup>
  <ItemGroup>
    <Content Include="Web\index.html">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Include="Web\style.css">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Include="Web\script.js">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
</Project>
étape 4
Ajouter les fichiers web

Clic droit sur le projet → Ajouter → Nouveau dossier → nomme-le Web. Puis clic droit sur Web → Ajouter → Élément existant → sélectionne tes 3 fichiers HTML/CSS/JS.

étape 5
Modifier AssemblyInfo.cs

Dans Properties → AssemblyInfo.cs, remplace tout le contenu par :

c#
using System.Runtime.InteropServices;

[assembly: ComVisible(false)]
[assembly: Guid("25f5afd5-83cb-4839-bd3a-dfdc2f1ecbd2")]
étape 6
Créer PalettePanel.cs

Supprime Class1.cs. Clic droit sur le projet → Ajouter → Nouvel élément → Classe → nomme-le PalettePanel.cs. Colle ce code :

c#
using System;
using System.IO;
using System.Windows.Forms;
using Microsoft.Web.WebView2.WinForms;
using Microsoft.Web.WebView2.Core;

namespace AutoCAD3DPlugin
{
    public class PalettePanel : UserControl
    {
        private WebView2 webView;

        public PalettePanel()
        {
            webView = new WebView2();
            webView.Dock = DockStyle.Fill;
            this.Controls.Add(webView);
            this.Load += PalettePanel_Load;
        }

        private async void PalettePanel_Load(object? sender, EventArgs e)
        {
            await webView.EnsureCoreWebView2Async(null);
            string pluginDir = Path.GetDirectoryName(
                System.Reflection.Assembly.GetExecutingAssembly().Location)!;
            string htmlPath = Path.Combine(pluginDir, "Web", "index.html");
            webView.CoreWebView2.Navigate(
                "file:///" + htmlPath.Replace("\\", "/"));
        }
    }
}
étape 7
Créer Commands.cs

Même procédure → Classe → Commands.cs

c#
using System;
using System.Drawing;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.Windows;

namespace AutoCAD3DPlugin
{
    public class Commands
    {
        private static PaletteSet? _paletteSet;

        [CommandMethod("GEN3D")]
        public void ShowGenerator()
        {
            try
            {
                if (_paletteSet == null)
                {
                    _paletteSet = new PaletteSet("Générateur 3D");
                    _paletteSet.Size = new Size(500, 700);
                    _paletteSet.Add("Générateur", new PalettePanel());
                }
                _paletteSet.Visible = true;
            }
            catch (System.Exception ex)
            {
                Autodesk.AutoCAD.ApplicationServices.Application
                    .DocumentManager.MdiActiveDocument
                    .Editor.WriteMessage("\nErreur : " + ex.Message);
            }
        }
    }
}
04

Compiler et tester dans AutoCAD

étape 1
Compiler

Génération → Regénérer la solution. Tu dois voir Build : 1 réussite(s), 0 échec(s) en bas de Visual Studio.

étape 2
Trouver le .dll

Le fichier compilé se trouve dans : bin\x64\Debug\net10.0-windows\AutoCAD3DPlugin.dll

étape 3
Charger dans AutoCAD

Ouvre AutoCAD → tape NETLOAD dans la barre de commandes → navigue jusqu'au .dll → sélectionne-le → clique "Load Once" si AutoCAD demande si tu lui fais confiance.

étape 4
Lancer le plugin

Tape GEN3D dans la barre de commandes. La palette du générateur 3D doit s'ouvrir sur le côté.

⚠️ Important avant de recompiler Ferme toujours AutoCAD complètement avant de recompiler dans Visual Studio. Si AutoCAD est ouvert et a chargé ton plugin, il verrouille le fichier .dll et la compilation échoue.

Difficultés rencontrées

Tous les problèmes rencontrés pendant le développement du plugin, et comment ils ont été résolus.

étatproblème — type

Double balise meta charset dans index.html

erreur html résolu
problème

Visual Studio signalait 3 erreurs dans index.html : "La balise n'a pas été fermée", "Balise de fin </meta> attendue", "Balise de fin </link> attendue". La liste d'erreurs affichait 13 erreurs et 165 avertissements.

La balise n'a pas été fermée. <meta charset="UTF-8"> Balise de fin </meta> attendue.
cause

Il y avait deux balises <meta charset> : une ancienne sans /> et une nouvelle correcte. Le code avait été copié deux fois.

✓ Solution Supprimer la ligne en double. Garder uniquement <meta charset="UTF-8" /> avec la fermeture correcte. Les balises <meta> et <link> en HTML5 doivent se fermer avec />.

165 avertissements de conflits System.Runtime

avertissements résolu
problème

Après compilation, Visual Studio affichait 165 avertissements du type :

L'assembly 'accoremgd' utilise 'System.Runtime, Version=10.0.0.0' dont la version est supérieure à celle de l'assembly référencé 'System.Runtime, Version=8.0.0.0'
cause

AutoCAD 2027 est compilé avec .NET 10, mais le projet ciblait .NET 8. Cette incompatibilité de version génère des avertissements MSB3277.

✓ Solution Ajouter <NoWarn>$(NoWarn);MSB3277</NoWarn> dans le fichier .csproj pour ignorer ces avertissements inévitables. Les conflits de version entre AutoCAD et le projet sont normaux et n'affectent pas le fonctionnement du plugin.

Erreurs CS1705 bloquant la compilation

erreur c# résolu
problème

Les avertissements de version se transformaient en erreurs bloquantes CS1705 qui empêchaient complètement la compilation :

CS1705: L'assembly 'Acmgd' Version=26.0.0.0 utilise 'System.Runtime, Version=10.0.0.0' supérieure à l'assembly référencé Version=8.0.0.0
cause

Le projet ciblait .NET 8 ou .NET 9, trop éloigné de .NET 10 utilisé par AutoCAD 2027. L'écart de version était trop grand pour être toléré par le compilateur.

✓ Solution Installer le SDK .NET 10 depuis dotnet.microsoft.com, puis changer le .csproj pour cibler net10.0-windows. En ciblant exactement la même version que AutoCAD, les conflits disparaissent complètement.

Attributs Assembly en double

erreur c# résolu
problème

Visual Studio signalait plusieurs erreurs d'attributs en double :

Attribut 'System.Reflection.AssemblyProductAttribute' en double Attribut 'System.Reflection.AssemblyVersionAttribute' en double Attribut 'System.Reflection.AssemblyTitleAttribute' en double
cause

Les projets .NET SDK (style moderne) génèrent automatiquement ces attributs. Le fichier AssemblyInfo.cs de l'ancien style les déclarait une deuxième fois, créant des doublons.

✓ Solution Vider le fichier AssemblyInfo.cs pour ne garder que les deux attributs que le SDK ne génère pas automatiquement : ComVisible(false) et Guid(...).

Fichier .dll verrouillé lors de la recompilation

erreur build résolu
problème

Après avoir testé le plugin dans AutoCAD et voulu recompiler, Visual Studio affichait cette erreur répétée 10 fois :

Impossible de copier AutoCAD3DPlugin.dll. Le fichier est verrouillé par : "AutoCAD Application (4644)"
cause

AutoCAD était encore ouvert et avait chargé le .dll en mémoire. Windows empêche la modification d'un fichier en cours d'utilisation.

✓ Solution Fermer AutoCAD complètement avant de recompiler. Si le processus reste actif en arrière-plan, aller dans le Gestionnaire des tâches (Ctrl+Shift+Échap) et terminer le processus acad.exe.

PalettePanel créé comme WinForms designer au lieu d'une classe

erreur configuration résolu
problème

Lors de la création du fichier PalettePanel.cs, Visual Studio l'avait créé comme un composant WinForms avec un designer visuel. Cela causait des erreurs de conception et des conflits avec le code.

La valeur ne peut pas être nul (WriteAsync) Could not find node for CodeDom object: 'InitializeComponent'
cause

Au lieu de choisir "Classe" dans les modèles, un modèle WinForms avait été sélectionné, ce qui génère des fichiers .cs et .resx supplémentaires incompatibles.

✓ Solution Supprimer le PalettePanel.cs mal créé (et son .resx associé), puis le recréer en choisissant strictement "Classe" dans la liste des modèles. Coller le code manuellement sans utiliser le designer visuel.

AutoCAD crashe avec FATAL ERROR après GEN3D

crash autocad en cours
problème

Après avoir tapé GEN3D dans AutoCAD, le logiciel crashait avec une erreur fatale :

FATAL ERROR: Unhandled e0434352h Exception at 8DD2FE0Ah
cause identifiée

WebView2 (le composant qui affiche la page web) est incompatible avec certaines versions d'AutoCAD Education. La tentative d'initialiser un moteur de rendu web dans le processus AutoCAD cause un conflit mémoire.

solutions essayées
  • Utiliser un Form classique à la place d'une PaletteSet → crash identique
  • Utiliser un UserControl simple sans WebView2 → même crash
  • Modifier la version .NET (8, 9, 10) → crash persistant
  • Passer en PaletteSet AutoCAD native → crash toujours présent
⚠️ Piste de résolution Le problème est potentiellement lié à la version Education d'AutoCAD 2027 qui impose des restrictions sur les plugins tiers. Une solution possible serait d'utiliser une vraie licence AutoCAD ou de remplacer WebView2 par une autre approche d'affichage (WPF WebBrowser, fenêtre externe séparée du processus AutoCAD).