#/
#  TCL file: DanDanTools.tcl
#            
#
#  
#/

package provide DanDanTools 1.0

namespace eval ::DanDanTools {
    
}

proc ::DanDanTools::exportMES { pPageList } {
    [::DanDanTools::exportMESEx 0 0 $pPageList]
}

#导出当前Design相关Page的Parts统计结果
proc ::DanDanTools::exportMESEx { iDesignIndex iSchematicIndex pPageList } {

#获取当前Session
    set lSession $::DboSession_s_pDboSession
    DboSession -this $lSession
    
    set lStatus [DboState]
    set lNullObj NULL
    set index 0
    set lName [DboTclHelper_sMakeCString]
    
    #遍历Design
    set lDesignsIter [$lSession NewDesignsIter $lStatus]
    set lDesign [$lDesignsIter NextDesign $lStatus]
    if { $lDesign == $lNullObj} {
        puts {The Design in Current Session is NULL}
        return
    }
    
    while { $lDesign != $lNullObj} {
        #输出 Design 名字
        $lDesign GetName $lName
        DboState_WriteToSessionLog $lName
        
        #目标 Design
        if { $index == $iDesignIndex } {
            set index 0
            break
        }
        
        set lDesign [$lDesignsIter NextDesign $lStatus]
        set index [expr $index+1]
    }
    delete_DboSessionDesignsIter $lDesignsIter
    
    #没有找到目标Design
    if { $index != 0 } {
        puts {Not Found Design, Check the parameter, the first Design index is 0}
        return
    }
    
    #遍历 Schematic
    #set lSchematic [DboSchematic]
    set lSchematicIter [$lDesign NewViewsIter $lStatus $::IterDefs_SCHEMATICS]
    set lView [$lSchematicIter NextView $lStatus]
    if { $lView == $lNullObj } {
        puts {The Schematic in Current Design is NULL}
        return
    }
    while { $lView != $lNullObj } {
        #dynamic cast from DboView to DboSchematic
        set lSchematic [DboViewToDboSchematic $lView]
        
        #输出 Schematic 名字
        $lSchematic GetName $lName
        DboState_WriteToSessionLog $lName
        
        #目标 Schematic
        if { $index == $iSchematicIndex } {
            set index 0
            break
        }
        
        set lView [$lSchematicIter NextView $lStatus]
        set index [expr $index+1]
    }
    delete_DboLibViewsIter $lSchematicIter
    
    #没有找到目标Schematic
    if { $index != 0 } {
        puts {Not Found Schematic, Check the parameter, the first Schematic index is 0}
        return
    }
    
    #遍历 Page
    set pageInstList ""
    set lPageNumber [DboTclHelper_sMakeInt]
    set lPagesIter [$lSchematic NewPagesIter $lStatus]
    set lPage [$lPagesIter NextPage $lStatus]
    while {$lPage != $lNullObj} {
        #输出 Page 名字
        $lPage GetName $lName
        #DboState_WriteToSessionLog $lName
        
        #Page Number
        set lPageNumber [$lPage GetPageNumber $lStatus]
        #puts $lPageNumber
                
        #目标 Page
        for {set x 0} {$x < [llength $pPageList]} {incr x} {
            set pageIndex [lindex $pPageList $x]
            if { $lPageNumber == $pageIndex } {
                set nameTclStr [DboTclHelper_sGetConstCharPtr $lName]
                lappend pageInstList $lPage
            }
        }
        
        set lPage [$lPagesIter NextPage $lStatus]
    }
    delete_DboSchematicPagesIter $lPagesIter
    
    puts $pageInstList
    
    #遍历 Pages
    #创建空字典
    dict set Results 1 1
    dict unset Results 1
    set lValue [DboTclHelper_sMakeCString]
    set lReferenceName [DboTclHelper_sMakeCString]
    set lPcbFootprint [DboTclHelper_sMakeCString]
    for {set x 0} {$x < [llength $pageInstList]} {incr x} {
        set pageInst [lindex $pageInstList $x]
        #遍历 Parts
        set lPartInstsIter [$pageInst NewPartInstsIter $lStatus]
        set lInst [$lPartInstsIter NextPartInst $lStatus]
        
        while { $lInst != $lNullObj } {
            set lPlacedInst [DboPartInstToDboPlacedInst $lInst]
            if {$lPlacedInst != $lNullObj} {
                $lPlacedInst GetName $lName
                #DboState_WriteToSessionLog $lName
                
                $lPlacedInst GetReference $lReferenceName
                #DboState_WriteToSessionLog $lReferenceName
                
                $lPlacedInst GetPartValue $lValue
                #DboState_WriteToSessionLog $lValue
                
                $lPlacedInst GetPCBFootprint $lPcbFootprint
                #DboState_WriteToSessionLog $lPcbFootprint
                
                set valueStr_origin [DboTclHelper_sGetConstCharPtr $lValue]
                
                #删除Value里面的空格
                set valueStr ""
                for {set i 0} {$i < [string length $valueStr_origin]} {incr i} {
                    set char [string index $valueStr_origin $i]
                    if { $char != " " } {
                        set valueStr $valueStr$char
                    }
                }
                
                #拼接Key
                set PartKey ""
                if {[string match "PL/*" $valueStr] || [string match "L/*" $valueStr]} {
                    set PartKey "L_Buck"
                } elseif { [string match "R/0*" $valueStr] } {
                    set PartKey "L_Buck"
                } elseif { [string match "SHORT*" $valueStr} {
                    set PartKey "R_0ohm"
                } elseif { [string first "NC" $valueStr] != -1 } {
                    set PartKey "NC"
                } elseif { [string match "*/*/*/*" $valueStr] } {
                    set PartKey [DboTclHelper_sGetConstCharPtr $lPcbFootprint]
                    append PartKey "_"
                    set valueItems [split $valueStr "//"]
                    append PartKey [lindex $valueItems 1]
                    append PartKey [lindex $valueItems 2]
                } elseif { [string match "*/*/*" $valueStr] } {
                    set valueItems [split $valueStr "//"]
                    set PartKey [lindex $valueItems 0]
                    append PartKey "_"
                    append PartKey [lindex $valueItems 1]
                    append PartKey [lindex $valueItems 2]
                } elseif { $valueStr == "DNI" } {
                    set PartKey "R_0om"
                } elseif {[string match "*f" $valueStr] || [string match "*F" $valueStr] 
                    || [string match "*mf" $valueStr] || [string match "*mF" $valueStr]
                    || [string match "*uf" $valueStr] || [string match "*uF" $valueStr]
                    || [string match "*nf" $valueStr] || [string match "*nF" $valueStr]
                    || [string match "*pf" $valueStr] || [string match "*pF" $valueStr]
                    || [string match "*ph" $valueStr] || [string match "*pH" $valueStr]
                    || [string match "*nh" $valueStr] || [string match "*nH" $valueStr]
                    || [string match "*uh" $valueStr] || [string match "*uH" $valueStr]
                    || [string match "*mh" $valueStr] || [string match "*mH" $valueStr]
                    || [string match "*h" $valueStr] || [string match "*H" $valueStr]} {
                    
                    set PartKey [DboTclHelper_sGetConstCharPtr $lPcbFootprint]
                    append PartKey "_"
                    append PartKey $valueStr
                } else {
                    puts "Not Match Value: $valueStr"
                }
                
                if { $PartKey != "" } {
                    puts "Value:$valueStr Key: $PartKey"
                }
                
                #保存数据到Dict
                set isExist [dict exists $Results $PartKey]
                if { $isExist == 1 } {
                    set referenceList [dict get $Results $PartKey]
                    lappend referenceList [DboTclHelper_sGetConstCharPtr $lReferenceName]
                    dict set Results $PartKey $referenceList
                } else {
                    set initRefList [DboTclHelper_sGetConstCharPtr $lReferenceName]
                    dict set Results $PartKey $initRefList
                }
                
            }
            
            set lInst [$lPartInstsIter NextPartInst $lStatus]
        }
        
        delete_DboPagePartInstsIter $lPartInstsIter
    }
    
    #遍历Results
    if 0 {
    foreach key [dict keys $Results] {
        puts $key
        puts [dict get $Results $key]
    }
    }
    
    #将临时数据写入桌面
    set currentPath [pwd]
    set tempDataPath [file join $currentPath "orcad_temp_data.txt"]
    if {[file exists $tempDataPath] == 1} {
        file delete $tempDataPath
    }
    set fp [open $tempDataPath w]
    
    foreach key [dict keys $Results] {
        set refs [dict get $Results $key]
        puts $fp "$key---$refs"
    }
    
    flush $fp
    close $fp
    
    
    #启动标准的TCL解释器来执行写入Excel的操作
    set tclshPath [GetEnv Sigrity_EDA_DIR]\\tcltk\\bin\\tclsh.exe
    set exportExcelScript [GetEnv Sigrity_EDA_DIR]\\tcltk\\DanDanScripts\\exportToExcel.tcl
    set ABC [exec $tclshPath $exportExcelScript $tempDataPath]
    puts $ABC
}

Orcad capture相关推荐

  1. orCAD使用Orcad Capture CIS按Room摆放

    http://www.sig007.com/EDAguide/176.html 37 使用Orcad Capture CIS按Room摆放 (1)打开原理图某一工程页 (2)按Ctrl键依次选中需要建 ...

  2. 如何去掉Orcad Capture中元件标号下划线

    转载:https://blog.csdn.net/david_xtd/article/details/44117157 使用环境:Orcad Capture 16.6,放置了元器件后,修改了元件标号, ...

  3. OrCAD Capture CIS 16.6 修改原理图的页面大小

    OrCAD Capture CIS 16.6 打开需要修改的原理图. 菜单:Options > Schematic Page Properties... 看图操作... 转载于:https:// ...

  4. 01、Cadence使用记录之新建工程与基础操作(原理图绘制:OrCAD Capture CIS)

    01.Cadence使用记录之新建工程与基础操作(原理图绘制:OrCAD Capture CIS) 硕士学电磁场去了,写点博客记录下学习过程. 参考的教程是B站的视频:allegro软件入门视频教程全 ...

  5. OrCAD Capture CIS 16.6 - 为元器件添加属性

    文章目录 直接编辑原理图中的元器件添加属性 通过编辑库中的元器件添加属性 直接编辑原理图中的元器件添加属性 下例演示为一个电感添加 Description 属性. 选择元器件,右击选择菜单中的 Edi ...

  6. Allegro Design Entry CIS 和 Orcad Capture CIS 区别

    目录 前言 一.Cadence 公司简介 二.Allegro Design Entry CIS 三.OrCAD Capture CIS 前言 Cadence家的PCB设计软件还真容易让人混乱,软件安装 ...

  7. Cadence 的 Orcad Capture CIS 使用鼠标右键的Show Footprint无法查看元件封装图的问题的解决方法

    Cadence 的 Orcad Capture CIS 使用鼠标右键的Show Footprint无法查看元件封装图的问题的解决方法: 由于看见很多网上相关的文章中叙述通过修改capture.ini的 ...

  8. Orcad Capture CIS

    了解市面上常见的 CAD 设计软件 Protel Protel 99se.Altium Designer 比较低端,对电脑配置要求比较高 PADS 1.PADS Logic 2.PADS Layout ...

  9. ORcad Capture CIS元件库管理

    当电子元器件数量多到一定程度的时候,所有器件都集中在一个library里杂乱无章,使用起来相当不方便,时间长了也很容易把相似的器件封装混淆,如何规范化整理,就成了一个让人头疼的问题.还有就是贴片时硬件 ...

  10. OrCAD Capture CIS 17.2导入Altium Designer原理图

    1.打开OrCAD Capture CIS 2.如下图,导入工程图.见下图1. 图1:导入altium 文件 3.选择PrjPCB File ,可以是.PrjPCB的工程文件,也可以是.SchDoc的 ...

最新文章

  1. python 只循环目录_Python面试题目,掌握他们令你更上一层楼!附答案
  2. python基本语法语句-python基本语句有哪些
  3. webpack 入口文件 php,webpack,jsx_webpack jsx 找不到入口文件,webpack,jsx - phpStudy
  4. C#开发Android应用的必备——Mono for Android V1.0 发布
  5. swift hidesBottomBarWhenPushed 设置界面
  6. 小酌一下:Pycharm 2019.1.3 64位版本破解
  7. 创新元旦新年PSD分层海报,新气象开启!
  8. 在AIX 5.3+HACMP 5.4以上环境安装10gR2 10.2.0.1 RAC CRS Clusterware必须先运行Patch 6718715中的rootpre.sh...
  9. win11wifi总掉线怎么办 windows11wifi总掉线的解决方法
  10. 新款苹果电脑_“Mac历史性的一天”!别了,英特尔!苹果电脑将采用自研芯片,公司股价又创新高...
  11. java 与 php 区别或异同(整理、整合)
  12. QT实现年会抽奖小软件的实现
  13. linux读usb蓝牙数据,嵌入式Linux下USB蓝牙设备驱动.pdf
  14. Spark中的Driver
  15. Java获取不到tfp目录内容_AndroidRuntime引起:java.lang.unsatisfiedLinkError:无法加载tfp_jni:findLibrary返回null...
  16. 阿里天池金融数据分析赛题2:保险反欺诈预测baseline
  17. 互联网名称与数字地址分配机构ICANN简介
  18. 嵌入式端音频开发(实战篇)之 4.2 把很多音频合成一个bin文件并统计每个音频文件的大小的方法(内含转换脚本)
  19. 常常反思,让你变成更好的自己
  20. 网页聊天室的开发笔记

热门文章

  1. 系统自带输入法➋➌➍➎➏➐➑➒问题
  2. 应用计算机技术建立起来的地图,韩梅家住鼓楼附近,约好同学夏宇一块儿去景山公园踏青。(15分)...
  3. 简述网卡的作用和工作原理_网卡的功能和工作原理(1)
  4. 电脑上如何快速将图片压缩变小?
  5. 树莓派4B系统搭建(超详细版)
  6. 小白Java求学之路之一:控制台实现用户注册、登录
  7. COLING 2018 accepted paper
  8. RPS基准点系统 2020
  9. 幽默笑话大全 API 接口
  10. mysql数据库应用试卷代号3868_实用数据库期末试卷B卷答题纸