隧道通风网络节点图导出CAD文本时的三角形算法

news2024/11/15 5:11:40

在TESP软件中涉及到将带文本的节点图导出为CAD文件,其中文本的绘制需要根据Section的方向来确定,确保和绘图的习惯一致。具体包括:

(1)垂直绘制的Section需确保文字字头向左。

(2)除了垂直的文字,其他文字,不论箭头是向左,还是向右,文字均应在Section的上方。

软件中Swing绘制的通风网络节点图

导出的CAD文件中的文本绘制效果

具体方法:

1、求解section箭头线的准确角度,0-360°;

2、根据代码进行文本绘制。

Swing 中的文本绘制旋转

三角函数

代码实现:

1、箭头线角度计算:

                double detX = x2 - x1;
				double detY = y2 - y1;
				double detL = Math.sqrt(Math.pow(detX, 2) + Math.pow(detY, 2));
				double sinaTheta = detY / detL;
				double cosTheta = detX / detL;
				double theta = 0;
				double theta_Fact=Math.acos(cosTheta);
					//0-180°,如果sina<0,采用acos求角度		
				if(sinaTheta>=0) {
					theta=Math.acos(cosTheta);
					theta_Fact=Math.toDegrees(theta);
				}
				//如果sina<0,
				else if (sinaTheta<0) {
					//180-270°,采用acos求角度	
					if(cosTheta<0) {
						theta=Math.acos(cosTheta);
						theta_Fact=360-Math.toDegrees(theta);
						theta=Math.toRadians(theta_Fact);
					}
					else {
						//270-360°,采用asin求角度	
						theta=Math.asin(sinaTheta);
						theta_Fact=Math.toDegrees(theta)+360;
					}
					
				}

2、文本绘制:

				double sx = 0;
				double sy = 0;
				
				//90°,误差1°,y1<y2,箭头向南,y1<y2;
				if(Math.abs(theta_Fact-90)<1.000)
				{			
				        sy = y2;
						sx = x2;
						theta=-1*theta;
				}
							
				//270°,误差1°,y1>y2,箭头向北
				else if(Math.abs(theta_Fact-270)<1.000) {
					sy = y1;
					sx = x1;
					
				}
				//0-90°	
				else if (theta_Fact<90){
					
						sy = y1;
						sx = x1;

				//如果91-180°
				} else if((theta_Fact<=180)&&(theta_Fact>90)){
					
					sy = y2;
					sx = x2;
					theta_Fact=theta_Fact+180;
					theta=Math.toRadians(theta_Fact);
			//如果181-270°
			} else if((theta_Fact<=270)&&(theta_Fact>180)){
			    sy = y2;
				sx = x2;
				theta_Fact=theta_Fact+180;
				theta=Math.toRadians(theta_Fact);	
				//如果271-360°
			} else if ((theta_Fact<=360)&&(theta_Fact>270)){
				
				sy = y1;
				sx = x1;
				
			}		
				double offset = 5;
				graphics.setColor(Color.GREEN);
				graphics.rotate(theta, sx, sy); // counterclockwise...
				// graphics.shear(-0.4f, -0.3f);

				ILVSection section = (ILVSection) mc.getValue();
				// String title = arrow + " " + section.getSzTitle();
				String title = section.getSzTitle();
				fm = graphics.getFontMetrics();
				width = fm.stringWidth(title);
				graphics.drawString(StringUnicode.stringToUnicode(title), sx + offset, sy - offset);

				// graphics.drawRect(cenX+5, cenY+5, 20, 20);
				// String secID=section.getIiD()+"";
				// fm = graphics.getFontMetrics();
				// ascent = fm.getAscent();
				// descent = fm.getDescent();
				// width = fm.stringWidth(secID);
				// graphics.drawString(secID, cenX - width / 2, cenY +5);
				graphics.rotate(-1 * theta, sx, sy);
			}

		}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1981361.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Golang面试题三(map)

1.map底层实现 由图看出&#xff0c;其实map的底层结构体是hmap&#xff0c;同时hmap里面维护着若干个bucket数组&#xff08;即桶数组&#xff09;。bucket数组中每个元素都是bmap结构的&#xff0c;bmap中存储着8个key-value的键值对&#xff0c;如果是满了的话&#xff0c;当…

奥运会Ⅵ--LLM 是否狡猾到可以自行欺骗你?

这已经成为一句老生常谈&#xff0c;因为它是事实&#xff1a;人类开发的任何工具都可以用于行善或作恶。你可以用锤子敲钉子或砸某人的头。你可以用火取暖或烧毁房屋。等等。 因此&#xff0c;数字世界的最新工具既带来好处&#xff0c;也带来风险&#xff0c;这不足为奇。其…

文献解读-遗传病-第二十六期|《癫痫的临床特征、诊疗和KCNH5突变》

关键词&#xff1a;遗传病&#xff1b;基因测序&#xff1b;变异检测&#xff1b; 文献简介 标题&#xff08;英文&#xff09;&#xff1a;Clinical Feature, Treatment, and KCNH5 Mutations in Epilepsy标题&#xff08;中文&#xff09;&#xff1a;癫痫的临床特征、诊疗和…

文心一言 VS 讯飞星火 VS chatgpt (318)-- 算法导论22.3 10题

十、修改深度优先搜索的伪代码&#xff0c;让其打印出有向图G的每条边及其分类。并指出&#xff0c;如果图G是无向图&#xff0c;要进行何种修改才能达到相同的效果。如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 首先&#xff0c;我们来定义深度优先搜索&…

leetcode:汇总区间

题目&#xff1a; 给定一个无重复元素的有序整数数组nums。返回恰好覆盖数组中所有数字的最小有序区间范围列表 。也就是说&#xff0c;nums的每个元素都恰好被某个区间范围所覆盖&#xff0c;并且不存在属于某个范围但不属于nums的数字X。列表中的每个区间范围[a,b]应该按…

简单的docker学习 第2章 docker引擎

第2章docker引擎 2.1Docker 引擎发展历程 2.1.1 首发版本架构 Docker 在首次发布时&#xff0c;其引擎由两个核心组件构成&#xff1a;LXC&#xff08;Linux Container&#xff09;与 Docker Daemon。不过&#xff0c;该架构依赖于 LXC&#xff0c;使得 Docker 存在严重的问…

人力资源杂志人力资源杂志社人力资源编辑部2024年第13期目录

看法_总编随笔 学会退步 齐向宇; 1 看法_热点聚焦 数说 7 司事 9 看法_热点聚焦_翻转 话题 “霸总”发言遭吐槽对职场年轻人多些体谅 8 看法_视界《人力资源》投稿&#xff1a;cn7kantougao163.com 养老保险改革及其对人事工作的启示 赵梓安; 12-13 做…

潘展乐速度!滴滴无车赔,叫车就是快

8月5日&#xff0c;滴滴网约车“快”乐大使潘展乐在男子4x100米混合泳接力比赛中以45秒92的优异成绩在最后一棒反超&#xff0c;中国队夺得金牌&#xff01;恭喜潘展乐在本届比赛中和队友一起站上冠军的领奖台&#xff0c;用团队金牌为自己庆生&#xff01; 为进一步提升用户叫…

三级等保测评如何顺利通过

三级等保认证&#xff0c;作为中国信息安全等级保护制度中的高级别认证&#xff0c;其标准之高、要求之严&#xff0c;在国内信息安全领域内堪称顶尖。根据《信息系统安全等级保护基本要求》&#xff0c;三级等保的测评内容覆盖了等级保护安全技术要求和安全管理要求的多个层面…

android13 删除兼容性警告窗口 deprecation warning 去除弃用警告

总纲 android13 rom 开发总纲说明 目录 1.前言 2.情况 3.问题分析 4.代码更改 5.编译测试 6.彩蛋 1.前言 在 Android 13 中,为了提高用户体验和应用的兼容性,系统引入了一些新的隐私和安全特性。这些特性可能会影响旧版应用的行为,因此当用户运行可能不完全兼容 An…

【HarmonyOS NEXT星河版开发学习】小型测试案例01-今日头条置顶练习

个人主页→VON 收录专栏→鸿蒙开发小型案例总结​​​​​ 基础语法部分会发布于github 和 gitee上面 ​ 前言 本系列可能是博客首发&#xff0c;鸿蒙开发星河版是一个全新的版本&#xff0c;由于参考视频较少鸿蒙开发不被重视导致csdn上面并没有全套的学习路线&#xff0c;…

6款免费版文章生成器,为你的创作提供无限可能

在这个信息发展迅速的时代&#xff0c;创作者们常常陷入时间和灵感的困境中。为了应对这一挑战&#xff0c;人工智能技术为我们提供了一种全新的解决方案——文章生成器。在这些文章生成器中可以帮助我们快速生成高质量的内容&#xff0c;为我们的创作提供无限可能。在本文中&a…

json文件格式

json文件格式 格式介绍1格式介绍2格式3 格式介绍1 格式介绍2 格式3 参考地址

全自动真空拌馅机 肠类肉丸类馅料搅拌机:

拌馅机&#xff0c;作为现代厨房与食品加工行业不可或缺的利器&#xff0c;其优点繁多&#xff0c;宛如烹饪艺术中的魔术师&#xff0c;为食材的融合与美味的创造开辟了新的维度。 首先&#xff0c;拌馅机以其高效均匀的搅拌能力著称&#xff0c;能够瞬间将肉类、蔬菜、调料等多…

微信小程序 - 自定义计数器 - 优化(键盘输入校验)

微信小程序通过自定义组件&#xff0c;实现计数器值的增加、减少、清零、最大最小值限定、禁用等操作。通过按钮事件触发方式&#xff0c;更新计数器的值&#xff0c;并修改相关联的其它变量。通过提升用户体验&#xff0c;对计数器进行优化设计&#xff0c;使用户操作更加便捷…

亚马逊测评:提升产品信誉与销量的关键

在亚马逊这样竞争激烈的环境中。通过有效的测评&#xff0c;卖家可以轻松为自己的产品添加评论、提高排名&#xff0c;进而打造出优质的产品。然而&#xff0c;亚马逊测评并不等同于刷单。今天&#xff0c;将深入探讨亚马逊测评的本质、与刷单的区别&#xff0c;以及如何在这个…

新能源车燃料和动力电池及系统应用概述(上)

随着化石能源的日益消耗和对环保的逐渐重视&#xff0c;利用电能取代化石能源作为动力的电动汽车受到了世界各国的关注和大力研发。电池技术作为电动汽车的核心和瓶颈&#xff0c;是电动汽车研究的重点和热点方向&#xff0c;也是关系到新能源汽车成本、续航里程、安全性及使用…

【LLM大模型】一文掌握Prompt:万能框架+优化技巧+常用指标

随着大模型在2023年横空出世&#xff0c;“Prompt 工程” 应运而生&#xff0c;作为用好大模型最重要的武器&#xff0c;Prompt 的好坏对模型效果有着决定性的影响。然而&#xff0c;网络上大量相关文章多是罗列“Prompt 工程” 中的若干技巧&#xff0c;少有体系化的总结&…

gym/Gymnasium强化学习玩推箱子游戏

gym/Gymnasium强化学习玩推箱子游戏 gym 框架 源码 https://github.com/openai/gym 文档 https://www.gymlibrary.dev/ 自 2021 年以来一直维护 Gym 的团队已将所有未来的开发转移到 Gymnasium&#xff0c;这是 Gym 的替代品&#xff08;将 gymnasium 导入为 gym&#xff09;…

k8s工作负载控制器--DaemonSet

文章目录 一、概述二、适用场景三、基本操作1、官网的DaemonSet资源清单2、字段解释3、编写DaemonSet资源清单4、基于yaml创建DaemonSet5、注意点5.1、必须字段5.2、DaemonSet 对象的名称5.3、.spec.selector 与 .spec.template.metadata.labels之间的关系 6、查看DaemonSet6.1…