• StarUML6.0.1使用


    1. 简介

            作为一个软件开发人员,平时免不了做一定的软件设计,标准做法就是采用UML来设计:

    • 讨论功能流程时采用时序图、活动图来表达;
    • 做业务功能架构时采用组件图来表达;
    • 做系统部署架构时采用部署图来表达;
    • 做需求分析时采用用例图来表达;
    • 做系统内部设计时采用包图、类图、对象图来表达;

            二十年前我们用Rational Rose,过了五六年感觉PowerDesign更好,之后十多年一直钟爱PD,直到上个月用了7年的笔记本坏了,新笔记本重装环境时,再也不想去破解PowerDesign,而是寻找一个开源的UML工具软件来用用看,一通baidu之后发现了StarUML,是由思密达主导开发的一款开源UML工具软件,看看官网的图片介绍还是不错的。

            官网地址:StarUML 

      

            开源地址:https://github.com/staruml ,这里有很多工程。一般我们直接去官网下载已经制作好的安装包即可,安装都很简单。

    2. 破解

            直接采用官网制作好的安装包,在每次保存时总是提示去注册,让人很烦;把UML设计图导出png, jpeg图片时,更是留下了unregisted之类的水印,根本没法在文档里使用。我们需要解决两个问题:

    1. 去掉注册提示框;
    2. 去掉图片上的水印。

            解决这两个问题很简单,去StarUML安装目录下寻找app.asar文件,修改这个包里的两处地方即可。

            app.asar是一个压缩包,需要用asar来生成和解压,asar用npm来安装:

    npm install -g asar 

            npm自然是安装nodejs就有了,搞点前端的人都不用说了。

            执行asar看看:

    $ asar -h
    Usage: asar [options] [command]

    Manipulate asar archive files

    Options:
      -V, --version                         output the version number
      -h, --help                            display help for command

    Commands:
      pack|p [options]

          create asar archive
      list|l [options]            list files of asar archive
      extract-file|ef  extract one file from archive
      extract|e            extract archive
      *
      help [command]                        display help for command

    2.1 解包app.asar 

            我们进入StarUML安装目录,找到app.asar文件,如我的安装目录C:\Program Files\StarUML\resources下有如下文件:

    app.asar  app-update.yml  elevate.exe*  mdj.ico

             解压app.asar:

    asar extract app.asar app

            得到app目录, 进入目录app\src\engine:

    C:\Program Files\StarUML\resources\app\src\engine
    $ ls
    clipboard-manager.js  default-commands.js  engine.js   font-manager.js     pdf-graphics.js     selection-manager.js  update-manager.js
    command-manager.js    diagram-export.js    factory.js  license-manager.js  project-manager.js  unicode.js

            最关键的是两个文件:license-manager.js和diagram-export.js,看看英文都知道,一个管注册license,一个管图片导出。

    2.2 去掉注册提示

            打开license-manager.js,找到如下代码:

    1. checkLicenseValidity() {
    2. if (packageJSON.config.setappBuild) {
    3. setStatus(this, true);
    4. } else {
    5. this.validate().then(
    6. () => {
    7. setStatus(this, true);
    8. },
    9. () => {
    10. setStatus(this, false);
    11. UnregisteredDialog.showDialog();
    12. },
    13. );
    14. }
    15. }

            修改为:

    1. checkLicenseValidity() {
    2. if (packageJSON.config.setappBuild) {
    3. setStatus(this, true);
    4. } else {
    5. this.validate().then(
    6. () => {
    7. setStatus(this, true);
    8. },
    9. () => {
    10. //setStatus(this, false);
    11. //UnregisteredDialog.showDialog();
    12. setStatus(this, true);
    13. },
    14. );
    15. }
    16. }

            那么我们的注册提示就去掉了。

    2.3 去掉图片水印

            打开diagram-export.js,找到如下代码:

    1. // Draw watermark if application is not registered
    2. if (app.licenseManager.getStatus() !== true) {
    3. diagram.drawWatermark(
    4. canvas,
    5. canvasElement.width,
    6. canvasElement.height,
    7. 70,
    8. 12,
    9. "UNREGISTERED",
    10. );
    11. } else if (app.licenseManager.getLicenseInfo().licenseType === "STD") {
    12. const dgmType = diagram.constructor.name;
    13. if (app.licenseManager.isProDiagram(dgmType)) {
    14. diagram.drawWatermark(
    15. canvas,
    16. canvasElement.width,
    17. canvasElement.height,
    18. 45,
    19. 12,
    20. "PRO ONLY",
    21. );
    22. }
    23. }
    24. // Draw diagram to the new canvas
    25. diagram.arrangeDiagram(canvas);
    26. diagram.drawDiagram(canvas);
    27. // Return the new canvas to base64-encoded data
    28. var data = canvasElement
    29. .toDataURL(type)
    30. .replace(/^data:image\/(png|jpeg);base64,/, "");
    31. return data;
    32. }

            修改为:

    1. // Draw watermark if application is not registered
    2. /*
    3. if (app.licenseManager.getStatus() !== true) {
    4. diagram.drawWatermark(
    5. canvas,
    6. canvasElement.width,
    7. canvasElement.height,
    8. 70,
    9. 12,
    10. "UNREGISTERED",
    11. );
    12. } else if (app.licenseManager.getLicenseInfo().licenseType === "STD") {
    13. const dgmType = diagram.constructor.name;
    14. if (app.licenseManager.isProDiagram(dgmType)) {
    15. diagram.drawWatermark(
    16. canvas,
    17. canvasElement.width,
    18. canvasElement.height,
    19. 45,
    20. 12,
    21. "PRO ONLY",
    22. );
    23. }
    24. }
    25. */
    26. // Draw diagram to the new canvas
    27. diagram.arrangeDiagram(canvas);
    28. diagram.drawDiagram(canvas);
    29. // Return the new canvas to base64-encoded data
    30. var data = canvasElement
    31. .toDataURL(type)
    32. .replace(/^data:image\/(png|jpeg);base64,/, "");
    33. return data;
    34. }

            就是把两个处理水印的代码注释掉即可。

    2.4 打包app.asar

             在安装目录C:\Program Files\StarUML\resources下执行:

    asar pack app app.asar

            新的app.asar已经生成成功,则我们重新去打开StarUML,以上两个问题都完美解决了。

    3. 总结

             StarUML6.0.1还是很好使用的,很小巧,建议使用UML做架构设计的同仁来试试,看到很多年轻开发人员做设计时随意用word里的图形功能来设计,或者其它脑图来设计,我还是推荐采用UML来做软件设计,毕竟是一个很成熟的标准,何必放着标准不用而去用其它呢。

     

     

     

     

     

     

  • 相关阅读:
    C++ 学习
    代码随想录算法训练营第五十五天 | 300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
    node将对象按照ASCII码进行升序排列生成签名字符串,然后加载 pfx证书进行SHA256withRSA加密
    Java多线程
    【MySQL】数据库进阶之触发器内容详解
    Homomorphic Evaluation of the AES Circuit:解读
    zemax---单透镜设计实例01
    在Gin框架中加入Zap日志中间件
    21 | 多线程3
    微机原理与接口技术:微型计算机输入输出接口 详细笔记与例题
  • 原文地址:https://blog.csdn.net/bingersoft/article/details/136491204