使用C++进行Revit二次开发

由于VC++是在CLR中被编译所以无法达到加密的效果,如果想要保护自己的代码还是建议使用C++做核心算法,C#做交互。


由于做族库中,考虑到连接数据库代码可能会被反编译,上个版本中我采用的是WCF的方式与服务器数据交互,文章可在我前几篇找到,但是最近在学习QT相尝试使用QT+C++或是VC++开发,看一下效果,所以简单写了一个c++开发的demo。
参考链接:C++ Revit Add-In
步骤:

  1. 需要确保我们的VS上面安装CLI工具,如果按照上面的步骤直接进行的话,是没有类库选项需要我们安装额外的组件。安装点击:工具-获取工具和功能即可安装
    使用C++进行Revit二次开发_第1张图片
  2. 创建类库,输入名字与.netframwork框架版本即可,版本与RevitAPI需要的版本对应
    使用C++进行Revit二次开发_第2张图片
  3. 按照c#的开发方式,添加引用即可,在头文件中,将transation头添加,并添加iexternalcommand接口,并在cpp文件中写内容即可。但是在添加[transation]的时候无法通过智能提示添加,不清楚是不是我的原因,由于c++使用指针,如果习惯var变量可以使用auto替代,代码类中加上^符号即可。其他的只需要遵循c++的写法就可以实现c++做revit的二次开发了。

代码:
header

#pragma once

using namespace System;
using namespace Autodesk::Revit::Attributes;


namespace ClassLibrary3 {
	
	[Autodesk::Revit::Attributes::Transaction(
		Autodesk::Revit::Attributes::TransactionMode::Manual)]

	[Autodesk::Revit::Attributes::Regeneration(
		Autodesk::Revit::Attributes::RegenerationOption::Manual)]
	
	public ref class Class1:Autodesk::Revit::UI::IExternalCommand
	{
	public:
		virtual Autodesk::Revit::UI::Result Execute(Autodesk::Revit::UI::ExternalCommandData^ commandData,
			String^% message, Autodesk::Revit::DB::ElementSet^ elements);
		// TODO: 在此处为此类添加方法。
	};

cpp

#include "pch.h"

#include "ClassLibrary3.h"
#include "NameSpace.h"

namespace RevitAddin
{
	
}

Autodesk::Revit::UI::Result ClassLibrary3::Class1::Execute(Autodesk::Revit::UI::ExternalCommandData^ commandData, String^% message, Autodesk::Revit::DB::ElementSet^ elements)
{
	auto uiDoc = commandData->Application->ActiveUIDocument;
	auto doc = uiDoc->Document;
	auto selection = uiDoc->Selection;
	auto refer = selection->PickObject(Autodesk::Revit::UI::Selection::ObjectType::Element, "select");
	auto ele = doc->GetElement(refer);
	auto wall = static_cast(ele);
	Autodesk::Revit::UI::TaskDialog::Show("Revit",wall->Name);
	return Autodesk::Revit::UI::Result::Succeeded;
}

使用C++进行Revit二次开发_第3张图片

你可能感兴趣的:(Revit二次开发,C++)