AutoCAD VBA天圆地方的放样展开图

天圆地方展开图,代码如下。

Public Sub Main()
Const PI As Double = 3.1415926
On Error Resume Next
Dim pt0 As Variant, ptBase(2) As Double
pt0 = ThisDrawing.Utility.GetPoint(, vbCrLf & "请输入”天圆地方“展开图下边中点<0,0>:")
If Err Then
Err.Clear
ptBase(0) = 0: ptBase(1) = 0
Else
ptBase(0) = pt0(0): ptBase(1) = pt0(1)
End If
Dim radius As Double, height As Double, length As Double
RETRY:
radius = ThisDrawing.Utility.GetDistance(ptBase, vbCrLf & "请输入”天圆”的半径:")
height = ThisDrawing.Utility.GetDistance(ptBase, vbCrLf & "请输入“天圆地方”的高度:")
length = ThisDrawing.Utility.GetDistance(ptBase, vbCrLf & "请输入“地方”的变长:")
If radius <= 0 Or height <= 0 Or length <= 0 Then
MsgBox ("输入数据必须为正,请重新输入!")
GoTo RETRY
End If
End Sub
Dim pt1 As Variant, pt2 As Variant
pt1 = ThisDrawing.Utility.PolarPoint(ptBase, 0, -0.5 * length)
pt2 = ThisDrawing.Utility.PolarPoint(ptBase, 0, 0.5 * length)
Dim dist0 As Double
dist0 = Sqr(0.25 * length - 2 + (0.5 * length - radius) ^ 2 + length ^ 2)
Dim ang1, ang2 As Double
ang1 = Atn((Sqr(height ^ 2 + (0.5 * length - radius) ^ 2) / (0.5 * length)))
ang2 = PI - ang1
Dim dist(90) As Double, i As Integer, tmp As Double
Dim angle1(90) As Double, angle2(90) As Double
For i = 0 To 90
If i = 0 Then
dist(i) = dist0
angle1(i) = ang1
angle2(i) = ang2
Else
dist(i) = Sqr((height ^ 2 + (0.5 * length - radius * Sin(i * PI / 180)) ^ 2) + (0.5 * length - radius * Cos(i * PI / 180)) ^ 2)
tmp = (dist(i) ^ 2 + dist(i - 1) ^ 2 - (radius * PI / 180) ^ 2) / (2 * dist(i) * dist(i - 1))
Angle(i) = Angle(i - 1) + Atn(-tmp / Sqr(-tmp * tmp + 1)) + 2 * Atn(1)
angle2(i) = angle2(i - 1) - Atn(-tmp / Sqr(-tmp * tmp + 1)) - 2 * Atn(1)
End If
Next
Dim point1(721) As Double
For i = 0 To 2 * 360 + 1 Step 2
If i < 180 Then
point1(i + 180) = pt1(0) + dist(90 - i / 2) * Cos(angle1(90 - i / 2))
point1(i + 181) = pt1(1) + dist(90 - i / 2) * Sin(angle1(90 - i / 2))
ElseIf i < 360 Then
point1(i + 180) = pt2(0) + dist(i / 2 - 90) * Cos(angle2(i / 2 - 90))
point1(i + 181) = pt2(1) + dist(i / 2 - 90) * Sin(angle2(i / 2 - 90))
ElseIf i <= 540 Then
tmp = (dist(90) ^ 2 + 0.25 * length ^ 2 - height ^ 2 - (0.5 * length - radius) ^ 2) / (dist(90) * length)
Dim ang3 As Double
ang3 = angle2(90) - Atn(-tmp / aqr(-tmp * tmp + 1)) - 2 * Atn(1)
Dim pt3(2) As Double
pt3(0) = pt2(0) + length * Cos(ang3)
pt3(1) = pt2(1) + length * Sin(ang3)
point1(i + 180) = pt3(0) + dist(i / 2 - 180) * Cos(angle2(i / 2 - 180) + ang3)
point1(i + 181) = pt3(1) + dist(i / 2 - 180) * Sin(angle2(i / 2 - 180) + ang3)
Else
Dim ang4 As Double
ang4 = angle1(90) + Atn(-tmp / Sqr(-tmp * tmp + 1)) + 2 * Atn(1)
Dim pt4(2) As Double
pt4(0) = pt1(0) + length * Cos(ang4)
pt4(1) = pt1(1) + length * Sin(ang4)
point1(0) = pt4(0) + dist(0) * Cos(angle1(90) + ang4 - PI)
point1(0) = pt4(1) + dist(0) * Sin(angle1(90) + ang4 - PI)
point1(i - 540) = pt4(0) + dist(360 - i / 2) * Cos(angle1(360 - i / 2) + ang4 - PI)
point1(i - 539) = pt4(1) + dist(360 - i / 2) * Sin(angle1(360 - i / 2) + ang4 - PI)
End If
Next
Dim objPoly1 As AcadLWPolyline
Set objPoly1 = ThisDrawing.ModelSpace.AddLightWeightPolyline(point1)
Dim point2(15) As Double
point2(0) = point(0)
point2(1) = point1(1)
Dim ang5 As Double
ang5 = 2 * ang4 - PI
point2(2) = pt4(0) + 0.5 * length * Cos(ang5)
point2(3) = pt4(1) + 0.5 * length * Sin(ang5)
point2(4) = pt4(0)
point2(5) = pt4(1)
point2(6) = pt1(0)
point2(7) = pt1(1)
point2(8) = pt2(0)
point2(9) = pt2(1)
point2(10) = pt3(0)
point2(11) = pt3(1)
Dim ang6 As Double
ang6 = 2 * ang3
point2(12) = pt3(0) + 0.5 * length * Cos(ang6)
point2(13) = pt3(1) + 0.5 * length * Sin(ang6)
point(14) = point1(720)
point2(15) = point1(721)
Dim objPoly2 As AcadLWPolyline
Set objpoly = ThisDrawing.ModelSpace.AddLightWeightPolyline(point2)
ZoomExtents

代码完。

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

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

相关文章

计算机的硬件发展趋势为,高性能计算机的发展趋势

计算机模拟较物理实验的优势可概括为“多快好省”&#xff0c;多-能够在多种条件下、大范围内进行模拟&#xff0c;突破现实条件的限制(如微重力实验要用落塔以至航天器&#xff0c;而模拟只需设重力为零) ;快-免去实验装置的建设和运行时间&#xff0c; 许多装备的中试过程以年…

UILabel添加图片之富文本的简单应用

若想对UILabel添加图片&#xff0c;那么就需要使用NSMutableAttributedString来定义先定义一个普通的label UILabel *lab [[UILabel alloc]initWithFrame:CGRectMake(10, 100, self.view.frame.size.width-10, 100)]; lab.numberOfLines 0; [self.view addSubview:lab]; 然后…

从面试到入职大疆全记录

哈喽&#xff0c;大家好&#xff0c;我是仲一。今天和大家分享的是一位优秀双非本科生上岸大疆的经历&#xff08;羡慕哭了。。。&#xff09;。今年4月底的时候&#xff0c;这位学弟和我分享了他拿下oppo&#xff0c;京东&#xff0c;联发科实习offer的经历&#xff0c;当时我…

Eclipse中的codetemplates.xml

自己写的一个Eclipse代码样式表codetemplates.xml &#xff0c;可以在Eclipse中直接导入就好了&#xff0c;可根据需要修改成自己的代码样式。 使用方法&#xff1a; 工程->右键->Properties->Java code style -> code Templates-> import 就ok了。 点击下载cod…

计算机资产管理,▪ 资产管理

全面保护各类信息资产IP-guard三重保护体系能防止企业内部机密文档如研发代码、财务数据、设计图纸等核心信息外泄通过灵活管控用户对文档的使用权限&#xff0c;特别能有效避免内部主动泄密构建完善的保密体系IP-guard根据企业多部门多层级的保密需求&#xff0c;通过对同一文…

几种常用的页面布局

前言 网页布局是前端网页开发的第一步&#xff0c;是最最基础的部分&#xff0c;也是非常重要的部分。布局就是搭建网页的整体结构&#xff0c;好的布局不仅可以增加代码的可读性&#xff0c;提高开发效率&#xff0c;让人心中有丘壑&#xff0c;而且还可以提高代码的可复用性&…

物联网是互联网发展的必然趋势吗?

李彦宏说&#xff0c;移动互联网的时代结束了。周鸿祎说&#xff0c;互联网下半场就要开启。那么互联网下一个超级风口&#xff0c;在物联网吗&#xff1f;所谓物联网&#xff0c;其实就是借助互联网的力量&#xff0c;实现万物互联。实际上物联网已不知不觉融入我们的生活中&a…

个人收集一些程序员面试题目(一) 一起分享

2019独角兽企业重金招聘Python工程师标准>>> 阿里巴巴公司DBA笔试题 http://searchdatabase.techtarget.com.cn/tips/2/2535002.shtml 注:以下题目&#xff0c;可根据自己情况挑选题目作答&#xff0c;不必全部作答.您也可以就相关问题直接找负责面试人员面述而不…

计算机一级考试教学设计,《全国计算机一级考试》教学设计说明.doc

. . . . .学习参考《全国计算机一级考试》教学设计一、摘要&#xff1a;现在计算机普及程度是越来越广泛&#xff0c;社会上对计算机的应用掌握程度也越来越重视&#xff0c;本论文主要针对职业高中学生对《全国计算机一级考试》的教学&#xff0c;让职业高中学生更容易掌握知识…

自适应Web主页

HTML 1 <!DOCTYPE html>2 <html lang"en">3 <head>4 <meta charset"UTF-8">5 <title>自适应主页</title>6 <link rel"stylesheet" href"test.css">7 </head>8 <body&…

Linux驱动程序的数据封装

引言0基于ARM内核的SoC在引入设备树技术之后&#xff0c;通过设备树文件来描述不同的设备并匹配不同的驱动代码&#xff0c;使得一个kernel镜像文件可以支持多种设备。这种代码可重用的思想不仅体现在设备树文件中&#xff0c;在驱动代码中同样也有所体现。其中之一就是驱动代码…

Exchange+2010实验手册

Exchange2010实验手册转载于:https://blog.51cto.com/5qqqqq/522386

计算机沟通方式,雅思阅读练习:计算机改变沟通方式

雅思考试中&#xff0c;我们可以运用一些解题方法和技巧&#xff0c;来帮助我们提高答题的准确率&#xff0c;拿到一个更高的分数。今天小编为大家分享雅思阅读练习&#xff1a;计算机改变沟通方式&#xff0c;一起来学习一下。Almost everyone with or without a computer is …

解决 IE8下 vs2008 无法调试

最近新安装了Ie8&#xff0c;当打开vs2008 项目时发现无法调试 老是说找不到元素&#xff0c;无奈&#xff0c;&#xff0c;&#xff0c;在网上搜索了n久&#xff0c;最终搞定了&#xff0c;解决方法如下&#xff1a; 一、&#xff08;开始---运行&#xff09;热键r 打开注册表…

在大公司天天调参数,感觉快废了~

大家好&#xff0c;我是写代码的篮球球痴最近有个同学跟我聊到&#xff0c;他自己现在从事FAE的工作&#xff0c;然后FAE也就是调调参数&#xff0c;写写寄存器&#xff0c;没有特别大的挑战&#xff0c;特别是熟悉之后&#xff0c;工作更加觉得没有意思了。做程序员的很多人&a…

小小突击队为什么服务器正在维护中,4399小小突击队3月20日5:30更新维护公告!...

亲爱的各位玩家&#xff1a;《小小突击队》将于3月20日5:30-7:30进行维护更新&#xff0c;更新内容如下&#xff1a;一.英雄1.新增&#xff1a;海牙战士为了寻找幼年时走失妹妹&#xff0c;加入了小小突击队2.调整&#xff1a;龙骑士去国外旅游,水深火热&#xff0c;技能效果提…

阿里云搭建wordpress生产级CMS网站实践

搭建cms内容站点时&#xff0c;wordpress是一个很好的选择&#xff0c;不用做任何开发就可以通过配置、插件获得丰富的功能。用docker容器技术部署运维都非常简单&#xff0c;特别是对于wordpress这种我们无需做任何开发的组件。而出于低成本考虑&#xff0c;公有云都是一个最佳…

消息驱动 微服务器,消息驱动的微服务-Spring Cloud Stream整合RocketMQ

系列文章导航: Spring Cloud Alibaba微服务解决方案常用MQ产品的选择目前主流的MQ产品有kafka、RabbitMQ、ActiveMQ、RocketMQ等。在MQ选型时可以参照这篇文章选择合适的MQ产品。RocketMQ及控制台搭建RocketMQ的搭建可以参考这篇文章。RocketMQ控制台的搭建可以参考这篇文章。R…

低并发编程

大家好&#xff0c;我是闪客&#xff0c;感谢 写代码的篮球球痴 提供的平台让我在这里给大家介绍自己&#xff0c;这是我的公众号卡片。为了防止大家看到这里就点击了返回按钮&#xff0c;我先放一张图勾引一下您。这是我公众号做的第一张动图&#xff0c;好多读者当时说被这张…

Redhat的Linux产品版本AS/ES/WS的联系与区别

Redhat有两大Linux产品系列&#xff0c;其一是免费的Fedora Core系列主要用于桌面版本&#xff0c;提供了较多新特性的支持。另外一个产品系列是收费的Enterprise系列&#xff0c;这个系列分成&#xff1a;AS/ES/WS等分支&#xff0c;他们都是redhat企业级Linux&#xff0c;简称…