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

chili3d笔记18 出三视图调整

布尔合并有问题

import { IApplication, Logger, PubSub, ShapeNode } from "chili-core";
import { getProjectionEdges, gp_Pnt, LineSegmentList, OccShape, ProjectionResult2 } from "chili-wasm";import { Matrix3, Vector3 } from "three";
interface Segment {first: gp_Pnt;second: gp_Pnt;
}export class njsgcs_drawingView extends HTMLElement {private viewportCanvas2d: HTMLCanvasElement | null = null;private app: IApplication | null = null;constructor() {super();PubSub.default.sub("njsgcs_drawview", async (app: IApplication) => {Logger.info("njsgcs_drawview event triggered");if (this.viewportCanvas2d) {this.removeChild(this.viewportCanvas2d);this.viewportCanvas2d = null;}this.app = app;const canvas = this.createCanvas();this.appendChild(canvas);});}private drawProjectionEdges(ctx: CanvasRenderingContext2D, projection: ProjectionResult2) {// 清除画布ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);const margin = 100;const availableWidth = ctx.canvas.width ;const availableHeight = ctx.canvas.height ;const scale = 0.5; // 留点边距
const swapXYMatrix = new Matrix3().set(0, 1, 0,1, 0, 0,0, 0, 1
);
const swapXYMatrix2 = new Matrix3().set(0, 1, 0,1, 0, 0,0, 0, 1
);
const swapXYMatrix3 = new Matrix3().set(-1, 0, 0,0,1,  0,0, 0, 1
);// 定义各视图偏移const views = [{name: 'front',segmentsVisible: this.toArray(projection.f_visible),segmentsHidden: this.toArray(projection.f_hidden),matrix :  new Matrix3().scale(scale, scale).multiply(swapXYMatrix) .translate(margin, availableHeight-margin)},{ name: 'side',segmentsVisible: this.toArray(projection.s_visible),segmentsHidden: this.toArray(projection.s_hidden),matrix :  new Matrix3().scale(scale, scale).multiply(swapXYMatrix2) .translate(availableWidth-margin, availableHeight-margin)},{name: 'top',segmentsVisible: this.toArray(projection.t_visible),segmentsHidden: this.toArray(projection.t_hidden),matrix :  new Matrix3().scale(scale, scale).multiply(swapXYMatrix3) .translate(margin,margin)},];// 绘制每个视图for (const view of views) {// 实线:可见线this.drawSegments(ctx,view.segmentsVisible,false,view.matrix,);// 虚线:隐藏线this.drawSegments(ctx,view.segmentsHidden,true,view.matrix,);}}  private drawSegments(ctx: CanvasRenderingContext2D,segments: Segment[],isHidden: boolean,matrix: Matrix3,) {ctx.strokeStyle = isHidden ? "gray" : "black";ctx.lineWidth = isHidden ? 1 : 2;ctx.setLineDash(isHidden ? [5, 5] : []);Logger.info(matrix)for (const segment of segments) {if (segment && segment.first && segment.second) {ctx.beginPath();const transformedPoint = new Vector3(segment.first.x, segment.first.y, 1).applyMatrix3(matrix);ctx.moveTo(transformedPoint.x,transformedPoint.y);Logger.info(transformedPoint.x , transformedPoint.y )const transformedPoint2 = new Vector3(segment.second.x, segment.second.y, 1).applyMatrix3(matrix);ctx.lineTo(transformedPoint2.x,transformedPoint2.y);ctx.stroke();}}}private toArray(segmentList: LineSegmentList): Segment[] {const result = [];for (let i = 0; i < segmentList.size(); i++) {const segment = segmentList.get(i);if (segment) {result.push(segment);}}return result;}private createCanvas(): HTMLCanvasElement {if (!this.viewportCanvas2d) {this.viewportCanvas2d = document.createElement("canvas");this.viewportCanvas2d.width = 1200;this.viewportCanvas2d.height = 600;this.viewportCanvas2d.style.border = "1px solid #000";const ctx = this.viewportCanvas2d.getContext("2d");if (ctx) {const document = this.app!.activeView?.document;if (!document) return this.viewportCanvas2d;const geometries = document.selection.getSelectedNodes();const entities = geometries.filter((x) => x instanceof ShapeNode);Logger.info(`Number of entities: ${entities.length}`);for (const entity of entities) {const shapeResult = entity.shape;if (shapeResult.isOk) {const shape = shapeResult.value; // 获取IShape  // 检查是否为OccShape实例  if (shape instanceof OccShape) {const topoShape = shape.shape; // 访问TopoDS_Shape  const ProjectionEdges=getProjectionEdges(topoShape);this.drawProjectionEdges(ctx,ProjectionEdges)}}}}}return this.viewportCanvas2d!;}}customElements.define("njsgcs-drawing-view", njsgcs_drawingView);

http://www.lryc.cn/news/571639.html

相关文章:

  • 数据结构——选择题—查漏补缺
  • Could not locate zlibwapi.dll. Please make sure it is in your library path!
  • 功耗高?加密弱?爱普特APT32F1023H8S6单片机 2μA待机+AES硬件加密破局
  • Vue3 + TypeScript 本地存储 localStorage 的用法
  • 【时时三省】(C语言基础)内部函数和外部函数
  • Cornerstone3D 2.x升级调研
  • EPLAN P8 2.9 如何使用.step格式3D文件绘制3D安装布局图
  • 用idea操作git缓存区回退、本地库回退、远程库回退
  • Oracle client 静默安装
  • 【八股消消乐】构建微服务架构体系—一致性抽象
  • react 自定义状态管理库
  • sql_mode(二)宽松模式和严格模式的区别
  • CHASE、CoSQL、SPARC概念介绍
  • 以list为输入条件,查询数据库表,java中的mapper层和mybatis层应该怎么写?
  • 裸金属服务器深度评测:云计算时代的性能与安全担当​​​​
  • centos 7单机安装ceph并创建rbd块设备
  • 博世X阿里云:智能座舱接入通义大模型!
  • MYSQL进阶超详细总结2.0
  • CppCon 2017 学习:CNL: A Compositional Numeric Library
  • Zephyr 高阶实践:彻底讲透 west 构建系统、模块管理与跨平台 CI/CD 配置
  • 微信小程序-数据加密
  • 数据结构 栈与队列 6.18
  • Vue3 × DataV:三步上手炫酷数据可视化组件库
  • Matplotlib快速入门
  • 2D写实交互数字人:让AI形象拥有“真人温度“的技术革命
  • 《HTTP权威指南》 第1-2章 HTTP和URL基础
  • C#实现图片文字识别
  • 【Pandas】pandas DataFrame unstack
  • LVS+Keepalived高可用群集
  • 【请关注】真实案例pg及kong安装部署