C#启动AutoCAD

AutoCAD如何通过C#进行插件开发? AutoCAD是一款广泛应用于工程设计和建筑行业的计算机辅助设计软件。通过使用C#语言进行插件开发,可以扩展AutoCAD的功能,实现定制化的需求。插件可以实现自动化绘图、数据处理、批量操作等功能,提高工作效率和准确性。在本文中,总结使用C#语言进行AutoCAD插件开发并记录。 阅读详情

void
addMenuThroughCom()
{

    AutoCAD::IAcadApplication 
*pAcad;
    AutoCAD::IAcadMenuBar 
*pMenuBar;
    AutoCAD::IAcadMenuGroups 
*pMenuGroups;
    AutoCAD::IAcadMenuGroup 
*pMenuGroup;
    AutoCAD::IAcadPopupMenus 
*pPopUpMenus;
    AutoCAD::IAcadPopupMenu 
*pPopUpMenu;
    AutoCAD::IAcadPopupMenuItem 
*pPopUpMenuItem;

    HRESULT hr 
= NOERROR;
    LPUNKNOWN pUnk 
= NULL;
    LPDISPATCH pAcadDisp 
= acedGetIDispatch(TRUE); 
    
if(pAcadDisp==NULL)
        
return;

    hr 
= pAcadDisp->QueryInterface(AutoCAD::IID_IAcadApplication,(void**)&pAcad);
    pAcadDisp
->Release();
    
if (FAILED(hr))
        
return;

    pAcad
->put_Visible(true);
    pAcad
->get_MenuBar(&pMenuBar);
    pAcad
->get_MenuGroups(&pMenuGroups);
    pAcad
->Release();
    
long numberOfMenus;
    pMenuBar
->get_Count(&numberOfMenus);
    pMenuBar
->Release();

    VARIANT index;
    VariantInit(
&index);
    V_VT(
&index) = VT_I4;
    V_I4(
&index) = 0;

    pMenuGroups
->Item(index, &pMenuGroup);
    pMenuGroups
->Release();
    
    pMenuGroup
->get_Menus(&pPopUpMenus);
    pMenuGroup
->Release();

    WCHAR wstrMenuName[
256];
    #ifdef UNICODE
        _tcscpy(wstrMenuName, L
"AsdkComAccess");
    
#else  // !UNICODE
        MultiByteToWideChar(CP_ACP, 
0, "AsdkComAccess", -1, wstrMenuName, 256); 
    
#endif // !UNICODE

    
// Enables the menu to be loaded/unloaded with the same command.
    if (!bIsMenuLoaded) {
        pPopUpMenus
->Add(wstrMenuName, &pPopUpMenu);

        
if (pPopUpMenu != NULL) {

            WCHAR wstrMenuItemName[
256];
            WCHAR wstrMenuItemMacro[
256];
            #ifdef UNICODE
                _tcscpy(wstrMenuItemName, L
"&Add A ComCircle");
                _tcscpy(wstrMenuItemMacro, L
"AsdkComCircle ");
            
#else  // !UNICODE
                MultiByteToWideChar(CP_ACP, 
0, "&Add A ComCircle", -1, wstrMenuItemName, 256); 
                MultiByteToWideChar(CP_ACP, 
0, "AsdkComCircle ", -1, wstrMenuItemMacro, 256); 
            
#endif // !UNICODE

            VariantInit(
&index);
            V_VT(
&index) = VT_I4;
            V_I4(
&index) = 0;
            pPopUpMenu
->AddMenuItem(index, wstrMenuItemName, wstrMenuItemMacro, &pPopUpMenuItem);

            VariantInit(
&index);
            V_VT(
&index) = VT_I4;
            V_I4(
&index) = 1;
            pPopUpMenu
->AddSeparator(index, &pPopUpMenuItem);

            #ifdef UNICODE
                _tcscpy(wstrMenuItemName, L
"Auto&LISP Example");
                _tcscpy(wstrMenuItemMacro, L
"(prin1 /"Hello/") ");
            
#else  // !UNICODE
                MultiByteToWideChar(CP_ACP, 
0, "Auto&LISP Example", -1, wstrMenuItemName, 256); 
                MultiByteToWideChar(CP_ACP, 
0, "(prin1 /"Hello/") ", -1, wstrMenuItemMacro, 256); 
            
#endif // !UNICODE

            VariantInit(
&index);
            V_VT(
&index) = VT_I4;
            V_I4(
&index) = 2;
            pPopUpMenu
->AddMenuItem(index, wstrMenuItemName, wstrMenuItemMacro, &pPopUpMenuItem);

            VariantInit(
&index);
            V_VT(
&index) = VT_I4;
            V_I4(
&index) = numberOfMenus - 2;
            pPopUpMenu
->InsertInMenuBar(index);
    
            pPopUpMenuItem
->Release();
            bIsMenuLoaded 
= true;
        }
 else {
            acutPrintf(_T(
"/nMenu not created."));
        }

    }
 else {
        VariantInit(
&index);
        V_VT(
&index) = VT_BSTR;
        V_BSTR(
&index) = wstrMenuName;
        pPopUpMenus
->RemoveMenuFromMenuBar(index);
        VariantClear(
&index);
        bIsMenuLoaded 
= false;
    }


    pPopUpMenus
->Release();
}

二 C++基于MFC的

void
addMenuThroughMfcCom()
{
    TRY
    
{
        CAcadApplication IAcad(acedGetAcadWinApp()
->GetIDispatch(TRUE));

        CAcadMenuBar IMenuBar(IAcad.get_MenuBar());

        
long numberOfMenus;
        numberOfMenus 
= IMenuBar.get_Count();

        CAcadMenuGroups IMenuGroups(IAcad.get_MenuGroups());

        VARIANT index;
        VariantInit(
&index);
        V_VT(
&index) = VT_I4;
        V_I4(
&index) = 0;

        CAcadMenuGroup IMenuGroup(IMenuGroups.Item(index));

        CAcadPopupMenus IPopUpMenus(IMenuGroup.get_Menus());

        CString cstrMenuName 
= _T("AsdkComAccess");

        VariantInit(
&index);
        V_VT(
&index) = VT_BSTR;
        V_BSTR(
&index) = cstrMenuName.AllocSysString();

        IDispatch
* pDisp=NULL;

        
//see if the menu is already there
        TRY{pDisp = IPopUpMenus.Item(index); pDisp->AddRef();} CATCH(COleDispatchException,e){}END_CATCH;

        
if (pDisp==NULL) {
            
//create it
            CAcadPopupMenu IPopUpMenu(IPopUpMenus.Add(cstrMenuName));

            VariantInit(
&index);
            V_VT(
&index) = VT_I4;
            V_I4(
&index) = 0;
            IPopUpMenu.AddMenuItem(index, _T(
"&Add A ComCircle"), _T("_AsdkMfcComCircle "));

            VariantInit(
&index);
            V_VT(
&index) = VT_I4;
            V_I4(
&index) = 1;
            IPopUpMenu.AddSeparator(index);

            VariantInit(
&index);
            V_VT(
&index) = VT_I4;
            V_I4(
&index) = 2;
            IPopUpMenu.AddMenuItem(index, _T(
"Auto&LISP Example"), _T("(prin1 /"Hello/") "));

            pDisp 
= IPopUpMenu.m_lpDispatch;
            pDisp
->AddRef();
        }


        CAcadPopupMenu IPopUpMenu(pDisp);
        
if (!IPopUpMenu.get_OnMenuBar())
        
{
            VariantInit(
&index);
            V_VT(
&index) = VT_I4;
            V_I4(
&index) = numberOfMenus - 2;;
            IPopUpMenu.InsertInMenuBar(index);
        }

        
else
        
{
            VariantInit(
&index);
            V_VT(
&index) = VT_BSTR;
            V_BSTR(
&index) = cstrMenuName.AllocSysString();
            IPopUpMenus.RemoveMenuFromMenuBar(index);
            VariantClear(
&index);
        }

        pDisp
->Release();
    }

    CATCH(COleDispatchException,e)
    
{
        e
->ReportError();
        e
->Delete();
    }

    END_CATCH;
}


三 C#基于COM接口

using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.Runtime.InteropServices;

using Autodesk.AutoCAD.Interop;
using Autodesk.AutoCAD.Interop.Common;

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Runtime;

namespace CSharpCOM
{
    
public class Class1
    
{
        
public Class1() { }

        [CommandMethod(
"AM")]
        
public static void AddMenuCom()
        
{
            AcadApplication app 
= (AcadApplication)Marshal.GetActiveObject("AutoCAD.Application.17");
            AcadMenuBar menuBar 
= app.MenuBar;
            AcadMenuGroup menuGroup 
= app.MenuGroups.Item(0);
            AcadPopupMenus menus 
= menuGroup.Menus;
            AcadPopupMenu mymenu 
= menus.Add("MyMenu");

            mymenu.AddMenuItem(
0, "Hello", "hello");
            mymenu.AddSeparator(
1);
            mymenu.AddMenuItem(
2, "Hello2", "hello");
            AcadPopupMenu ext 
= mymenu.AddSubMenu(3, "Ext");
            ext.AddMenuItem(
0, "Hello", "hello");
            ext.AddSeparator(
1);
            ext.AddMenuItem(
2, "Hello2", "hello");
            mymenu.InsertInMenuBar(menuBar.Count 
- 2);
        }


        [CommandMethod(
"hello")]
        
public static void Hello()
        
{
            AcadApplication app 
= (AcadApplication)Marshal.GetActiveObject("AutoCAD.Application.17");
            app.ActiveDocument.Utility.Prompt(
"Hello/n");
        }



    }

}


四 CSharp基于ACUI.DLL接口的

// Copyright 2005-2007 by Autodesk, Inc.
//
//Permission to use, copy, modify, and distribute this software in
//object code form for any purpose and without fee is hereby granted, 
//provided that the above copyright notice appears in all copies and 
//that both that copyright notice and the limited warranty and
//restricted rights notice below appear in all supporting 
//documentation.
//
//AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS. 
//AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF
//MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE.  AUTODESK, INC. 
using System;
using System.IO;

using System.Runtime.InteropServices;
using System.Text;

using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.DatabaseServices;

using Autodesk.AutoCAD.Customization;



namespace CuiSamp
{

    
/// <summary>
    
/// Summary description for Class1.
    
/// </summary>

    public class CuiSamp
    
{
        
members

        
//Default Constructor
        public CuiSamp()
        
{
            
// retrieve the location of, and open the ACAD Main CUI File
            string mainCuiFile = (string)Application.GetSystemVariable("MENUNAME");
            mainCuiFile 
+= ".cui";
            cs 
= new CustomizationSection(mainCuiFile);

            
string entCuiFile = (string)Application.GetSystemVariable("ENTERPRISEMENU");
            
if (entCuiFile.Equals("."))
                entCsLoaded 
= false;
            
else
            
{
                entCs 
= new CustomizationSection(entCuiFile);
                entCsLoaded 
= true;
            }


            
// Code for loading all partial CUI's listed in the main CUI file

            partials 
= new CustomizationSection[cs.PartialCuiFiles.Count];
            
int i = 0;
            
foreach (string fileName in cs.PartialCuiFiles)
            
{
                
if (File.Exists(fileName))
                
{
                    partials[i] 
= new CustomizationSection(fileName);
                    i
++;
                }

            }

            numPartialFiles 
= i;
        }



        
// Command: savecui
        
// This Command saves all open CUI Files that have been modified
        [CommandMethod("savecui")]
        
public void saveCui()
        
{
            
// Save all Changes made to the CUI file in this session. 
            
// If changes were made to the Main CUI file - save it
            
// If changes were made to teh Partial CUI files need to save them too

            
if (cs.IsModified)
                cs.Save();

            
for (int i = 0; i < numPartialFiles; i++)
            
{
                
if (partials[i].IsModified)
                    partials[i].Save();
            }


            
if (entCsLoaded && entCs.IsModified)
                entCs.Save();

            
// Here we unload and reload the main CUI file so the changes to the CUI file could take effect immediately.
            
//string flName = cs.CUIFileBaseName;
            
//Application.SetSystemVariable("FILEDIA", 0);
            
//Application.DocumentManager.MdiActiveDocument.SendStringToExecute("cuiunload " + flName + " ", false, false, false);
            
//Application.DocumentManager.MdiActiveDocument.SendStringToExecute("cuiload " + flName + " filedia 1 ", false, false, false);
            
//Application.SetSystemVariable("FILEDIA", 1);
        }


        
// Command: addmenu
        
// This Command adds a new menu to all workspaces called Custom Menu, which contains 2 sub items
        
// The Menu is first added to the Main CUI File and then added to all it's workspaces. 
        [CommandMethod("addmenu")]
        
public void addMenu()
        
{
            
if (cs.MenuGroup.PopMenus.IsNameFree("CustomMenu"))
            
{

                System.Collections.Specialized.StringCollection pmAliases 
= new System.Collections.Specialized.StringCollection();
                pmAliases.Add(
"POP12");

                PopMenu pm 
= new PopMenu("CustomMenu", pmAliases, "CustomMenu", cs.MenuGroup);

                addItemsToPM(pm);
                addMenu2Workspaces(pm);
            }

            
else
                ed.WriteMessage(
"CustomMenu already Exists/n");
        }



        
// Add new Items to a PopMenu
        private void addItemsToPM(PopMenu pm)
        
{
            PopMenuItem pmi 
= new PopMenuItem(pm, -1);
            pmi.MacroID 
= "ID_AUGI"; pmi.Name = "Autodesk User Group International";

            pmi 
= new PopMenuItem(pm, -1);

            pmi 
= new PopMenuItem(pm, -1);
            pmi.MacroID 
= "ID_CustomSafe"; pmi.Name = "Online Developer Center";
        }


        
// Add the menu to all the workspaces
        private void addMenu2Workspaces(PopMenu pm)
        
{
            
foreach (Workspace wk in cs.Workspaces)
            
{
                WorkspacePopMenu wkpm 
= new WorkspacePopMenu(wk, pm);
                wkpm.Display 
= 1;
            }


        }


        
// Command: remmenu
        
// This Command deletes the menu added above from the Main CUI File and any
        
//  workspaces that it was added to. 
        [CommandMethod("remmenu")]
        
public void remMenu()
        
{
            
// Find Index of the desired MenuItem
            
// Remove it from all Workspaces that it exists in
            
// Omitting this step leaves nasty left-overs in the Workspace files
            
// Remove it from the Cui files' Menu List

            PopMenu pm 
= cs.MenuGroup.PopMenus.FindPopWithAlias("POP12");
            
if (pm != null)
            
{
                
foreach (Workspace wk in cs.Workspaces)
                
{
                    WorkspacePopMenu wkPm 
= wk.WorkspacePopMenus.FindWorkspacePopMenu(pm.ElementID, pm.Parent.Name);

                    
if (wkPm != null)
                        wk.WorkspacePopMenus.Remove(wkPm);
                }

                cs.MenuGroup.PopMenus.Remove(pm);    
// Deletes the Menu from ACAD Menu Group
            }

        }



        
// Command: addtoolbar
        
// Creates a new toolbar called "New Toolbar", and adds it to all workspaces. 
        
// This toolbar contains a Toolbar control for named view, button for drawing 
        
// a pline, and a flyout that uses the "Draw" tool bar.
        [CommandMethod("addtoolbar")]
        
public void addToolbar()
        
{
            Toolbar newTb 
= new Toolbar("New Toolbar", cs.MenuGroup);
            newTb.ToolbarOrient 
= ToolbarOrient.floating;
            newTb.ToolbarVisible 
= ToolbarVisible.show;

            ToolbarControl tbCtrl 
= new ToolbarControl(ControlType.NamedViewControl, newTb, -1);

            ToolbarButton tbBtn 
= new ToolbarButton(newTb, -1);
            tbBtn.Name 
= "PolyLine";
            tbBtn.MacroID 
= "ID_Pline";

            ToolbarFlyout tbFlyout 
= new ToolbarFlyout(newTb, -1);
            tbFlyout.ToolbarReference 
= "DRAW";

            
foreach (Workspace wk in cs.Workspaces)
            
{
                WorkspaceToolbar wkTb 
= new WorkspaceToolbar(wk, newTb);
                wk.WorkspaceToolbars.Add(wkTb);
                wkTb.Display 
= 1;
            }

        }


        
// Command: remtoolbar
        
// This Command removes the toolbar added above from the Main CUI File and any
        
// workspaces that it was added to. 
        [CommandMethod("remtoolbar")]
        
public void remToolbar()
        
{
            Toolbar tbr 
= cs.MenuGroup.Toolbars.FindToolbarWithName("New Toolbar");
            
if (tbr != null)
            
{
                
foreach (Workspace wk in cs.Workspaces)
                
{
                    WorkspaceToolbar wkTb 
= wk.WorkspaceToolbars.FindWorkspaceToolbar(tbr.ElementID, tbr.Parent.Name);

                    
if (wkTb != null)
                        wk.WorkspaceToolbars.Remove(wkTb);
                }

                cs.MenuGroup.Toolbars.Remove(tbr);    
// Deletes the toolbar from ACAD Menu Group
            }

        }



        
// Command: cuiall
        
// Issuing this command will run the methods to make all changes to the UI
        
// This will add the custom menu, toolbar, and shortcut, as well as 
        
// dock the Properties palette on the right side.
        [CommandMethod("addcui")]
        
public void AddMenuAndToobar()
        
{
            addMenu();
            addToolbar();
            saveCui();
        }


        [CommandMethod(
"remcui")]
        
public void RemMenuAndToolbar()
        
{
            remMenu();
            remToolbar();
            saveCui();
        }

    }


}

AutoCAD二次开发(C#)完成后,如何实现CAD启动时自动加载dll(不必输入netload)? AutoCAD二次开发(C#)完成后,如何实现CAD启动时自动加载dll(不必输入netload)? 1、复制编译后的dll路径,比如我的是【C:\SectionManager_CAD_1.1_0312_SL4\SectionManager_CAD_1.1_0312_SL4.dll】 2、在【C:\SectionManager_CAD_1.1_0312_SL4\】下新建一个记事本,在记事本中写... 阅读详情

相关推荐

C#开发 AutoCAD二次开发 自动创建显示Ribbon界面(带图片),打开AutoCAD自动显示,执行响应程序

先看效果图

kcpnevergiveup的专栏 2412

C++和CSharp增加AutoCAD的菜单menu

转自 (http://www.cppblog.com/mzty/archive/2008/06/17/53651.html)voidaddMenuThroughCom()<img id="Codehighlighter1_25_3500_Open_Image" onclick="function onclick(){function onclick(){this.style.d

cqlnbo的专栏 1789

C# autocAD CAD二次开发中解决重新启动CAD的问题

其中用到了Newtonsoft.Json using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.DatabaseServices; using System; using System.IO; using System.Reflection; using Newtonsoft.Json...

laocooon的博客 1481

VS2019对C#类库项目制作安装包,并在安装包中配置AutoCAD启动时自动加载dll

关联用户界面中的变量和实现类Installer.cs中的变量通过将CustomActionData设置为/targetDir="[TARGETDIR]\"从安装程序中获取安装目录,给this.Context.Parameters["targetDir"]当安装程序安装时,会将PCTD_Setup的File System中指定的文件、主输出(的dll、exe),拷贝到安装目录。

weixin_43975967的博客 2640

利用C 进行AutoCAD的二次开发

利用C 进行AutoCAD的二次开发

ytyggg的博客 761

AutoCAD2019+vs2019+C# 二次开发学习笔记day01(持续更新)

目录 一、新建项目 1、应用程序 目标框架 选择 4.7.2版 2、生成 目标平台选择x64 3、调试 启动外部程序 选择 acad.exe 二、添加autocad类库 三、如何运用命名空间 1、[CommandMethod("***")] 2、简单了解一些命名空间 3、编辑的命令如何添加对应头文件 四、调用命令打开AutoCAD,通过命令打印自定义内容 一、新建项目 打开vs2019,新建项目,选择C# 类库,框架选择(.NET Framework 4.7.2) 然后需要

GiGi_Princess的博客 2875

利用C#进行AutoCAD的二次开发(一)

    众所周知,对AutoCAD进行二次开发用到的主要工具有:ObjectArx,VBA,VLisp。但它们的优缺点是显而易见的:ObjectArx功能强大,编程效率高,但它的缺点是编程者必须掌握VC++,而这门语言非常的难学;VBA和VLisp虽然简单易上手,但它们对于开发大型的程序好象无能为力。那究竟有没有一种语言能结合它们的优点而尽量避免它们的缺点呢? 回答是肯定的,那就是微软新推出的21

1141

C#winfrm-打开AutoCAD dwg/dxf文件并导出点位坐标及线型信息。

1.可以打开并浏览ACAD2018版本一下dwg/dxf图形文件 2.可以对线进行均匀分点并导出点位坐标 3.可以导出图形元素信息 4.可以保存ACAD格式文件 5.支持二次开发绘图功能等

利用C#进行AutoCAD的二次开发

利用C#进行AutoCAD的二次开发(一) 呵呵,把自己前在网上以表的文章放到这里。 利用C#进行AutoCAD的二次开发(一)            众所周知,对AutoCAD进行二次开发用到的主要工具有:ObjectArx,VBA,VLisp。但它们的优缺点是显而易见的:ObjectArx功能强大,编程效率高,但它的缺点是编程者必须掌握VC++,而这门语言非常的难学;VBA和VLisp虽然简单

§为艺术而技术§ 8240

C++如何用arx在AutoCAD2004中加载动态菜单

开发arx程序时,往往需要制定一个菜单。文档是一个以VC++7.0为平台,用ObjectARX2004对AutoCAD2004开发时,动态添加菜单的程序实例,并附带说明。

C#二次开发AutoCAD动态加载自定义菜单和命令 .pdf

在AutoCAD二次开发过程中,一般都是开发自定义的命令,然后在菜单栏/工具栏/菜单面板中添加对应的菜单,通过点击菜单调用开发的命令。 对于实现以上问题,传统的做法就是在二次开发类库中开发一个命令方法,并且方法被标注为:[CommandMethod("XXX")],然后制作CUIX文件,在AutoCAD中加载命令所在的类库(dll)和CUIX文件,通过点击菜单调用命令。 当我们开发的命令较多,且需要根据场景显示不同的菜单的时候,传统的做法就非常麻烦了。且每次修改都要改代码,灵活性不高。所以我们就想通过动态配置,CAD每次启动时能动态的加载我们配置好的命令和菜单。 具体实现方法如附件内容所示!

AutoCAD2013 以上利用AccoreConsole+ c# NetApi 批量处理图纸

AccoreConsole听起来有点拗口,其中文名可以叫做AutoCAD控制台或者无头AutoCAD。一句话概括,它是快速启动AutoCAD运行微环境,高效的处理图纸。你可以如同DOS命令行一样操作命令,处理图纸,而不需要打开AutoCAD。这在批处理大量图纸时非常有用。另外启动是不管有无license都可以正常操作,不占当前autoCAD的资源 安装AutoCAD后,在安装路径根目录下就可以看...

weixin_30905133的博客 910

c#操作CAD(实时打开关闭)

c#实时操作CAD文件,运用链接库的方式,实时打开和关闭CAD文件

利用C#进行AutoCAD的二次开发(二) by C#才鸟

 大家好,今天我继续给各位介绍利用C#进行AutoCAD的二次开发。在这一讲中,主要介绍上一讲例子中存在的问题。 在上一次的例子中我是通过引用AutoCAD 2004 Type Library来进行C#与AutoCAD之间的通信,但这种方法存在两个致命的缺点。第一个缺点是每次调试程序的时候C#都要重新启动AutoCAD,如果调试的次数非常多(比如跟踪错误然后调试),那么编程的效率就很低,因

leercwx的专栏 1449

隐藏技巧!用ArcGIS Pro像素编辑器实现PS级影像编辑(附地貌伪装案例)

本文深入探讨ArcGIS Pro像素编辑器的创意应用,从基础操作到高级影像处理实战,展示了其在城市规划、环境分析等领域的独特价值。通过详细的功能解析和地貌伪装等案例,帮助用户实现媲美专业图像处理软件的精细操作,提升GIS工作效率。

weixin_28520495的博客 335

Visual studio 2013 配置 Halcon 13 (非抄袭)

Visual studio 2013 配置 Halcon 13.0.2.2 (其他版本适用) 针对网上抄袭的配置方法均不可用,写了一篇亲试可行的配制方法。如下: 1.下载Halcon安装后(C:\Program Files\MVTec\HALCON-13.0) 添加环境变量,(按下win按键,键入“环境变量”,出现 “编辑系统环境变量”后按下enter即可打开,下方找到“环境变量”按钮)的系...

huyanjackson的专栏 1042
上一篇: 用C#进行AutoCAD的二次开发
下一篇: 如何使用 C# 验证邮件地址
marklr
博客等级 码龄19年 52粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值