网淘吧Visual Components、Flexsim 仿真技术博客 | Python、C#、Delphi xe 机器人编程教程 - 网淘吧

自动化创建工程图 - .Net Add-on Programming - visual compents 疑难解答

2026-04-03 新闻来源:网淘吧 围观:1266
电脑广告
手机广告

自动化创建工程图

.Net 插件编程

你好,

我想创建一个插件,能够自动创建工程图(来自工程图选项卡),例如:

1:加载工程图模板
2:从当前打开的布局加载不同视图
3:定义视图位置
4:保存为 dxf 和 PDF

但我找不到相关的 API…:face_with_spiral_eyes:

谢谢与致意
Feature

1 个赞

工程图主要是 UI 侧的东西,所以我认为你需要研究 UX.Shared 和 UX.Shared.Infrastructure 程序集。
有一些基础类型如 IDrawingContext,以及许多可作为 IActionItem 导入的命令。

1 个赞

ExportDrawings

尝试了一下,应该是可行的,但还没有弄清楚如何自动创建 pdf 和 dwg。

IApplication app;
IDrawingViewGenerationAction projectAction;
IImportDrawingTemplateAction templateAction;
ICommandRegistry registry;

public override void Execute()
{
    templateAction.StartAction();
    var a0 = PathUtility.BaseDirectory + "SrcTemplates\\Drawings\\DrawingTemplateA0.vcm";
    foreach (var item in templateAction.ActionProperties)
    {
        if (item.Name == "File")
        {
            item.Value = a0;
        }
    }
    templateAction.ApplyAction();
  
    var minCorner = app.DrawingWorld.BoundBox.MinCorner;
    var maxCorner = app.DrawingWorld.BoundBox.MaxCorner;
    var intervalX = (maxCorner.X - minCorner.X) * 0.8 / 3.0;
    var intervalY = (maxCorner.Y - minCorner.Y) * 0.8 / 2.0;
    var borderX = (maxCorner.X - minCorner.X) * 0.15;
    var borderY = (maxCorner.Y - minCorner.Y) * 0.3;
  
    // 顶部视图
    projectAction.CreateView(DrawingViewPoints.Top);
    var top = (IDrawingView)app.DrawingWorld.LayoutItems.Last();
    top.Scale = "1:3";
    var topMatrix = new Matrix();
    topMatrix.Px = minCorner.X + borderX + intervalX * 0;
    topMatrix.Py = minCorner.Y + borderY + intervalY;
    top.TransformationInWorld = topMatrix;
  
    // 左侧视图
    projectAction.CreateView(DrawingViewPoints.Left);
    var left = (IDrawingView)app.DrawingWorld.LayoutItems.Last();
    left.Scale = "1:3";
    var leftMatrix = new Matrix();
    leftMatrix.Px = minCorner.X + borderX + intervalX * 1;
    leftMatrix.Py = minCorner.Y + borderY + intervalY;
    left.TransformationInWorld = leftMatrix;
  
    // 前视图
    projectAction.CreateView(DrawingViewPoints.Front);
    var front = (IDrawingView)app.DrawingWorld.LayoutItems.Last();
    front.Scale = "1:3";
    var frontMatrix = new Matrix();
    frontMatrix.Px = minCorner.X + borderX + intervalX * 2;
    frontMatrix.Py = minCorner.Y + borderY + intervalY;
    front.TransformationInWorld = frontMatrix;
  
    // 底部视图
    projectAction.CreateView(DrawingViewPoints.Down);
    var bottom = (IDrawingView)app.DrawingWorld.LayoutItems.Last();
    bottom.Scale = "1:3";
    var bottomMatrix = new Matrix();
    bottomMatrix.Px = minCorner.X + borderX + intervalX * 0;
    bottomMatrix.Py = minCorner.Y + borderY;
    bottom.TransformationInWorld = bottomMatrix;
  
    // 右侧视图
    projectAction.CreateView(DrawingViewPoints.Right);
    var right = (IDrawingView)app.DrawingWorld.LayoutItems.Last();
    right.Scale = "1:3";
    var rightMatrix = new Matrix();
    rightMatrix.Px = minCorner.X + borderX + intervalX * 1;
    rightMatrix.Py = minCorner.Y + borderY;
    right.TransformationInWorld = rightMatrix;
  
    // 后视图
    projectAction.CreateView(DrawingViewPoints.Back);
    var back = (IDrawingView)app.DrawingWorld.LayoutItems.Last();
    back.Scale = "1:3";
    var backMatrix = new Matrix();
    backMatrix.Px = minCorner.X + borderX + intervalX * 2;
    backMatrix.Py = minCorner.Y + borderY;
    back.TransformationInWorld = backMatrix;
  
    registry.ExecuteAction("ExportToVectorDrawing2D", true, true);
}
3 个赞

@idkfa 谢谢!:slight_smile:

@TSy 对于保存为 dxf 和 pdf 有什么想法吗?

你好,

有没有什么地方可以列出所有可能的命令,比如:


谢谢与致意
Feature

你可以从 ICommandRegistry.Actions 获取所有已注册的动作,然后获取每个动作的 IActionItem.Id。

1 个赞

你好@TSy 或者任何能帮忙的人,

如何选择 pdf 或 dxf 并触发导出?



致意
Feature

尝试将 id 为 “ExportToVectorDrawing2D” 的 IActionItem 强制转换为 IExportToVectorDrawingCommand,然后使用该接口的 ApplyAction 方法。

你好@TSy

我真的很想试试,但我的 VC 4.7 Premium 不知道这个接口!?
image

但它应该是公共的:


谢谢与致意
Feature

你需要添加对 UX.Shared.Infrastructure 程序集的引用。注意帮助页面显示
程序集:UX.Shared.Infrastructure

2 个赞

再次问好,

有没有办法在成功实现你的魔法后调出对话框服务,以便最终保存文件并保持全自动?→ 无需用户交互…

帮助文档帮助不大:


谢谢与致意
Feature

你好,

看起来 VC 团队中没有人想过有些人会自动化这个工程图的东西…:confused:

  • 方法 “GetSupportedFormats” 有时会抛出 nullReferenceException。

  • 帮助文件中缺少很多重要的内容

  • 我该如何获取 FileSaveDialog 而不显示给用户?

为什么 VC 框架很多地方很棒,而有些部分却如此繁琐!?

Feature

1 个赞

我认为只有 Create3d.Shared 是 VC 真正的公共 .NET API。其他所有东西都有点碰运气。

为什么没有合适的 API 来自动化工程图生成和保存?可能他们从 VC 的支持和销售部门没有收到足够多的客户对此用例的请求。:man_shrugging:

你好@TSy

这真是个坏消息,我们试图在公司不同部门引入 VC,我必须检查技术可行性… → 所以这个项目在第一步就因为缺少 API 而失败了!:confused:

但我还是要感谢你和@idkfa,让我快速了解到这个丑陋的限制!

VC 可能会因此失去一些许可证销售!

致意
Feature

1 个赞

请联系 VC 技术支持。他们可能会为你找到一些变通方法。

我会的…

谢谢与致意
Feature

我已经读过了,也许技术支持也会给我提供可用的 API…:wink:

致意
Feature

1 个赞

你好@idkfa

我最后一个未解决的问题(除了无法保存…:face_vomiting:)是创建一个等轴测视图,就像我手动做的那样:

为此,我首先将 vcCamera 设置到我需要的视图(可以工作),然后使用稍作修改的你的代码,但 VC 不接受这个… → 你有什么想法吗?

谢谢与致意
Feature

似乎 DrawingViewPoints.Current 不起作用,建议联系技术支持。

好的,我也会把这个加到我的正式请求中…:frowning:

谢谢与致意
Feature

下一页 →
免责申明
部分文章来自各大搜索引擎,如有侵权,请与我联系删除。
打赏

文章底部电脑广告
手机广告位-内容正文底部

相关文章

上网淘巴领天猫淘宝优惠券,一年省好几千。

广告  ×

您是本站第853571名访客 今日有0篇新文章/评论