别再死记硬背DXF组码了!用VBA写个‘组码查询器’,5分钟搞定CAD二次开发

11 Ubuntu下nodejs、npm、truffle、vscode指定版本安装 1、truffle安装版本号记录 https://www.pianshen.com/article/650021715/ 2、安装方法 https://blog.csdn.net/mcgrady_tracy/article/details/42805985?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=dist... 阅读详情

用VBA打造智能DXF组码查询工具:告别CAD开发中的记忆负担

在AutoCAD二次开发领域,DXF组码就像是一把打开CAD数据宝库的钥匙,但面对数百个看似随机的数字代码,即使是经验丰富的开发者也会感到头疼。每次需要查询某个组码含义时,翻手册、查文档、搜论坛成了家常便饭,严重拖慢了开发效率。本文将带你用VBA构建一个智能化的组码查询工具,让你从此告别死记硬背,专注于更有价值的开发工作。

1. 为什么我们需要DXF组码查询工具

DXF组码系统是AutoCAD数据交换的核心机制,每个组码对应特定的数据类型或属性。例如,组码8表示图层名,组码10存储主要点坐标。但在实际开发中,开发者面临几个典型痛点:

  • 记忆负担重 :超过200个常用组码,每个又有不同的数据类型和上下文含义
  • 查询效率低 :传统方式需要反复查阅文档或在线搜索,打断开发思路
  • 上下文缺失 :简单的列表无法展示组码在不同图元类型中的特殊含义
  • 开发体验差 :频繁的上下文切换导致代码编写过程支离破碎

一个典型的开发场景:当你需要批量修改多段线顶点时,需要确认以下组码:

' 多段线关键组码示例
10  ' 顶点坐标
40  ' 起点宽度
41  ' 终点宽度
42  ' 凸度(bulge)
70  ' 标志位(闭合/开放)

手工查询这些信息可能需要5-10分钟,而使用我们即将开发的工具,只需输入图元类型"Polyline",所有相关组码及其解释将立即呈现。

2. 工具设计架构与核心技术

2.1 整体架构设计

我们的查询工具采用三层架构:

  1. 数据层 :使用Dictionary对象存储组码数据库
  2. 逻辑层 :实现查询、过滤和结果格式化功能
  3. 界面层 :提供命令行和窗体两种交互方式
' 基本架构伪代码
Class DxfCodeExplorer
    Private codeDB As Dictionary
    
    Public Sub LoadDatabase()
        ' 初始化组码数据
        Set codeDB = New Dictionary
        codeDB.Add "0", "图元类型(字符串)"
        ' ...其他组码数据
    End Sub
    
    Public Function QueryByCode(code As String) As String
        ' 根据组码查询含义
    End Function
    
    Public Function QueryByEntity(entityType As String) As Collection
        ' 根据图元类型查询相关组码
    End Function
End Class

2.2 核心数据结构设计

为了高效存储和查询组码信息,我们设计了三类数据结构:

数据结构类型 存储内容 查询优势
主字典(Dictionary) 组码->基本解释 O(1)复杂度直接查询
反向索引(Dictionary) 图元类型->组码集合 快速获取图元相关组码
上下文关系列表(Collection) 组码在不同上下文中的特殊含义 提供场景化解释

组码数据表示例 :

' 组码数据表示例
Sub InitCodeTable()
    ' 通用组码
    codeDB.Add "8", "图层名(字符串)"
    codeDB.Add "10", "主要点坐标(X,Y,Z)"
    
    ' 图元特定组码
    Dim polylineCodes As New Collection
    polylineCodes.Add Array("10", "顶点坐标")
    polylineCodes.Add Array("40", "起点宽度")
    entitySpecificCodes.Add "POLYLINE", polylineCodes
End Sub

2.3 关键技术实现

2.3.1 字典的高效利用

VBA的Dictionary对象提供了极快的查找速度,我们利用它存储组码的核心解释:

' 字典初始化示例
Set codeDB = CreateObject("Scripting.Dictionary")
codeDB.CompareMode = TextCompare ' 不区分大小写

' 添加组码数据
codeDB.Add "-3", "扩展数据(XDATA)标记"
codeDB.Add "0", "图元类型标识"
2.3.2 模糊查询实现

为支持通配符查询(如"*Line"匹配Polyline,Line等),我们实现了一个简单的模式匹配函数:

Function FuzzyMatch(inputStr As String, pattern As String) As Boolean
    If Left(pattern, 1) = "*" Then
        FuzzyMatch = InStr(1, inputStr, Mid(pattern, 2), vbTextCompare) > 0
    Else
        FuzzyMatch = StrComp(inputStr, pattern, vbTextCompare) = 0
    End If
End Function
2.3.3 上下文敏感帮助

通过分析当前CAD环境和选择集,提供上下文相关的组码提示:

Sub GetContextualCodes()
    Dim ent As AcadEntity
    ThisDrawing.Utility.GetEntity ent, , "选择图元获取相关组码"
    
    Dim codes As Collection
    Set codes = GetCodesForEntity(ent.EntityName)
    
    ' 显示相关组码
    Dim codeInfo
    For Each codeInfo In codes
        Debug.Print codeInfo(0) & ": " & codeInfo(1)
    Next
End Sub

3. 完整实现步骤

3.1 第一步:构建组码数据库

创建一个独立模块存储完整的组码数据,采用分层结构:

' 模块:DxfCodeDatabase
Public Function GetFullCodeDatabase() As Dictionary
    Dim db As New Dictionary
    
    ' 添加通用组码
    db.Add "0", Array("图元类型", "固定")
    db.Add "5", Array("图元句柄", "固定")
    
    ' 添加图元特定组码
    Dim polylineCodes As New Dictionary
    polylineCodes.Add "10", "顶点坐标"
    polylineCodes.Add "70", "标志位(1=闭合)"
    db.Add "POLYLINE", polylineCodes
    
    ' ...其他图元类型的组码
    
    Set GetFullCodeDatabase = db
End Function

3.2 第二步:实现查询引擎

创建查询引擎类,支持多种查询方式:

' 类模块:DxfCodeQueryEngine
Private db As Dictionary

Private Sub Class_Initialize()
    Set db = GetFullCodeDatabase()
End Sub

Public Function QueryByCode(code As String) As String
    If db.Exists(code) Then
        Dim info: info = db(code)
        QueryByCode = "组码 " & code & ": " & info(0) & " (" & info(1) & ")"
    Else
        QueryByCode = "未找到组码 " & code & " 的定义"
    End If
End Function

Public Function QueryByEntity(entityType As String) As Dictionary
    Dim result As New Dictionary
    Dim code As Variant
    
    ' 添加通用组码
    For Each code In db.Keys
        If IsNumeric(code) Then result.Add code, db(code)
    Next
    
    ' 添加特定组码
    If db.Exists(entityType) Then
        Dim specificCodes As Dictionary
        Set specificCodes = db(entityType)
        
        Dim specificCode As Variant
        For Each specificCode In specificCodes.Keys
            result.Add specificCode, specificCodes(specificCode)
        Next
    End If
    
    Set QueryByEntity = result
End Function

3.3 第三步:构建用户界面

3.3.1 命令行界面

实现简单的命令行交互,方便快速查询:

' 模块:CommandInterface
Public Sub StartCommandLine()
    Dim engine As New DxfCodeQueryEngine
    Dim input As String
    
    Do
        input = InputBox("输入组码或图元类型(输入exit退出):")
        
        If IsNumeric(input) Then
            MsgBox engine.QueryByCode(input)
        ElseIf input <> "exit" Then
            Dim codes As Dictionary
            Set codes = engine.QueryByEntity(input)
            
            Dim output As String, code As Variant
            For Each code In codes.Keys
                output = output & code & ": " & codes(code) & vbCrLf
            Next
            
            MsgBox "图元类型 " & input & " 的相关组码:" & vbCrLf & vbCrLf & output
        End If
    Loop While input <> "exit"
End Sub
3.3.2 窗体界面

创建更友好的窗体界面,支持历史记录和收藏功能:

  1. 创建用户窗体,添加以下控件:
    • 文本框(txtInput)用于输入查询内容
    • 列表框(lstResults)显示查询结果
    • 按钮(cmdSearch)执行查询
    • 复选框(chkFuzzy)启用模糊匹配
' 用户窗体代码
Private engine As New DxfCodeQueryEngine
Private history As New Collection

Private Sub cmdSearch_Click()
    Dim input As String
    input = Trim(txtInput.Text)
    
    If input = "" Then Exit Sub
    
    ' 添加到历史记录
    If Not Contains(history, input) Then history.Add input
    
    Dim result As Dictionary
    If IsNumeric(input) Then
        lstResults.AddItem engine.QueryByCode(input)
    Else
        Set result = engine.QueryByEntity(input)
        
        lstResults.Clear
        Dim code As Variant
        For Each code In result.Keys
            lstResults.AddItem code & ": " & result(code)
        Next
    End If
End Sub

Private Function Contains(col As Collection, val As String) As Boolean
    Dim item As Variant
    For Each item In col
        If item = val Then
            Contains = True
            Exit Function
        End If
    Next
    Contains = False
End Function

3.4 第四步:集成到AutoCAD环境

将工具无缝集成到AutoCAD界面中:

  1. 添加自定义菜单项
  2. 注册命令别名
  3. 添加上下文菜单支持
' 添加上下文菜单
Sub AddContextMenu()
    Dim currMenuGroup As AcadMenuGroup
    Set currMenuGroup = ThisDrawing.Application.MenuGroups.Item(0)
    
    Dim newMenu As AcadPopupMenu
    Set newMenu = currMenuGroup.Menus.Add("DXF工具")
    
    ' 添加菜单项
    newMenu.AddMenuItem 0, "组码查询", "_DXFQUERY"
    newMenu.AddMenuItem 1, "图元分析", "_ENTANALYSIS"
    
    ' 添加到菜单栏
    newMenu.InsertInMenuBar ThisDrawing.Application.MenuBar.Count + 1
End Sub

' 注册命令
Sub RegisterCommands()
    ThisDrawing.SetVariable "CMDECHO", 0
    ThisDrawing.SendCommand "_UNDEFINE DXFQUERY" & vbCr
    ThisDrawing.SendCommand "_DEFINE DXFQUERY ^C^C_VBARUN ThisDrawing.Project.DxfExplorer.Start" & vbCr
    ThisDrawing.SetVariable "CMDECHO", 1
End Sub

4. 高级功能扩展

4.1 实时上下文感知

通过事件监听,在用户选择图元时自动显示相关组码:

' 类模块:DxfCodeMonitor
Private WithEvents docEvents As AcadDocument

Private Sub Class_Initialize()
    Set docEvents = ThisDrawing
End Sub

Private Sub docEvents_BeginCommand(ByVal CommandName As String)
    If CommandName = "SELECT" Then
        ' 准备在选择图元时显示组码信息
    End If
End Sub

Private Sub docEvents_EndCommand(ByVal CommandName As String)
    If CommandName = "SELECT" Then
        Dim ss As AcadSelectionSet
        On Error Resume Next
        Set ss = ThisDrawing.SelectionSets("DXFCODE_LASTSELECTION")
        On Error GoTo 0
        
        If Not ss Is Nothing Then
            If ss.Count > 0 Then
                ShowEntityCodes ss(0)
            End If
        End If
    End If
End Sub

4.2 组码使用统计与学习

记录常用组码,提供个性化建议:

' 模块:CodeUsageTracker
Private usageStats As Dictionary

Sub TrackCodeUsage(code As String)
    If usageStats.Exists(code) Then
        usageStats(code) = usageStats(code) + 1
    Else
        usageStats.Add code, 1
    End If
End Sub

Function GetRecommendedCodes() As Collection
    ' 基于使用频率推荐可能需要学习的组码
    Dim recs As New Collection
    Dim code As Variant
    
    For Each code In usageStats.Keys
        If usageStats(code) < 3 Then ' 不常用但可能重要
            recs.Add code
        End If
    Next
    
    Set GetRecommendedCodes = recs
End Function

4.3 批量处理与脚本生成

根据组码查询结果自动生成常用操作脚本:

Function GenerateModificationScript(entityType As String, propertyCode As String) As String
    Dim script As String
    script = "Sub ModifyAll" & entityType & "s()" & vbCrLf
    script = script & "    Dim ent As AcadEntity" & vbCrLf
    script = script & "    For Each ent In ThisDrawing.ModelSpace" & vbCrLf
    script = script & "        If TypeName(ent) = ""AcDb" & entityType & """ Then" & vbCrLf
    script = script & "            ent." & GetPropertyName(propertyCode) & " = NEW_VALUE" & vbCrLf
    script = script & "        End If" & vbCrLf
    script = script & "    Next" & vbCrLf
    script = script & "End Sub"
    
    GenerateModificationScript = script
End Function

5. 实际应用案例

5.1 案例一:批量修改多段线顶点

场景 :需要将图中所有多段线的顶点Z坐标统一设置为0

  1. 查询工具中搜索"POLYLINE",找到顶点坐标组码为10
  2. 工具自动生成修改脚本:
Sub FlattenPolylines()
    Dim pline As AcadLWPolyline
    Dim verts As Variant
    Dim i As Integer
    
    For Each ent In ThisDrawing.ModelSpace
        If TypeName(ent) = "IAcadLWPolyline" Then
            Set pline = ent
            verts = pline.Coordinates
            
            ' 修改Z坐标
            For i = LBound(verts) + 2 To UBound(verts) Step 3
                verts(i) = 0
            Next
            
            pline.Coordinates = verts
        End If
    Next
End Sub

5.2 案例二:提取特定图层块属性

场景 :提取"DOOR"图层上所有块的属性信息

  1. 查询工具中确认:

    • 图层组码:8
    • 块参照组码:66(属性跟随标志)
    • 属性标签组码:2
  2. 使用工具生成的查询代码:

Sub ExportDoorAttributes()
    Dim blk As AcadBlockReference
    Dim att As AcadAttribute
    Dim output As String
    
    For Each ent In ThisDrawing.ModelSpace
        If TypeName(ent) = "IAcadBlockReference" Then
            Set blk = ent
            If blk.Layer = "DOOR" Then
                For Each obj In blk.GetAttributes
                    Set att = obj
                    output = output & att.TagString & ": " & att.TextString & vbCrLf
                Next
            End If
        End If
    Next
    
    ' 保存到文件
    Open "C:\DoorAttributes.txt" For Output As #1
    Print #1, output
    Close #1
End Sub

5.3 案例三:自定义图元数据管理

场景 :为特定图元添加和管理扩展数据(XDATA)

  1. 查询工具中确认:

    • XDATA标记组码:-3
    • 应用程序名组码:1001
    • XDATA字符串组码:1000
  2. 使用工具提供的模板代码:

Sub AddXDataToSelected()
    Dim ent As AcadEntity
    ThisDrawing.Utility.GetEntity ent, , "选择图元添加XDATA"
    
    Dim xdataType(0) As Integer
    Dim xdataValue(0) As Variant
    
    xdataType(0) = 1001  ' 应用程序名
    xdataValue(0) = "MYAPP"
    
    ent.SetXData xdataType, xdataValue
    
    ' 添加字符串数据
    ReDim Preserve xdataType(1)
    ReDim Preserve xdataValue(1)
    
    xdataType(1) = 1000  ' 字符串
    xdataValue(1) = "CustomData123"
    
    ent.SetXData xdataType, xdataValue
End Sub
别再死记硬背DXF组码了!用VBA写个‘字典查询器’,5分钟搞定CAD二次开发 本文介绍如何利用VBA开发智能DXF组码查询工具,帮助CAD二次开发工程师快速查询和理解DXF组码,提升开发效率。通过构建字典查询器,实现组码与描述的快速映射,解决传统手工查询效率低、易出错的问题,特别适用于处理复杂的Polyline等CAD对象。 阅读详情

相关推荐

Ubuntu 安装NodeJS组件

$ sudo apt-get install nodejs $ sudo apt-get install npm

专注基础架构领域 1012

win10/11系统node安装详细步骤,及安装失败解决方法-不运行安装包,直接指定运行目录

| Node运行环境搭建 1. Node.js运行环境安装 方式一:官网下载安装包安装 版本说明: LTS = long Term Support 长期支持版 稳定版 Current 拥有最新特性 实验版 下载地址: https://nodejs.org/en/ 步骤: 下载对应系统的安装包安装运行,所有提示只点确认即可。 方式二:(非安装包安装)阿里云npm镜像站下载运行文件压缩包 有时候官网下载速度极慢可尝试从国内镜像站下载(可选择任意版本和系统类型的node) 网址: https:/

小硅壳的博客 1万+

Node.js- 11.10.0安装包

Node.js-11.10.0安装包,一键下载,解压安装,简单方便。

ubuntu一种简单安装node的方法

ubuntu一种简单安装node的方法 centos下安装node的方法,参考这个文章:https://zdhsoft.blog.csdn.net/article/details/73436740 目录 文章目录ubuntu一种简单安装node的方法目录安装过程 安装过程 本方法适已经在16.04,18.04,20.04等ubuntu linux server成功安装过,其它ubuntu估计也差不多,没有试过 # 首先安装npm sudo apt install npm # 然后安装n sudo n

过客2019 3538

nodeJs10.11.0安装包

亲测可用,好用请给好评!

华为鸿蒙系统也能用!5分钟搞定谷歌三件套安装(附最新APK下载链接)

本文为华为鸿蒙系统用户提供了一份详尽的谷歌三件套(Google Play服务、商店及框架)手动安装指南。文章核心在于无需Root,通过ADB命令获取设备信息,并从可靠来源下载匹配版本的APK,按照正确顺序安装,从而解决海外应用依赖问题,实现5分钟快速部署。

c7d8e9的博客 6463

ubuntu14.04系统nodejs express开发教程第一篇:环境搭建&&项目初步

ubuntu 14.04 nodejs express框架开发菜鸟教程第一篇:环境搭建&&项目初步 1.环境部署 2.package.json 3.入口文件 4.静态资源 5.其他

hellobeifeng的专栏 3632

逆向分析PerimeterX px3:从混淆JS到生成有效令牌的完整实战

在Web安全与数据采集领域,反自动化防护是保障服务稳定和数据安全的关键技术。其核心原理是通过收集浏览器环境指纹和用户行为特征,动态生成加密令牌来区分真人用户与自动化脚本。这项技术的工程价值在于平衡安全性与用户体验,广泛应用于电商、金融、社交等需要防止恶意爬虫和自动化攻击的场景。本文聚焦于业界广泛部署的PerimeterX px3防护方案,通过JavaScript逆向工程,深入剖析其令牌生成机制。我们将探讨如何运用动态调试、反混淆工具和算法还原等关键技术,突破px3的防护壁垒,为自动化测试和数据采集提供稳定可

diankui6178的博客 523

ubuntu下安装最新版本nodejs和npm

ubuntu环境下安装最新版本的nodejs和npm 说明:本人尝试了网上多种ubuntu下安装nodejs和npm总是报一些奇怪的错误,困惑了 一整天,最终测试安装最新版本的nodejs成功 nodejs版本是:v10.11.0 npm版本是:6.4.1 教程如下: 一.下载最新版本的nodejs包(最新版本的nodejs包里默认含有npm) 可以去nodejs官网去查看最新版本的nodejs ...

冬哥的博客 1万+

手把手教你搭建日本亚马逊CVV钓鱼系统(含自动验证功能)

本文详细介绍了电商平台安全防护的关键实践,重点讲解了如何构建自动化风控系统。内容包括基础架构设计、用户行为分析、交易风险评估模型构建、验证机制实现以及系统部署优化,帮助电商平台有效识别和防范安全威胁,同时提升用户体验。

weixin_30952535的博客 815

保姆级教程:用MATLAB搞定双目相机标定,从导入图片到参数解读全流程

本文提供了一份详细的MATLAB双目相机标定全流程指南,涵盖从图片准备到参数解读的每个环节。重点讲解了棋盘格选择、拍摄技巧、MATLAB工具箱设置及参数优化,帮助读者避免常见错误并提升标定精度。特别适合机器人导航、三维重建等领域的开发者。

weixin_33737134的博客 428

ubuntu安装nodejs

推荐使用方法1进行安装 在nodejs官方网站download页面中选择需要使用的版本,可以选择LTS或current,选择对应系统右键复制链接地址 如果需要下载历史版本可以选择download页面底部PreviousReleases,也可以直接访问http://nodejs.org/dist/或https://nodejs.org/download/release/ 方法1...

小朱的专栏 12万+

富芮坤FR801xH蓝牙协议栈启动流程和notify实现温度数据主动上传

文章目录一、蓝牙协议栈启动流程1.1 初始化代码1.2 初始化流程1.3 回调函数里的初始化二、notify实现2.1 notify介绍2.2 notify实现2.3.1 定义数据2.3.2 获取连接号conidx2.3.3 gatt_notification函数的使用三、notify温度上传测试3.1 蓝牙调试工具3.2 蓝牙调试器设置3.3 测试结果四、参考链接   基于sdk开发的好处是方便项目的快速落地,现在用的是SDK里面的源文件,目前只是学习FR801xH芯片的特性,裁剪这个SDK需要点时间,

weixin_43810563的博客 4318

Ubuntu安装Node.js(亲测,最新,详细)

Ubunt 安装Node.js 打开终端 第一步:查看自己应该安装什么版本的Node uname -a 第二步:根据需求官网下载匹配自己系统的文件: 英文网址:https://nodejs.org/en/download/ 中文网址:http://nodejs.cn/download/ 注意:可以先在自己的电脑上下载好,然后通过Xftp移动至虚拟机上,目录自行指定。 第三步:解压上传的压缩包 ①tar -xvf node-v14.18.0-linux-x64.tar.xz ② mv no

zwslovexyj的博客 2万+

电磁场仿真软件:CST Studio Suite_(25).案例分析与实践

在电磁场仿真中,材料属性的设置至关重要。通过API,您可以轻松地设置和修改材料属性,以适应不同的仿真需求。通过以上案例分析和实践,您已经学会了如何在CST Studio Suite中进行二次开发。自动化仿真流程:批量创建和运行仿真项目、优化设计参数、生成报告。自定义仿真设置:设置材料属性、边界条件和激励源。数据处理与分析:读取仿真结果、数据可视化和数据导出。高级脚本开发:多线程仿真、集成机器学习和云仿真。这些技能将帮助您更高效地进行电磁场仿真,提高设计质量和工作效率。

kkchenjj的博客 1384

动力学约束下的运动规划算法——状态栅格规划器(State Lattice Planner)

A*、RRT等算法建立的用于路径搜索的图模型是不考虑机器人的动力学约束的,其构建的图模型的两个相邻节点之间的路径可能是不可行的,或者很难被机器人跟踪的,现在我们想要使得图中相邻两个节点间的连接是一种满足动力学约束的可行的连接,那么如何构建一个这样的图呢? 构建这样的图通常有两种方法:第一种是基于控制空间的采样(正向方法)

慕羽★的博客 3104

在 ubuntu 上安装最新的 node

安装过程 安装之前请先删除已有的node,以免发生不可预期的异常。 更新软件源 sudo apt update 安装 npm sudo apt install npm 安装 n 模块 注:n 模块是用来安装各种版本的 node 的一个工具。参数 -g 表示全局安装 sudo npm install n -g 安装最新长期支持版 node sudo n lts 检验 node -v ...

大概关于 2万+

手把手完整实现STM32+ESP8266+MQTT+阿里云服务器+手机APP应用——第一节—阿里云物联网平台配置+IoTStudio界面绘制+MQTT.fx模拟MQTT客户端与使用AT命令发布订阅消息

通过MQTT.fx模拟连接以及通过CH340串口连接ESP8266发送AT命令,实现阿里云物联网平台发送数据同时接收数据,IOT studio界面显示数据。具体来说:使用ESP8266(本系列使用了ESP8266-ESP01/01S以及正点原子的ATK-ESP8266) 来连接网络,获取设备数据发送到阿里云物联网平台并显示数据,通过IOT studio界面显示数据并发送命令控制设备。本系列使用的主控芯片是STM32F103系列,当然也可以使用其他系列单片机都可以实现,思路都是一样的。同时本系列有手机APP源

嵌入式阿齐Archie 5万+

ubuntu11.10下安装Nodejs

基本步骤如下 &gt; wget http://nodejs.org/dist/node-v0.4.8.tar.gz &gt; tar -xvf node-v0.4.8.tar.gz &gt; cd node-v0.4.8 &gt; ./configure (如果啥少了,就用aptitude安装缺少的东西) &gt; make &gt; sudo make install 1 测...

lanjiasheng的专栏 146

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

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Ubuntu下搭建NodeJS+Express WEB开发框架

Ubuntu下搭建NodeJS+Express WEB开发框架 2012-12-27 15:06作者:NodeJSNet来源:本站浏览: 2,966 次阅读我要评论暂无评论字号:大中小 摘要: 本文主要对前人所写文章的总结,包括自己在安装node.js 和express过程中遇到的问题。以备后用,同时能让正在学习node.js 的...

weixin_33843409的博客 194

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Ubuntu下手动安装nodejs最新版

下载nodj二进制源码:xz结尾的压缩文件 我的下载路径是 /opt/download下 wget https://nodejs.org/dist/v9.5.0/node-v9.5.0-linux-x64.tar.xz 注意:这个包下载下来就是源码,解压之后就存在node和npm。无需重复编译。 解压 tar xvf node-v9.5.0-linux-x64.tar.xz ...

AdleyTales的技术博客 2万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Ubuntu下自动安装NodeJs的脚本

CentOS/Ubuntu自动安装nodejs脚本文件

LeeKwen的专栏 1272

Linux安装nodejs+express实现简单服务调用

1. nodejs的安装 方法一: sudo yum install epel-release sudo yum install nodejs node --v 提示安装了v6.14.3 sudo yum install npm --enablerepo=epel npm -v 提示安装了3.10.10 全局安装express sudo npm install -g expr...

lin252552的博客 1227

ubuntu快速安装最新版nodejs,只需2步

最近在 ubuntu 上安装 nodejs。ubuntu自带的 nodejs 版本太低了,然后找了些网上的教程,五花八门,走了些弯路。最后发现只需2步即可,在此分享一下。第一步,去 nodejs 官网 https://nodejs.org 看最新的版本号;现在我打开后出现的是: 也就是说此时此刻,9.2.0 是最新的版本,不过你求稳的话建议选 8.9.1的LTS版。第二步,添加源后安装重点来了

夜闯秋名山吃瓜皮 1万+

ubuntu下安装nodejs并配置环境

1.在node.js官网下载node.js     2.将文件解压,并放在home/tools文件夹下,其中,tools文件夹是新建的文件夹,home下不需设置权限     3.执行一个javascript测试程序     4.将bin地址设置为环境变量   5.修改.bashrc文件,设置全局变量     最后一行     6.执行source使文件生效

柚的个人技术博客 1万+

让 AI 替我操作这台电脑,先把手能伸多远定下来

早上坐到工位,才想起昨天那份表格还在家里的机器上。这种时候以前只有两条路,开远程桌面自己点,或者等晚上回去。热榜上那篇 OpenClaw 的实测文我看了两遍。它换掉的是这条路。在 Windows 上装一个网关,把飞书、钉钉、Telegram 这些入口接进来,模型听懂你那句话,网关在本机上真的动手。装 Node 22 和 Git,跑一条,选一个 OpenAI 兼容的供应商把 base url 和 key 填上,再接远程访问,手机发一句话,家里那台电脑就开始干活。那篇文把部署讲了很细,截图一步一步都有。

m0_58155849的博客 360
上一篇: MC9S08SF4 PWT与IIC模块实战:从寄存器配置到电机控制与传感器通信
下一篇: HCS08寻址模式与指令集实战:从原理到嵌入式性能优化
SleepInDelphi
博客等级 码龄19年 32粉丝 388原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值