1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
###############################################################################
# Copyright (c) 2018-2024 by Altair Engineering, Inc.
# All rights reserved.
#
# Altair Engineering, Inc. makes this software available as part of the Vision
# tool platform.  As long as you are a licensee of the Vision tool platform
# you may make copies of the software and modify it to be used within the
# Vision tool platform, but you must include all of this notice on any copy.
# Redistribution without written permission to any third party, with or
# without modification, is not permitted.
# Altair Engineering, Inc. does not warrant that this software is error free
# or fit for any purpose.  Altair Engineering, Inc. disclaims any liability for
# all claims, expenses, losses, damages and costs any user may incur as a
# result of using, copying or modifying the software.
# =============================================================================
#   @userware
#       Headless Schematic Export
#   @section
#       Miscellaneous Userware Examples
#   @description
#       Load a binary database (ZDB file), and create a graphics file for each
#       module (SVG, PDF or POSTSCRIPT). This script works without a GUI and
#       must be executed directly with starsh.
#
#       Usage:
#       ```
#       starsh batchExportSchematics.tcl <ZDB_FILE> <FILE_TYPE> <TARGET_FOLDER>
#       ```
#   @files
#       batchExportSchematics.tcl
#   @tag
#       zdb
###############################################################################


# -----------------------------------------------------------------------------
# _get_extension - Map file type to file extension.
# -----------------------------------------------------------------------------
#
proc BatchExportSchematic:_get_extension {file_type} {
    switch -exact -- $file_type {
        "-svg" {
            return ".svg"
        }
        "-pdf" {
            return ".pdf"
        }
        "-postscript" {
            return ".ps"
        }
        default {
            error "Bad file_type: $file_type"
        }
    }
}


# =============================================================================
# Export_schematics - Create graphics file for each module in $db;
#                     $file_type must be "-svg", "-pdf", or "-postscript";
#                     store files in the $target_folder.
# =============================================================================
#
proc BatchExportSchematic:Export_schematics {db file_type target_folder} {
    ##
    # Determine file extension for the given file type.
    #
    set ext [BatchExportSchematic:_get_extension $file_type]

    ##
    # Create target directory.
    #
    file mkdir $target_folder

    ##
    # Create 'headless' schematic drawing engine.
    #
    set schem [$db schematic]

    $db foreach module m {
        ##
        # Get the module's name.
        #
        set module_name [$db oid oname $m]

        ##
        # Load the module into the schematic engine.
        #
        $schem loadmodule $module_name

        ##
        # Export graphics file.
        #
        set    fname [zos sanitizeFilename $module_name]
        append fname $ext
        set file_name [file join $target_folder $fname]
        $schem export $file_type $file_name
    }

    ##
    # Destroy $schem.
    #
    $schem free
}


# -----------------------------------------------------------------------------
# _print_usage - Print a usage message and exit.
# -----------------------------------------------------------------------------
#
proc BatchExportSchematic:_print_usage {} {
    set    usage "USAGE:\n"
    append usage "starsh [info script] "
    append usage "<ZDB_FILE> "
    append usage "-svg|-pdf|-postscript "
    append usage "<TARGET_FOLDER>"
    puts stderr $usage
    exit 1
}


##
# Check that the script is called from 'starsh'.
#
set executable [lindex [file split [info nameofexecutable]] end]
if {![regexp {^starsh(\.exe)?$} $executable]} {
    puts "Bad main executable: $executable"
    BatchExportSchematic:_print_usage
}

##
# Require three parameters.
#
if {[llength $argv] != 3} {
    puts "Bad number of parameters"
    BatchExportSchematic:_print_usage
}
set zdb_file      [lindex $argv 0]
set file_type     [lindex $argv 1]
set target_folder [lindex $argv 2]

if {($file_type != "-svg") &&
    ($file_type != "-pdf") &&
    ($file_type != "-postscript")} {
    puts "Bad file type: $file_type"
    BatchExportSchematic:_print_usage
}

##
# Open the database and export a graphics file for each module.
#
set db [zdb open $zdb_file]
BatchExportSchematic:Export_schematics $db $file_type $target_folder
$db close