当前位置: 首页 > news >正文

chili3d笔记19 读取dxf

读取dxf

import { Logger, PubSub } from "chili-core";
import DxfParser, { ILineEntity } from 'dxf-parser';export function rebuild3D(document: Document) {const fileInput = document.createElement("input");fileInput.type = "file";fileInput.accept = ".dxf"; // 修改为正确的文件类型fileInput.style.display = "none"; // 隐藏输入框fileInput.click(); // 触发文件选择// 处理文件选择事件fileInput.addEventListener("change", async (event) => {const target = event.target as HTMLInputElement;if (target.files && target.files.length > 0) {const file = target.files[0];Logger.info(`Selected file: ${file.name}`);try {const reader = new FileReader();reader.onload = function () {const dxfText = reader.result as string;const parser = new DxfParser();try {const dxf = parser.parseSync(dxfText);if (dxf && dxf.entities) {dxf.entities.forEach(entity => {if (entity.type === 'LINE') {const lineEntity = entity as ILineEntity;const start =lineEntity.vertices[0];const end = lineEntity.vertices[1];// 确保起点和终点都有坐标if (start && end) {PubSub.default.pub("njsgcs_makeline",start.x, start.y, start.z,end.x, end.y, end.z);}}});
}Logger.info('成功解析 DXF:', dxf);} catch (err) {Logger.error('解析失败:', err);}};reader.readAsText(file);} catch (error) {Logger.error("读取文件失败:", error);}}});
}
    async newDocument(name: string): Promise<IDocument> {const document = new Document(this, name);const lightGray = new Material(document, "LightGray", 0xdedede);const deepGray = new Material(document, "DeepGray", 0x898989);const redMaterial = new Material(document, "Red", 0xff0000,"1");  
const greenMaterial = new Material(document, "Green", 0x00ff00,"2");  
const blueMaterial = new Material(document, "Blue", 0x0000ff,"3");  const yellowMaterial = new Material(document, "Yellow", 0xffff00, "4"); // 黄色
const cyanMaterial = new Material(document, "Cyan", 0x00ffff, "5");     // 青色
document.materials.push(lightGray, deepGray,redMaterial, greenMaterial, blueMaterial,yellowMaterial, cyanMaterial);await this.createActiveView(document);return document;}

const materialIds = app.activeView?.document!.materials.map(material => material.id);  
console.log("所有材质ID:", materialIds);

可以将 Canvas 的原点从默认的左上角改为左下角,以实现与标准 CAD 坐标系一致的效果。可以通过以下方式实现:✅ 实现方法
使用变换矩阵翻转 Y 轴: 在绘制前对 ctx 应用一个变换,将 Y 轴翻转,使原点位于左下角。调整绘制逻辑中的画布高度偏移: 通过 ctx.setTransform 或手动调整坐标来实现。🔧 修改建议
在调用 ctx.beginPath() 之前,添加如下代码:ts
ctx.setTransform(1, 0, 0, -1, 0, ctx.canvas.height); // 翻转Y轴,并将原点移到左下角
http://www.xdnf.cn/news/1061605.html

相关文章:

  • 阿里巴巴开源的 分布式事务解决方案Seata
  • iOS应用启动时间优化:通过多工具协作提升iOS App性能表现
  • 1532.在区间范围内统计奇数数目
  • Android 当apk是系统应用时,无法使用webView的解决方案
  • 京运通601908,一只值得长期跟踪操作的波段投资标的,两个指标即可做好
  • Cargo 与 Rust 项目
  • Spring Boot自动配置原理
  • 【智能安全帽新升级】搭载VTX316TTS语音合成芯片,让安全“听得见”!
  • 【国产AI服务器】全国产PCIE5.0交换板,替代博通89104/89144,支持海光、龙芯等平台
  • HTTP 请求方法与状态码
  • “地标界爱马仕”再拓疆域:世酒中菜联袂赤水金钗石斛定义中国GI
  • 力扣-169.多数元素
  • Kafka线上集群部署方案:从环境选型到资源规划思考
  • http2与websocket关系
  • Linux——linux的基本命令
  • lingma(阿里云Ai)结合idea使用
  • day43-硬件学习之ARM基础知识
  • 从生活场景学透 JavaScript 原型与原型链
  • 棱镜观察|EMB“重构”卡钳,车企降本压力与Brembo困局
  • 力扣-62.不同路径
  • Cesium、ThreeWebGL详解(二)渲染引擎向GPU传数据、性能优化、引擎对比
  • Docker容器常用命令汇总
  • 华为云Flexus+DeepSeek征文 | 利用Dify平台构建多智能体协作系统:从单体到集群的完整方案
  • python自助棋牌室管理系统
  • 全面掌握 C++ 基础:关键特性与进化
  • Llama 4 模型卡及提示格式介绍
  • svn客户端使用教程简易入门:附外网远程访问内网SVN服务通用方法
  • 【服务器R环境架构】基于 micromamba下载 R 库包
  • React封装框架dvajs(状态管理+异步操作+数据订阅等)
  • Windsurf SWE-1模型评析:软件工程的AI革命