eagle 折腾记录 - 用 eagle 管理你的 D5 模型素材

eagle 的最新 beta 版支持插件系统了。

刚刚整理模型整理地很烦就想到要是能用 eagle 管理一下 D5 的模型素材就好了,摸了一下 eagle 的插件文档,已经基本搞定了。


其实主要代码就这么几行:

const fs = require('fs');
const imageSize = require('./../js/image-size.js');
const AdmZip = require('adm-zip');

module.exports = async ({ src, dest, item }) => {
    return new Promise(async (resolve, reject) => {
        try {
            // 1. Unzip the .d5a file
            let zip = new AdmZip(src);
            let zipEntries = zip.getEntries();

            // 2. Find the icon.png file
            let iconEntry = zipEntries.find(entry => entry.entryName === 'icon.png');
            if (!iconEntry) {
                return reject(new Error(`icon.png not found in .d5a file.`));
            }

            // 3. Extract the icon.png file to dest
            let iconData = iconEntry.getData();
            fs.writeFileSync(dest, iconData);

            // 4. Get the size of the icon.png file
            let size = await imageSize(dest);

            // 5. Check if the result is correct
            if (!fs.existsSync(dest) || size.width === 0) {
                return reject(new Error(`icon.png file thumbnail generate fail.`));
            }

            // 6. update the item dimensions
            item.height = size?.height || item.height;
            item.width = size?.width || item.width;

            // 7. return the result
            return resolve(item);
        }
        catch (err) {
            return reject(err);
        }
    });
}

上面那个是从 d5a 文件中解压出缩略图的。


<!DOCTYPE html>
<html>

<head>
	<meta charset="UTF-8">
	<title>ICNS Viewer</title>
	<style>
		html,
		body {
			margin: 0;
			padding: 0;
			overflow: hidden;
		}

		#viewer {
			pointer-events: none;
			object-fit: contain;
			object-position: center;
			width: 100%;
			height: 100%;
			max-width: 100vw;
			max-height: 100vh;
		}
	</style>
</head>

<body>
	<img id="viewer" />
	<script>
		// 创建一个URLSearchParams对象,用于解析URL中的查询参数
		const urlParams = new URLSearchParams(window.location.search);
		// 从查询参数中获取文件路径
		const filePath = urlParams.get('path');
		// 从查询参数中获取宽度
		const width = urlParams.get('width');
		// 从查询参数中获取高度
		const height = urlParams.get('height');
		// 从查询参数中获取主题
		const theme = urlParams.get('theme');
		// 从查询参数中获取语言
		const lang = urlParams.get('lang');

		// 通过ID选择器获取HTML中的viewer元素
		const viewer = document.querySelector('#viewer');

		// 1. 首先加载缩略图
		// 👍 避免加载时间过长,UI无内容
		// 将文件路径中的".d5a"替换为"_thumbnail.png",并设置为viewer的src
		viewer.src = filePath.replace(".d5a", "_thumbnail.png");

		// 2. 加载文件并替换缩略图
		// 使用自执行的异步函数
		(async function () {
			// 引入AdmZip库,用于处理zip文件
			const AdmZip = require('adm-zip');
			// 引入fs库,用于文件系统操作
			const fs = require('fs');

			// 解压.d5a文件
			let zip = new AdmZip(filePath);
			// 获取zip文件中的所有条目
			let zipEntries = zip.getEntries();

			// 在zip条目中找到名为'icon.png'的文件
			let iconEntry = zipEntries.find(entry => entry.entryName === 'icon.png');
			// 如果没有找到'icon.png',则在控制台输出错误信息并返回
			if (!iconEntry) {
				console.error(`icon.png not found in .d5a file.`);
				return;
			}

			// 将'icon.png'文件提取到一个buffer中
			let buffer = iconEntry.getData();

			// 将buffer转换为base64格式
			let base64 = `data:image/png;base64,${buffer.toString('base64')}`;

			// 将viewer的src设置为base64字符串,即显示'icon.png'图片
			viewer.src = base64;
		})();
		</script>
</body>

</html>

这段是预览用的。


好了基本上就是这样了.

image

image

使用效果类似这样,三维的预览没搞懂 d5mesh 到底是个什么章程就还是拿图片顶顶吧。

代码都放这里了,拿示例项目改的甚至文件名都没改完,懒得搞了 leolee9086/d5a (github.com)

有时间再整整 d5m。


本文使用思源笔记 - 隐私优先的个人知识管理系统,支持 Markdown 排版、块级引用和双向链接 (b3log.org)创作完成

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    915 引用 • 931 回帖
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    89 引用 • 113 回帖
  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖 • 3 关注
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    35 引用 • 200 回帖 • 29 关注
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    45 引用 • 113 回帖 • 300 关注
  • 尊园地产

    昆明尊园房地产经纪有限公司,即:Kunming Zunyuan Property Agency Company Limited(简称“尊园地产”)于 2007 年 6 月开始筹备,2007 年 8 月 18 日正式成立,注册资本 200 万元,公司性质为股份经纪有限公司,主营业务为:代租、代售、代办产权过户、办理银行按揭、担保、抵押、评估等。

    1 引用 • 22 回帖 • 689 关注
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    162 引用 • 473 回帖
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 600 关注
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    116 引用 • 99 回帖 • 271 关注
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 509 关注
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    9 引用 • 32 回帖 • 160 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 10 关注
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    76 引用 • 37 回帖 • 1 关注
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 38 关注
  • 锤子科技

    锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。

    4 引用 • 31 回帖 • 8 关注
  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    91 引用 • 751 回帖 • 1 关注
  • 心情

    心是产生任何想法的源泉,心本体会陷入到对自己本体不能理解的状态中,因为心能产生任何想法,不能分出对错,不能分出自己。

    59 引用 • 369 回帖
  • 分享

    有什么新发现就分享给大家吧!

    242 引用 • 1746 回帖 • 4 关注
  • Hibernate

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    39 引用 • 103 回帖 • 688 关注
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    25 引用 • 191 回帖 • 19 关注
  • HHKB

    HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。

    5 引用 • 74 回帖 • 410 关注
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 32 关注
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    11 引用 • 5 回帖 • 568 关注
  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    261 引用 • 662 回帖 • 1 关注
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    164 引用 • 594 回帖
  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    5 引用 • 15 回帖 • 216 关注
  • 自由行
    3 关注