Inventor API代码性能优化 - 2

Inventor SDK入门---API创建零文档类型的Ribbon命令按钮 Inventor SDK入门---API创建零文档类型的Ribbon命令按钮,本文制作一个ZeroDoc环境下的Ribbon命令按钮。 阅读详情

上篇我们谈到一些场景。本篇我们先来看看VBA编程可以优化的方面。大家熟悉的,VBA里有个缺省的对象ThisApplication,它是Inventor API的顶层入口。用起来比较方便,但其实会有所消耗,以下面的代码为例,它访问Locale属性10万次,花费了74.8 秒(进程外的话)。

Public Sub CallCost() 
    Dim timer As New clsTimer 
    timer.Start 

    Dim i As Long 
    For i = 1 To 100000 
        Dim code As Long 
        code = ThisApplication.Locale 
    Next 

    Debug.Print "Total time: " & Format(timer.GetTime, "0.00000") 
End Sub


而稍作改动,将只需要18.8秒。可以注意到其先是获取到app,然后调用10万次。原理很简单,前面的ThisApplication相当于每次都取用ThisApplication,存在读取调用,而后者只是调用一次,接下来都是引用。

Public Sub CallCost() 
    Dim timer As New clsTimer 
    timer.Start 

    <span style="background-color: rgb(255, 255, 102);">Dim app As Inventor.Application</span> 
    <span style="background-color: rgb(255, 255, 51);">Set app = ThisApplication</span> 

    Dim i As Long 
    For i = 1 To 100000 
        Dim code As Long 
        code = <span style="background-color: rgb(255, 255, 51);">app.Locale</span> 
    Next 

    Debug.Print "Total time: " & Format(timer.GetTime, "0.00000") 
End Sub

引用而非内联函数调用

再来一个优化,和前面类似,就是当您需要频繁调用某个对象时,尽量引用。这里有段代码遍历装配体的所有部件,获取其名字和对应的文件名。一个有500个部件的装配,循环调用10次,大约花了22.5秒。


Public Sub GetOccurrences1() 
    Dim asmDoc As AssemblyDocument 
    Set asmDoc = ThisApplication.ActiveDocument 

    Dim i As Integer 
    For i = 1 To asmDoc.ComponentDefinition.Occurrences.Count 
        Dim Name As String 
        Name = asmDoc.ComponentDefinition.Occurrences.Item(i).Name 

        Dim filename As String 
        filename = asmDoc.ComponentDefinition.Occurrences.Item(i). _ 
                   ReferencedDocumentDescriptor. _ 
                   ReferencedFileDescriptor.FullFileName 
    Next 
End Sub

让我们稍作改动如下, 时间减少到9.7秒。

Public Sub GetOccurrences2() 
    Dim asmDoc As AssemblyDocument 
    Set asmDoc = ThisApplication.ActiveDocument 

    <span style="background-color: rgb(255, 255, 51);">Dim occs As ComponentOccurrences </span>
    <span style="background-color: rgb(255, 255, 51);">Set occs = asmDoc.ComponentDefinition.Occurrences</span> 

    Dim i As Integer 
    For i = 1 To occs.Count 
        Dim Occ As ComponentOccurrence 
        Set Occ = occs.Item(i) 

        Dim Name As String 
        Name = Occ.Name 

        Dim filename As String 
        <span style="background-color: rgb(255, 255, 51);">filename = Occ.ReferencedDocumentDescriptor. _ 
                        ReferencedFileDescriptor.FullFileName</span> 
    Next 
End Sub


使用For Each而不要Count 和Item

还是以便利装配中的部件为例,以下代码将花费9.4秒。虽然比前面并未有明显改变,但不同的集合会有不同的时间优化。而且,也比count item好阅读些,对吧。
背后的故事是因为使用For Each的时候,Inventor提前知道您讲遍历一个集合,就会先从内部优化。而count item的模式,Inventor不知您是遍历一次呢,还是多次呢,还是整个集合,所以提前不会做什么优化工作。

Public Sub GetOccurrences3() 
    Dim asmDoc As AssemblyDocument 
    Set asmDoc = ThisApplication.ActiveDocument 

    Dim occs As ComponentOccurrences 
    Set occs = asmDoc.ComponentDefinition.Occurrences 

    Dim Occ As ComponentOccurrence 
   <span style="background-color: rgb(255, 255, 51);"> For Each Occ In occs </span>
        Dim Name As String 
        Name = Occ.Name 

        Dim filename As String 
        filename = Occ.ReferencedDocumentDescriptor. _ 
                   ReferencedFileDescriptor.FullFileName 
    Next 
End Sub

通过名字过去某条目Item

和集合关联的另外一种优化就是,假设要获取集合内某个对象条目,尽量用名字获取,而不要遍历一个个查找。例如,这段代码想获得某个TranslatorAddIn.

Dim dxfAddIn As TranslatorAddIn 
For i = 1 To addIns.Count 
    If addIns(i).AddInType = kTranslationApplicationAddIn Then 
        Dim desc As String 
        desc = addIns(i).Description   
        If desc = "Autodesk Internal DXF Translator" Then 
            Set dxfAddIn = addIns.Item(i) 
            Exit For 
        End If 
    End If 
Next

而下面这段代码,不仅效率提高,而且也美观些。

Dim dxfAddIn As TranslatorAddIn 
Set dxfAddIn = addIns. _ 
                 ItemById("{C24E3AC4-122E-11D5-8E91-0010B541CD80}")

 




inventorVBA资料 VBA开发inventor的范例和基本了开发方法 立即下载

相关推荐

Autodesk Inventor API Reference

Autodesk Inventor API Reference Autodesk Inventor API Reference

Inventor API: 2018版本开始API是在线帮助文档

原文链接: http://modthemachine.typepad.com/my_weblog/2017/03/inventor-api-help-is-online.html 一直以来,Inventor API的帮助文档都是以文件形式和产品安装(CHM ),而且某几个版本在某个特定路径,某几个又在其它路径。另外,当用户想对比一些版本与版本间差别时,除了连个相邻版本的差别对比,若需要更多版本查

Gear Up Cloud 5979

UE5 Compute Shader实战:从基础到高级应用全解析

本文全面解析了在UE5中应用Compute Shader的完整流程,从基础概念、环境搭建到核心机制与实战应用。详细介绍了如何通过参数传递、线程派遣与数据读写实现GPU并行计算,并深入探讨了GPU粒子模拟、性能优化及结合光线追踪等高级应用场景,为开发者掌握UE5高性能计算提供系统指导。

yhn45678901的博客 499

访问装配的部件

原文地址: http://modthemachine.typepad.com/my_weblog/2009/03/accessing-assembly-components.html 对装配操作很多时候需要访问组成装配的部件(也可称作组件),英文叫做component。 本文对访问部件进行介绍。为简单起见,只讨论装配,零件,子装配。不讨论约束,装配特征等。  什么是装配?  再来回顾

Gear Up Cloud 1607

瑞芯微RK3576开发实战:固件烧录与内核启动的典型问题解析

本文详细解析了瑞芯微RK3576开发板在固件烧录与内核启动过程中遇到的典型问题及解决方案。从开发工具版本检查、DDR配置调整到内核启动异常的设备树适配和电源管理问题,提供了系统性的调试方法和实用技巧,帮助开发者高效解决RK3576开发中的常见挑战。

weixin_33700350的博客 454

精益六西格玛Python数字化应用开发-Day18 应用场景:家电企业生产效率优化

本文将重点介绍专门针对精益六西格玛黑带使用场景的 Python 库,这些库功能侧重于数据分析和流程优化,特别适用于 DMAIC 方法论和看板管理。考虑到读者具备中高级Python 使用经验,我们将深入探讨各库的高级功能和实际应用应用场景。 某家电企业生产线自动化程度高,数据量巨大,希望通过精益管理提升生产效率。企业借助 Python 脚本,打通各类数据源(MES、ERP、设备日志),自动归集生产数据,分析各工序的生产节拍、设备停机、效率损失,快速定位瓶颈环节

m0_56592100的博客 905

Inventor API: 简单聊聊ReplaceReference , FileSaveAs, OnFileResolution

原文链接  http://adndevblog.typepad.com/manufacturing/2016/03/replacereference-vs-filesaveas-vs-onfileresolution.html 对装配,组件进行重命名,复制,文件丢失或移动后对装配的重新更新,重新引用,是Inventor开发中的一个重要和常用的需求。方法多样,都是为了让装配结构中的部件对

Gear Up Cloud 1611

对角两对双差速轮AGV的平移、直行、转弯和原地旋转之PID控制

本示例将展示如何使用PID控制算法,控制具有对角线布置的两对双差速轮(左前和右后)的AGV,实现平移、直行、转弯和原地旋转等运动。通过对车辆的运动学和PID控制器的设计,我们可以精确地控制AGV的运动

xiaoc100200的博客 1510

App Inventor 2手机版AI伴侣APK下载与集成实战:AI辅助开发全流程解析

基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。架构理解:掌握实时语音应用的完整技术链路(ASR→LLM→TTS)技能提升:学会申请、配置与调用火山引擎AI服务定制能力:通过代码修改自定义角色性格与音色,实现“从使用到创造”从0到1构建生产级别应用,脱离Demo,点击打开。

2600_94959789的博客 675

【干货分享】高通 SA8295P PCB 设计规范指南

高通SA8295P芯片是第四代骁龙汽车数字座舱平台的核心组件,采用5nm工艺,集成高性能CPU/GPU和30TOPS算力的NPU。文章详细介绍了该芯片各接口的layout设计规范,包括USB3.1/2.0、eDP/DP、MIPI CSI/DSI、PCIe Gen3等接口的阻抗、损耗、延时等关键指标要求,为新能源汽车电子设计提供重要参考。

一只豌豆象的博客 260

直方图均衡化原理及matlab和opencv实现代码

详细分析了直方图均衡化的数学原理,配有matlab和opencv实现代码

qq_21603315的博客 4777

App Inventor 2手机版AI伴侣APK下载与实战:从零搭建到性能优化

基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。架构理解:掌握实时语音应用的完整技术链路(ASR→LLM→TTS)技能提升:学会申请、配置与调用火山引擎AI服务定制能力:通过代码修改自定义角色性格与音色,实现“从使用到创造”从0到1构建生产级别应用,脱离Demo,点击打开。

2600_94960196的博客 808

Python爬虫实战:全方位解析前程无忧(51job)职位详情爬取及反爬破解

平台规模:覆盖全国各行业、数百万条岗位信息。数据特点:职位描述详细,职位标签丰富。数据价值:支持招聘趋势分析、职业发展研究、薪资行情调研。推荐Python 3.10+,支持最新async特性与库兼容。

2201_76125261的博客 1486

App Inventor AI伴侣下载实战:从零搭建到性能优化全指南

基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。架构理解:掌握实时语音应用的完整技术链路(ASR→LLM→TTS)技能提升:学会申请、配置与调用火山引擎AI服务定制能力:通过代码修改自定义角色性格与音色,实现“从使用到创造”从0到1构建生产级别应用,脱离Demo,点击打开。

2600_94960207的博客 755

基于STM32F103设计的智能门锁(支持多种开锁解锁方式)

这个智能锁模型是基于STM32平台开发的,支持多种开锁方式。其中,一种是使用RC522射频卡读卡器读取IC卡卡号和内部数据,并验证身份后开锁;另一种是通过连接蓝牙地址来确认业主身份,实现了蓝牙自动开锁功能;最后一种是通过ESP8266连接腾讯云物联网平台,并且用户可以通过微信小程序“腾讯连连”进行远程开锁和关锁。这样,用户就可以选择最方便的方式来进行开锁操作了。

3万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

App Inventor2 AI伴侣实战指南:从零搭建到效率提升

基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。架构理解:掌握实时语音应用的完整技术链路(ASR→LLM→TTS)技能提升:学会申请、配置与调用火山引擎AI服务定制能力:通过代码修改自定义角色性格与音色,实现“从使用到创造”从0到1构建生产级别应用,脱离Demo,点击打开。

2600_94959850的博客 396

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

App Inventor AI伴侣2.46版实战:AI辅助开发中的性能优化与避坑指南

基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。架构理解:掌握实时语音应用的完整技术链路(ASR→LLM→TTS)技能提升:学会申请、配置与调用火山引擎AI服务定制能力:通过代码修改自定义角色性格与音色,实现“从使用到创造”从0到1构建生产级别应用,脱离Demo,点击打开。

2600_94959977的博客 720

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

App Inventor 实战:如何高效调用 Chatbot API 并优化交互体验

在App Inventor中高效调用Chatbot API需要综合考虑网络请求、错误处理和用户体验多个方面。本文提供的方案已经过实际项目验证,能显著提升应用的响应速度和稳定性。如果想进一步探索AI对话应用的开发,可以参考从0打造个人豆包实时通话AI实验,该实验提供了更完整的语音交互实现方案,我在实践中发现它对理解整个AI对话链路很有帮助。基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。

2600_94959873的博客 348

App Inventor 2语音交互机器人开发实战:从零构建到性能优化

基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。架构理解:掌握实时语音应用的完整技术链路(ASR→LLM→TTS)技能提升:学会申请、配置与调用火山引擎AI服务定制能力:通过代码修改自定义角色性格与音色,实现“从使用到创造”从0到1构建生产级别应用,脱离Demo,点击打开。

2600_94959874的博客 655

AI2 Inventor AI伴侣离线版:从零搭建本地化AI辅助开发环境

基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。架构理解:掌握实时语音应用的完整技术链路(ASR→LLM→TTS)技能提升:学会申请、配置与调用火山引擎AI服务定制能力:通过代码修改自定义角色性格与音色,实现“从使用到创造”从0到1构建生产级别应用,脱离Demo,点击打开。

2600_94960106的博客 645

App Inventor 2手机版AI伴侣App下载与开发实战:从零搭建到性能优化

基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。架构理解:掌握实时语音应用的完整技术链路(ASR→LLM→TTS)技能提升:学会申请、配置与调用火山引擎AI服务定制能力:通过代码修改自定义角色性格与音色,实现“从使用到创造”从0到1构建生产级别应用,脱离Demo,点击打开。

2600_94960027的博客 354

App Inventor 2手机版AI伴侣App下载与实战:从零搭建到性能优化

基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。架构理解:掌握实时语音应用的完整技术链路(ASR→LLM→TTS)技能提升:学会申请、配置与调用火山引擎AI服务定制能力:通过代码修改自定义角色性格与音色,实现“从使用到创造”从0到1构建生产级别应用,脱离Demo,点击打开。

2600_94960059的博客 361

App Inventor 2 AI伴侣实战指南:从零搭建到性能调优

基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。架构理解:掌握实时语音应用的完整技术链路(ASR→LLM→TTS)技能提升:学会申请、配置与调用火山引擎AI服务定制能力:通过代码修改自定义角色性格与音色,实现“从使用到创造”从0到1构建生产级别应用,脱离Demo,点击打开。

2600_94960104的博客 395

App Inventor 2 AI伴侣实战指南:从配置到高级功能开发

基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。架构理解:掌握实时语音应用的完整技术链路(ASR→LLM→TTS)技能提升:学会申请、配置与调用火山引擎AI服务定制能力:通过代码修改自定义角色性格与音色,实现“从使用到创造”从0到1构建生产级别应用,脱离Demo,点击打开。

2600_94960049的博客 512

App Inventor AI伴侣2.76深度解析:从技术原理到实战避坑指南

基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。架构理解:掌握实时语音应用的完整技术链路(ASR→LLM→TTS)技能提升:学会申请、配置与调用火山引擎AI服务定制能力:通过代码修改自定义角色性格与音色,实现“从使用到创造”从0到1构建生产级别应用,脱离Demo,点击打开。

2600_94959995的博客 399

App Inventor 2 语音交互机器人开发实战:从零构建到性能优化

权限陷阱记得在请求录音权限Android 6.0+需要动态权限申请内存泄漏避免在循环中创建大量临时变量定期调用释放资源跨设备兼容测试不同手机品牌的麦克风灵敏度为TTS引擎设置备用语音包异常处理当 Web1.GotText 收到响应尝试设置 回复文本 为 解析JSON(Web1.ResponseText)捕获 错误设置 回复文本 为 "网络开小差了,请稍后再试"记录错误 到 Firebase结束尝试结束基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。

2600_94959797的博客 322
上一篇: 发布有礼!2015 Autodesk程序商店有奖发布活动拉开序幕
下一篇: Fusion 360 在线帮助文档
autodeskinventorapi
博客等级 码龄14年 313粉丝 164原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值