我正在尝试使用Kitware ActiViz.NET。我用nuget安装了它。 但我似乎无法在工具箱上找到RenderWindowControl。我一直试图以这种方式手动添加它:
调用"选择项目......"
并在随后的对话框中点击按钮"浏览...",
导航到您的ActiViz.NET安装文件夹,浏览到/ bin 文件夹,选择" Kitware.VTK.dll"。
单击“确定”。
现在,您应该在ToolBox中看到一个名为RenderWindowControl的新控件。 但我得到"文件" C:\ programfiles \ activiz.net 5.8.0 Opensource Eddition \ bin \ kitware.vtk.DLL"无效"。
我试图在代码中添加控件而不是设计器,并且得到了以下异常: 无法加载文件或程序集' Kitware.VTK,Version = 5.8.0.607,Culture = neutral,PublicKeyToken = 995c7fb9db2c1b44'或其中一个依赖项。试图加载格式不正确的程序。
以前有人有这个问题吗? 有什么想法吗?
答案 0 :(得分:2)
对于设计模式,您需要使用32位版本,因为VS在32Bit上运行,并且只能加载32位控件。 因此,您可以将设计时间用于32位版本,并将构建/释放切换为64位版本。
但您也可以手动添加RenderWindowControl
。
当然设计师将无法展示这一点,所以它会是
在切换到设计师之前需要对其进行评论
打开您的设计师档案,例如Form1.Designer.cs并添加控件,如
private RenderWindowControl myRenderWindowControl;
private void InitalizeComponent()
{
//all other controls added by the designer
myRenderWindowControl = new RenderWindowControl();
myRenderWindowControl.SetBounds(0,0,640,480);
this.Controls.Add(this.myRenderWindowControl);
}
答案 1 :(得分:0)
将VTK的RenderWindowControl添加到WPF有点复杂。 假设您安装了64位VTK软件包,以下步骤对我有用。
#include "stdafx.h"
#include <iostream>
#include <atlbase.h>
#include <atlcom.h>
using namespace std;
using namespace TCatSysManagerLib;
using namespace EnvDTE;
int _tmain(int argc, _TCHAR* argv[])
{
CoInitialize(NULL); // COM initialisieren
cout << "Creating VisualSTudio.DTE.10.0 ...";
// creating a new instance of Visual Studio
CComPtr<_DTE> m_pDTE;
HRESULT hr = m_pDTE.CoCreateInstance(L"VisualStudio.DTE.10.0", 0, CLSCTX_ALL);
if (FAILED(hr)) { cout << " FAILED"; return 1; }
cout << " created." << endl;
// retrieves the EnvDTE.Solution-Objekt
CComPtr<_Solution> pSolution;
m_pDTE->get_Solution(&pSolution);
CComBSTR strSolutionFolder(_T("C:\\Users\\X240\\3D Objects\\Implementation\\Test")); // Solution-main directory (has to exist)
CComBSTR strSolutionName(_T("MySolution1"));
CComBSTR strTemplatePath(_T("C:\\TwinCAT\\3.1\\Components\\Base\\PrjTemplate\\TwinCATProject.tsproj"));
CComBSTR strSolutionPath; // Solution-Pfad (doesn’t exist!)
strSolutionPath = strSolutionFolder;
strSolutionPath.Append(_T("\\"));
strSolutionPath.Append(strSolutionName);
strSolutionPath.Append(_T(".sln"));
// create the solution
hr = pSolution->Create(strSolutionFolder, strSolutionName);
CComBSTR strProjectPath(strSolutionFolder); // project path
strProjectPath.Append(_T("\\"));
strProjectPath.Append(strSolutionName);
CComBSTR strProjectName = "MyProject"; // project name // create projekt from a template
CComPtr pProject;
hr = pSolution -> AddFromTemplate(strTemplatePath, strProjectPath, strProjectName, VARIANT_FALSE, &pProject);
// Wenn z.B. Projekt bereits besteht >> error
if (FAILED(hr)) { cout << " Project creation FAILED"; return 1; }
cout << "Project created" << endl;
// define project automation class (here the Coclass TcSysManager)
CComPtr pDispatch;
hr = pProject->get_Object(&pDispatch);
// retrieve ITcSysManager interface
CComPtr pSystemManager;
hr = pDispatch.QueryInterface(&pSystemManager);
// operate with SystemManager interface
CComBSTR netId;
netId = (pSystemManager->GetTargetNetId()).GetBSTR();
cout << "TargetNetId: " << netId << endl;
hr = pSystemManager->ActivateConfiguration();
hr = pSystemManager->StartRestartTwinCAT();
// save project and solution
hr = pProject->Save(CComBSTR());
hr = pSolution->SaveAs(strSolutionPath);
cout << "Succeeded";
return 0;
}