1.计算机科学与技术专业的源码学生毕业后可以做什么
2.手把手带你学webpack(6)--source-map
3.opencascade环境配置教程|vs2019
4.虚幻5和虚幻4区别介绍
5.如何使Java窗体变成jpg格式的并进行保存
6.3D模型格式全解|含RVT、3DS、源码DWG、源码FBX、源码IFC、源码OSGB、源码initprops源码OBJ等70余种
计算机科学与技术专业的源码学生毕业后可以做什么
写给计算机专业的大学生!
首先说一说进入计算机专业的源码目的,我个人是源码因为十分喜欢IT业,很喜欢折腾电脑,源码所以在填报志愿是源码毫不犹豫的在报了的所有的学校都填写的计算机专业,梦想着进入计算机专业后能遇见很多高手,源码能交到几个知己,源码谁之进来后却大失所望。源码计算机专业的源码学生有很多以前对计算机不怎么了解,而且还有部分人进大学前连计算机摸都没摸过,对计算机很熟悉的很少,高手更是凤毛麟角,大多数人是服从了父母之命,显而易见,目前社会最热的行业是IT业,工资最高的也是IT业,抱着这个因素,大多数考生的父母都让自己的孩子进入了计算机专业,而大多数学生也天真的认为从计算机专业毕业后就能够像电视里演的大多数白领一样每天只用坐在办公室里和同事们聊聊天,和老板吃吃饭,每天签几个字然后就有高工资等着你去拿。
进校后他们发现其实他们在专业课方面什么都听不懂,自己也一点兴趣都没有,没有兴趣那就没有学习的动力,而且这个专业是要靠悟性的,而兴趣是培养悟性的第一步,然后他们会发现越往后学专业课越难,也越听不懂,好一点的就会狠下心来,硬着头皮苦学一通,有可能也就能走出一片路来,而不好的就会就此放弃,只需要混着考试通过,混毕业,找个单位安心上班。有些人上了几年学连自己上哪些课都不知道;拿个程序他分不清是用C语言写的还是用PASCAL写的;不小心进了DOS不知道怎么再回到WINDOWS。但说起游戏来头头是道,好像每个都是职业玩家一样,有的每天只知道泡在网吧。这就是中国计算机人才下一代的悲哀!
再说现在计算机专业大学生的学习和生活。大多数计算机专业的学生对本专业的发展及前景一无所知,每天都是看小说、玩游戏、看**、打牌、喝酒、睡觉等等很有"前途"的事情。偶尔看见一两个同学看看与计算机专业有关的书,跑去拿来一看,全是什么"游戏攻略"、"黑客秘技"等此类书籍。还有的人连C语言和C++谁是谁都还没搞清楚,就拿本VC的书"刻苦钻研",真不知他们看懂了没有。好多学生都买了电脑,但用处都是游戏机+碟机+音响,每天都在用电脑玩着各种流行的游戏、看着最新的大片、听着时尚的音乐,就是不用电脑学习。有的学生甚至问我电脑除了玩游戏还能干什么,我问他你为什么这么问,他告诉我他觉得电脑只能用来玩游戏,全国地图模型源码不知道还能不能干干别的什么。据我了解,近几年在国内好几所高校的计算机专业的毕业生的毕业设计竟然是做网页,在大学了四年,学完了《数据结构》、《软件工程》、《C语言》等专业课后,竟然交了一个没有学过计算机的人自学一两天就能做好的东西!
这就是大多数计算机专业的学生,在我在大学玩了两年之后,我突然明白该为自己的未来打算打算了,但还有许多人仍然还什么都不明白,所以就有了这篇文章。
如果你是以上我说的那种受父母之命来学计算机的学生,如果你看了《计算机应用文摘》第期的《写给想当程序员的朋友》一文后,发现自己没有当程序员的欲望,那么我这里有几条路给你选择:
1、**页制作,将来去网站工作!
2、学习3D MAX等软件,去作动画!
3、学习美术设计!
4、**络,将来考个CCNA,去专业组网!
5、在保证能顺利毕业的前提下,去疯狂玩游戏,做个职业玩家或做一个或几个网络游戏的GM。(我身边就有这样的人)
6、以上五条都与计算机有关,要有一定的专业知识,但比起你的专业课简单多了。如果你看到这里还不觉得有适合你干的,那这条最适合你:在你们学校去修双学位,修一个自己感兴趣的专业,计算机真的不适合你!
如果以上几条有适合你的,那么你就努力去做适合你的那一片天地,去看杂志的下一篇文章,下面的文字你看了只会浪费你的时间。
如果你是计算机专业的在校大学生,而且想当程序员,那么请往下看:
1、大学生活丰富多彩,会令你一生都难忘,但难忘有很多种,你可以学了很多东西而难忘,也会因为什么都没学到而难忘!
2、计算机专业是一个很枯燥的专业,但即来之、则安之,只要你努力学,也会发现其中的乐趣的。
3、记住:万丈高楼平地起!基础很重要,尤其是专业基础课,只有打好基础才能学得更深。
4、C语言是基础,很重要,如果你不学好C语言,那么什么高级语言你都学不好。
5、游戏搭建免费源码C语言与C++语言是两回事。就象大熊猫和小熊猫一样,只是名字很像!
6、请先学习专业课《数据结构》、《计算机组成原理》,不要刚开始就拿着一本VC在看,你连面向对象都搞不清楚,看VC没有任何用处。
7、对编程有一定的认识后,就可以学习C++了。(是C++而不是VC,这两个也是两码事!C++是一门语言,而VC教程则是讲解如何使用MFC类库,学习VC应建立在充分了解C++的基础之上。看VC的书,是学不了C++语言的。)
8、学习编程的秘诀是:编程,编程,再编程;
9、认真学习每一门专业课,那是你的吃饭碗。
、在学校的实验室就算你做错一万次程序都不会有人骂你,如果你在公司你试试看!所以多去实验室上机,现在错的多了,毕业后就错的少了。
、从现在开始,在写程序时就要养成良好的习惯。
、不要漏掉书中任何一个练习题--请全部做完并记录下解题思路。
、你会买好多参考书,那么请把书上的程序例子亲手输入到电脑上实践,即使配套光盘中有源代码。
、VC、C#、.NET这些东西都会过时,不会过时的是数据结构和优秀的算法!
、记住:书到用时方恨少。不要让这种事发生在你身上,在学校你有充足的时间和条件读书,多读书,如果有条件多读原版书,你要知道,当一个翻译者翻译一本书时,他会不知不觉把他的理念写进书中,那本书就会变得像鸡肋!
、我还是强调认真听专业课,因为有些课像《数据结构》、《编译原理》、《操作系统》等等,这种课老师讲一分钟能让你明白的内容,你自己看要看好几个月,有的甚至看了好几年都看不明白。
、抓住在学校里的各种实践的机会,要为自己积累经验,就业时经验比什么都有用。
、多去图书馆,每个学校的图书馆都有很多好书等你去看!
、编程不是趋势dk指标源码技术活,而是体力活。
、如果你决定了要当一个好的程序员,那么请你放弃游戏,除非你是那种每天只要玩游戏就能写出好程序的天才!
、你要有足够的韧性和毅力!有个高手出了一道题测试你的韧性和毅力:找个以内的素数表,把它们全都抄下来,然后再检查三遍,如果能够不间断地完成这一工作,你就可以满足这一条。
、找到只属于你自己的学习方法!不要盲目的追随别人的方法,适合自己的才是最好的!
、请热爱程序员这项工作!
以上的话有些是我的经验,有些是我从高手那里直接COPY来的,但他们都很有用,记住他们,并遵守他们,那你们一定会成功!
对于大多数初学者来说,好多人有这种问题存在:我到底先学什么?学C/C++?还是学VC?还是学Borland C++ Builder呢?还是Delphi?哪一个更好呢?学习程序设计和学习程序设计语言究竟是怎么一个关系?初学者究竟应该如何取舍呢?就这些问题,我从一个高手那里看了一下的这段话,可以帮助在这方面有问题的人:学习程序设计就好比学习射击,而程序设计语言就对应射击中的气枪、手枪、步枪等各种枪械。学习射击必须要选择一种枪械,不可能没有枪还能学好射击的,也不可能同时学会使用所有的枪械。但是,如果掌握一种枪械的射击,再学别的也就触类旁通了。因为在熟悉一种枪械的同时,也学习了射击技术本身。再学其他的,自然事半功倍。学习程序设计也是一样,必然要从学习一门程序设计语言开始入手。在学会系统的编程理念之后,用什么工具都一样!
之所以写这篇文章呢是因为自己眼看身边那么多的同学一个个都"不务正业",荒废了学业,心急如焚,自己也荒废了好几年,眼看微软的Windows从3.X到现在的 Server,而中国的软件业还是在原地踏步,难道我们真要每年等微软给他的操作系统换一次名字,我们给他交一次钱吗?这么大的利润为什么不留给我们自己,为什么不让别的国家给我们交钱呢?这是广大中国程序员的一个共同的梦,要实现这个梦的人是现在还在大学里的"准程序员"们,他们是中国软件明天的希望!希望广大计算机业的大学生看到这篇文章后,睡觉的能醒来,玩游戏的能停下来,在网吧的能出来,一起拿起课本,坐在电脑前,用程序写出中国软件业明天的辉煌。
手把手带你学webpack(6)--source-map
本篇文章对应源码:JvcicpO1xuXG4gIHRocmIG5ldyBFcnJvcignctZXRoaW5nIHdybnLi4uJyk7XGXG5cbm1vZHVsZS5leHBvcnRzID0geyBlcnJvckZuIHXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSbIjoiIn0=\n//#sourceURL=webpack-internal:///./src/utils.js\n");这种方式适用于在开发模式下需要精确的source-map时使用,相比直接的eval,会更加精确些
3.4inline-source-map顾名思义,就是以内联方式存放source-map文件,它会将source-map文件的内容编码成base后直接放在打包结果的最后
constHtmlWebpackPlugin=require('html-webpack-plugin');const{ CleanPlugin}=require('webpack');/***@type{ import('webpack').Configuration}*/module.exports={ mode:'development',devtool:'inline-source-map',plugins:[newHtmlWebpackPlugin(),newCleanPlugin()],};//#sourceMappingURL=data:application/json;charset=utf-8;base,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1COzs7Ozs7O1VDTm5CO1VBQ0E7O1VBRUE7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7O1VBRUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7Ozs7Ozs7OztBQ3RCQSxRQUFRLFVBQVUsRUFBRSxtQkFBTyxDQUFDLCtCQUFTOztBQUVyQyIsInNvdXJjZXMiOlsid2VicGFjazovLzA2X3dlYnBhY2tfccmNlXhcC8uL3NyYydGlscy5qcyIsIndlYnBhY2s6Ly8wNlZWJwYWNrX3NvdXJjZV9tYXAvd2VicGFjay9ibc3RyYXAiLCJ3ZWJwYWNrOi8vMDZfd2VicGFjazb3VyY2VfbWFwLy4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDbZWIjpbImZ1bmN0aW9uIGVycm9yRm4oKSB7XG4gIGNvbnNvbGUubG9nKCdoZWxsbyBlcnJvcicpO1xuXG4gIHRocmIG5ldyBFcnJvcignctZXRoaW5nIHdybnLi4uJyk7XGXG5cbm1vZHVsZS5leHBvcnRzID0geyBlcnJvckZuIHXG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXGYXIgXZWJwYWNrXvZHVsZV9jYWNoZV9fID0geXG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gXZWJwYWNrXvZHVsZV9jYWNoZV9fWvZHVsZUlkXTtcblWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaWbyB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlXbbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdHXG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFjatb2R1bGVzXbbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFjayZXF1aXJlXpO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiYuc3QgeyBlcnJvckZuIH0gPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbmVycm9yRm4oKTtcbiJdLCJuYW1lcyI6WsInNvdXJjZVJvb3QiOiIifQ==从官方文档可以看到,这种方式的小火箭网站源码构建速度是最慢的,只适用于构建单个文件的时候使用
3.5cheap-source-map这种方式相比source-map而言,没有建立列映射,也就是说遇到报错的时候,只会告诉你哪一行代码出错了,而不会告诉你哪一列出错了,如果开发时对列映射没有太高要求的话可以使用这种方式,毕竟不用生成列映射,比起source-map来说会快一些
constHtmlWebpackPlugin=require('html-webpack-plugin');const{ CleanPlugin}=require('webpack');/***@type{ import('webpack').Configuration}*/module.exports={ mode:'development',devtool:'cheap-source-map',plugins:[newHtmlWebpackPlugin(),newCleanPlugin()],};3.6cheap-module-source-map官方文档对这种方式的devtool并没有进行任何详细介绍,事实上这种方式适用于js代码被loader转换过的场景,比如被babel进行了转换,又比如源码是用typescript写的,后来经过loader转成了js代码,而我们又希望在运行的时候出现报错信息时能够对应回typescript代码像这种有loader对js进行转换的场景下,想要保证正确的source-map就需要使用到带有module的devtool了,因为除了cheap-module-source-map,还有很多别的方式也是有module的,只要是在官方文档中看到带有module的devtool都是具有这种特性
下面就以babel为例,我们通过babel-loader对js进行转换,然后看看能否正确对应到转换前的代码首先安装如下依赖
pnpmi@babel/core@babel-preset-envbabel-loader@babel/core是babel的核心,所有功能都要在这个包的基础上运行
@babel-preset-env让我们可以不需要考虑转换成什么版本的js,它会根据要适配的浏览器自动转换成能兼容相应浏览器的版本,这里我们使用它主要是能够将我们写的es6代码转成es5,从而让我们的源码和打包后的结果有差异,方便观察source-map是否生效
babel-loader,用于和webpack搭配使用,转换js文件
接下来配置loader
constHtmlWebpackPlugin=require('html-webpack-plugin');const{ CleanPlugin}=require('webpack');/***@type{ import('webpack').Configuration}*/module.exports={ mode:'development',devtool:'eval',//默认就是eval,因此development模式下不写devtool配置项也可以plugins:[newHtmlWebpackPlugin(),newCleanPlugin()],};0然后我们写一个具有es6特性的语法的函数
constHtmlWebpackPlugin=require('html-webpack-plugin');const{ CleanPlugin}=require('webpack');/***@type{ import('webpack').Configuration}*/module.exports={ mode:'development',devtool:'eval',//默认就是eval,因此development模式下不写devtool配置项也可以plugins:[newHtmlWebpackPlugin(),newCleanPlugin()],};1使用到了const、箭头函数,经过babel转换成es5后,代码的位置会和源码中不一样,那么在浏览器中如果仍然能够找到转换前的源码,则说明cheap-module-source-map生效了可以看到,在浏览器中确实能够看到转换前的源码,这就是cheap-module-source-map中module的作用,事实上官方文档中这么多的配置项我们不需要害怕,只需要知道每个关键字是什么意思,那么它们组合起来无非就是各种特性的叠加而已
3.7hidden-source-map也是一个见名知意的配置项,相比于source-map,就是将最后的//#sourceMappingURL=main.js.map这句注释删除了,这也就意味着source-map不会生效了,但是仍然会生成source-map文件的官方文档中给我们的建议是在只需要知道有错误出现时给我们在控制台输出出来的话就可以使用这种方式
3.8nosources-source-map这种方式能够在出现错误的时候告诉我们是源码中哪个文件第几行出错了,但是不会在浏览器中给我们生成源码
总结了解完以上这几个devtool配置项,就足够了,官网的个配置项就是根据eval、hidden、inline、cheap、module、nosources这几个关键字组合出来的
但是组合也是有规则的,官方文档中给出的规则如下:
[inline-|hidden-|eval-][nosources-][cheap-[module-]]source-map
原文:/post/opencascade环境配置教程|vs
配置环境
对OpenCASCADE的配置教程,旨在帮助用户快速上手,解决配置过程中的常见问题。本文将详细覆盖获取源代码、编译、链接操作,以及处理环境配置时可能遇到的常见问题。欢迎提出疑问,共同探讨。
### 什么是OpenCASCADE?
OpenCASCADE是一个专为几何计算设计的C++库,提供Python和C++两种使用方式。它广泛应用于CAD领域,支持建模、计算以及文件输入输出,常见格式为.BRep。与CGAL相比,虽然都是几何计算库,但应用领域不同,OpenCASCADE在CAD行业中的知名度更高。
### OpenCASCADE类的继承关系
OpenCASCADE的头文件结构复杂,主要分为三类:GP、Geom、TopoDS。GP类包含基本单位,如point和vector;Geom类提供几何构型;TopoDS类用于复杂几何构型。GP类通过GC方法与Geom类交互,Geom类与TopoDS类通过BRepBuilderAPI实现转换。TopoShape类是形状的基类,其子类包括vertex、Edge、Wire、mesh、Solid等。
### 下载源代码
从官方网站下载OpenCASCADE源代码,推荐选择源码版本,并确保下载第三方库时选择x位。具体操作指南可参考相关文档。
### Visual Studio环境配置
配置Visual Studio环境,解决编译和链接问题。编译将源代码转换为obj文件,而链接则将多个obj文件与库文件合并生成可执行文件。lib文件包含目标代码,dll文件包含函数实现,pdb文件用于调试。
#### 编译和链接
编译阶段处理源代码语法、引用头文件的错误;链接阶段关注库文件的设置,确保正确路径和版本匹配。
#### lib、dll、pdb文件关系
lib文件包含静态库代码,链接时直接并入;dll文件为动态库,包含函数实现;pdb文件用于调试时显示源代码信息。
#### 编译错误和链接错误
编译错误主要在语法、头文件引用上;链接错误涉及库文件缺失、版本不匹配等问题。解决方法包括配置依赖库路径、添加lib和dll文件路径。
### 链接错误解决步骤
配置依赖库路径、添加准确的lib库文件、在调试器工作环境添加dll和pdb文件路径。使用Far Manager工具查找未识别的符号,通过十六进制函数名手动在Visual Studio中添加库名。
### 个人简介
本文作者为深圳在读研究生,研究方向为BIM/CIM,旨在分享配置OpenCASCADE的学习过程及问题记录。
### 参考链接
提供详细的操作指南和文档链接,以便用户深入学习和实践。
虚幻5和虚幻4区别介绍
Cryengine 5由于其最新的功能更新,更逼真的画质使得它更适合专业的游戏开发者在创建VR游戏大作时使用,开发者可通过付费购买其高质量的素材来简化开发流程而Unreal Engine 4的适用范围更广,市面上关于它的资料也更多,开发;虚幻4的资源是可以导入虚幻5进行使用的将虚幻4的项目在没有打开的状态下,直接将uasset文件复制到项目Content目录下,打开工程就可以看到了新更新的虚幻5有两大核心技术Nanite虚拟微多边形几何体Lumen是一套全动态全局。
从技术角度来讲,虚幻5引擎提出的理念和方法,无疑对业界是有推动性,是有积极作用的,玩家和从业者能够从中汲取到,次世代 游戏 技术发展的一部分方向 同时,虚幻5引擎所打造的开发理念和开放性生态圈,也依旧保有巨大潜力,可以给广大开发;求y=ln+x的微分这道题答案为什么这样,不是1x吗 0回答 秒钟前 加工中心里面的“三轴”“五轴”“十五轴”是什么意思0回答 秒钟前 怎么背韩语单词比较高效0回答 秒钟前 求数学大神。
1虚幻引擎UnrealEngineUE是EpicGames公司打造的游戏引擎,而虚幻4也称为UE4是其第四个大版本2虽然目前UE5已经发布,但是仅仅是发布,UE4还是当前应用最广最稳定的虚幻引擎3UE4可以创建各种平台的游戏,包括PC。
Twinmotion基于UE4底层的Twinmotion在UE4的基础上,实现了实时性的可视化只要安装directlink插件,即可一键式同步RHINO,REVIT,SKETCHUP等模型还有BIM中的相关信息Twinmotion目前已经被EPIC公司收购,而UE4和UE5虚幻引擎4;区别一编程语言不同unity3D是一款综合开发平台,有比较强的文件兼容性,使用的是C#语言,引擎源代码不公开虚幻4使用的C++语言,能够进行游戏项目的独立开发,实时对游戏组件进行优化,达到“所见即所得”,引擎源代码开源。
虚幻引擎4是一种游戏引擎,是针对移动处理器开发的专用引擎,用来开发游戏虚幻引擎总是能赋予开发商更强的能力,所见即所得’的平台虚幻的编辑器简称为“UnrealEd”是一个以“所见即所得”为设计理念的操作工具它;演示机型Iphone 华为P小米 系统版本iOSEMUIMIUI APP版本unity虚幻4 1编程语言不同unity有比较强的文件兼容性,使用C#语言,引擎源代码不公开而虚幻4使用。
虚幻5是美国虚幻引擎5是EPIC于年公布的第五代游戏引擎该引擎在年5月日发布预览版预期在年年初发布完整版,大部分游戏都可以从虚幻引擎升级为虚幻引擎5,虚幻引擎5于北京时间年5月日晚点。
1剑灵虚幻4是两个游戏吗答案是八成是一个游戏2剑灵和虚幻4最大的区别只是为了改变游戏对配置的需求,其余不变3只是游戏画面重置而已,但是会先出一个先锋服水月版本的虚幻4,先让网友先行体验一番,仅此而已;毫不犹豫,Unity为啥,符合中国国情呗 国内开发者占Unity全球开发者的%的数字,说明了一些事情。
4UE5不同领域发展 还有一方面,现在虚幻引擎早已不止用来做游戏了,在企业的各个领域都在大展拳脚因此游戏开发中孕育而出的各种技术,是能反哺降临到别的领域再赋能加强的,从而成为基建设施般至关重要的生命技术后记;画面效果和人物技能不同1虚幻5在画面效果方面,免费的画面效果较差,而付费的画面效果更真实2虚幻5在人物技能方面,免费的人物技能值很少,并且杀伤力不大,而付费的人物技能值多,并且杀伤力可以达到免费的两倍。
3D虚幻比Unlty好倍,2DUnlty比虚幻好倍,就是这样,两个最有名最出色的引擎虚幻4unity3d也是软件,主要是用来做游戏的,里面包含了很多做游戏的引擎maya和max主要是做3d模型效果动画等的它们的用途是。
如何使Java窗体变成jpg格式的并进行保存
你好象是要用你自己的程序来实现截屏?我这儿有。
// private class Temp extends JPanel implements MouseListener,MouseMotionListener{
// private BufferedImage bi, bim;
// private int width,height;
// private int startX,startY,endX,endY,tempX,tempY;
// private JFrame jf;
// private Rectangle select=new Rectangle(0,0,0,0);//表示选中的区域
// private Cursor cs=new Cursor(Cursor.CROSSHAIR_CURSOR);//表示一般情况下的鼠标状态
// private States current=States.DEFAULT;// 表示当前的编辑状态
// private Rectangle[] rec;//表示八个编辑点的区域
// //下面四个常量,分别表示谁是被选中的那条线上的端点
// public static final int START_X=1;
// public static final int START_Y=2;
// public static final int END_X=3;
// public static final int END_Y=4;
// private int currentX,currentY;//当前被选中的X和Y,只有这两个需要改变
// private Point p=new Point();//当前鼠标移的地点
// private boolean showTip=true;//是否显示提示.如果鼠标左键一按,则提示不再显了
// public Temp(JFrame jf,BufferedImage bi,int width,int height){
// this.jf=jf;
// this.bi=bi;
// this.width=width;
// this.height=height;
// this.addMouseListener(this);
// this.addMouseMotionListener(this);
// initRecs();
// }
// public void setBi(BufferedImage bi){
// this.bi = bi;
// }
// private void initRecs(){
// rec=new Rectangle[8];
// for(int i=0;i<rec.length;i++){
// rec[i]=new Rectangle();
// }
// }
// @Override
// public void paintComponent(Graphics g){
// g.drawImage(bi,0,0,width,height,this);
// g.setColor(Color.RED);
// g.drawLine(startX,startY,endX,startY);
// g.drawLine(startX,endY,endX,endY);
// g.drawLine(startX,startY,startX,endY);
// g.drawLine(endX,startY,endX,endY);
// int x=startX<endX?startX:endX;
// int y=startY<endY?startY:endY;
// select=new Rectangle(x,y,Math.abs(endX-startX),Math.abs(endY-startY));
// g.setColor(new Color(0,0,0,));//最后一个是0透明色,不透明
// g.fillRect(x, y, Math.abs(endX-startX),Math.abs(endY-startY));
// int x1=(startX+endX)/2;
// int y1=(startY+endY)/2;
// g.setColor(Color.RED);
// g.fillRect(x1-2,startY-2,5,5);
// g.fillRect(x1-2,endY-2,5,5);
// g.fillRect(startX-2,y1-2,5,5);
// g.fillRect(endX-2,y1-2,5,5);
// g.fillRect(startX-2,startY-2,5,5);
// g.fillRect(startX-2,endY-2,5,5);
// g.fillRect(endX-2,startY-2,5,5);
// g.fillRect(endX-2,endY-2,5,5);
// rec[0]=new Rectangle(x-5,y-5,,);
// rec[1]=new Rectangle(x1-5,y-5,,);
// rec[2]=new Rectangle((startX>endX?startX:endX)-5,y-5,,);
// rec[3]=new Rectangle((startX>endX?startX:endX)-5,y1-5,,);
// rec[4]=new Rectangle((startX>endX?startX:endX)-5,(startY>endY?startY:endY)-5,,);
// rec[5]=new Rectangle(x1-5,(startY>endY?startY:endY)-5,,);
// rec[6]=new Rectangle(x-5,(startY>endY?startY:endY)-5,,);
// rec[7]=new Rectangle(x-5,y1-5,,);
// if(showTip){
// g.setColor(Color.CYAN);
// g.fillRect(p.x,p.y,,);
// g.setColor(Color.RED);
// g.drawRect(p.x,p.y,,);
// g.setColor(Color.BLACK);
// g.drawString("请按住鼠标左键不放选择截图区",p.x,p.y+);
// }
// }
// //根据东南西北等八个方向决定选中的要修改的X和Y的座标
// private void initSelect(States state){
// switch(state){
// case DEFAULT:
// currentX=0;
// currentY=0;
// break;
// case EAST:
// currentX=(endX>startX?END_X:START_X);
// currentY=0;
// break;
// case WEST:
// currentX=(endX>startX?START_X:END_X);
// currentY=0;
// break;
// case NORTH:
// currentX=0;
// currentY=(startY>endY?END_Y:START_Y);
// break;
// case SOUTH:
// currentX=0;
// currentY=(startY>endY?START_Y:END_Y);
// break;
// case NORTH_EAST:
// currentY=(startY>endY?END_Y:START_Y);
// currentX=(endX>startX?END_X:START_X);
// break;
// case NORTH_WEST:
// currentY=(startY>endY?END_Y:START_Y);
// currentX=(endX>startX?START_X:END_X);
// break;
// case SOUTH_EAST:
// currentY=(startY>endY?START_Y:END_Y);
// currentX=(endX>startX?END_X:START_X);
// break;
// case SOUTH_WEST:
// currentY=(startY>endY?START_Y:END_Y);
// currentX=(endX>startX?START_X:END_X);
// break;
// default:
// currentX=0;
// currentY=0;
// break;
// }
// }
// public void mouseMoved(MouseEvent me){
// doMouseMoved(me);
// initSelect(current);
// if(showTip){
// p=me.getPoint();
// repaint();
// }
// }
// //特意定义一个方法处理鼠标移动,是为了每次都能初始化一下所要选择的地区
// private void doMouseMoved(MouseEvent me){
// if(select.contains(me.getPoint())){
// this.setCursor(new Cursor(Cursor.MOVE_CURSOR));
// current=States.MOVE;
// } else{
// States[] st=States.values();
// for(int i=0;i<rec.length;i++){
// if(rec[i].contains(me.getPoint())){
// current=st[i];
// this.setCursor(st[i].getCursor());
// return;
// }
// }
// this.setCursor(cs);
// current=States.DEFAULT;
// }
// }
// public void mouseExited(MouseEvent me){
//
// }
// public void mouseEntered(MouseEvent me){
//
// }
// public void mouseDragged(MouseEvent me){
// int x=me.getX();
// int y=me.getY();
// if(current==States.MOVE){
// startX+=(x-tempX);
// startY+=(y-tempY);
// endX+=(x-tempX);
// endY+=(y-tempY);
// tempX=x;
// tempY=y;
// }else if(current==States.EAST||current==States.WEST){
// if(currentX==START_X){
// startX+=(x-tempX);
// tempX=x;
// }else{
// endX+=(x-tempX);
// tempX=x;
// }
// }else if(current==States.NORTH||current==States.SOUTH){
// if(currentY==START_Y){
// startY+=(y-tempY);
// tempY=y;
// }else{
// endY+=(y-tempY);
// tempY=y;
// }
// }else if(current==States.NORTH_EAST||current==States.NORTH_EAST||
// current==States.SOUTH_EAST||current==States.SOUTH_WEST){
// if(currentY==START_Y){
// startY+=(y-tempY);
// tempY=y;
// }else{
// endY+=(y-tempY);
// tempY=y;
// }
// if(currentX==START_X){
// startX+=(x-tempX);
// tempX=x;
// }else{
// endX+=(x-tempX);
// tempX=x;
// }
//
// }else{
// startX=tempX;
// startY=tempY;
// endX=me.getX();
// endY=me.getY();
// }
// this.repaint();
// }
// public void mousePressed(MouseEvent me){
// showTip=false;
// tempX=me.getX();
// tempY=me.getY();
// }
// public void mouseReleased(MouseEvent me){
// if(me.isPopupTrigger()){
// if(current==States.MOVE){
// showTip=true;
// p=me.getPoint();
// startX=0;
// startY=0;
// endX=0;
// endY=0;
// repaint();
// } else{
// jf.dispose();
// updates();
// }
// }
// }
// public void mouseClicked(MouseEvent me){
// if(me.getClickCount()==2){
// Point point = me.getPoint();
// if(select.contains( point )){
// if(select.x+select.width<this.getWidth()&&select.y+select.height<this.getHeight()){
// get=bi.getSubimage(select.x,select.y,select.width,select.height);
// jf.dispose();
// updates();
// }else{
// int wid=select.width,het=select.height;
// if(select.x+select.width>=this.getWidth()){
// wid=this.getWidth()-select.x;
// }
// if(select.y+select.height>=this.getHeight()){
// het=this.getHeight()-select.y;
// }
// get=bi.getSubimage(select.x,select.y,wid,het);
// jf.dispose();
// updates();
// }
// }
// try {
// UIManager.setLookAndFeel(mainView.getLookAndFeel());
// } catch (Exception ex) {
// boaotong.core.LogJT.LogMsg(ex.toString(), ex);
// }
// SwingUtilities.updateComponentTreeUI(jf);
// }
// }
// }
3D模型格式全解|含RVT、3DS、DWG、FBX、IFC、OSGB、OBJ等余种
本文整理自老子云平台公众号。老子云平台提供全行业+三维模型格式展示、转格式、轻量化服务。本文将对已开放的3D模型格式进行统一梳理说明。
以下是按照字母顺序排列的三维格式描述:
3dm:Rhino 3D Model文件,由Rhinoceros开发,用于保存二维和三维图形。
3ds:3D Studio场景文件,由Autodesk开发,用于3D建模、动画和渲染。
3dxml:Dassault Systemes的3D XML文件格式,由Dassault Systèmes开发,包含丰富的3D图像模型信息。
amrt:老子云自研的国产3D格式,由老子云开发,特点为存储体量小、加载速度快,支持多种三维格式转换为统一标准格式。
arc:Norton Backup Archive文件,由Symantec Corporation开发,可用CAD软件打开。
asm:Assembly Language Source Code File,由Microsoft Corporation开发,用于低级语言源代码。
catpart:CATIA V5 Part File,由Dassault Systèmes开发,用于3D部分文件存储。
catproduct:CATIA V5 Assembly File,由Dassault Systèmes开发,用于组件制造过程的3D装配文件。
cgr:CATIA Graphical Representation File,由Dassault Systèmes开发,用于CAD文件的可视化存储。
dae:Digital Asset Exchange File,由Sony开发,用于交互式3D应用程序的协作设计活动。
dlv:CATIA 4 Export File,由Dassault Systèmes开发,用于设计数据导出。
dwf:Autodesk Design Web Format File,由Autodesk开发,用于2D/3D图形文件格式,旨在丰富设计数据。
dwg:AutoCAD Drawing Database File,由Autodesk开发,用于AutoCAD中的二维或三维图数据库。
dxf:Drawing Exchange Format,由Autodesk开发,用于CAD矢量图像文件。
exp:CATIA 4 Export File,由Dassault Systèmes开发,用于设计数据导出。
fbx:ArcView Spatial Index File For Read-Only Datasets,由ESRI和Kaydara(Autodesk)开发,用于**界和视频游戏开发的流行专有文件格式。
glb:STK Globe File,由Analytical Graphics开发,与STK程序相关,用于3D模型的建模和任务。
gltf:GL Transmission Format File,由Trimble Inc.开发,用于3D数据保存在glTF(三维)模型文件。
iam:Inventor Assembly File,由Autodesk开发,用于3D CAD装配文件。
ifc:Industry Foundation Classes File,由buildingSMART开发,用于3D图形、CAD-CAM-CAE文件的开放文件格式。
ifczip:Industry Foundation Classes (zipped),由buildingSMART开发,IFC文件的压缩版本。
iges:IGES Exchange Format,由Redway3d和其他开发者开发,用于国际标准的3D线框模型交换。
igs:Initial Graphics Exchange Specification Drawing File,由美国空军开发,基于IGES的图形文件格式,用于保存2D和3D图形。
ipt:Inventor Part File,由Autodesk开发,用于Autodesk Inventor软件中的零件或物体。
jt:JT Open CAD File,由Siemens PLM Software开发,用于数据共享、产品协作和可视化的开放高性能存储格式。
mfl:ModFit LT Analysis Report File,由Verity Software House开发,用于MODFIT LT程序分析的DNA模式。
model:Dassault Systèmes开发的CATIA软件的3D建模格式。
neu:Pro/ENGINEER Neutral File,由Parametric Technology Corporation开发,用于Pro / ENGINEER程序创建的CAD文件。
obj:Wavefront 3D Object File,由Wavefront Technologies开发,用于通用的3D图像文件格式。
osgb:Open Scene Gragh Binary,由OpenSceneGraph开发,用于地图缓存文件和实景三维倾斜摄影模型。
par:Solid Edge Part File,由Siemens PLM Software开发,用于Solid Edge三维建模软件的文件。
pkg:Midtown Madness 3D Model,由Rockstar Games开发,用于游戏的3D模型和图形数据。
prc:Product Representation Compact File,由Adobe Systems Incorporated开发,用于表示三维模型和装配结构。
prt:Pro/ENGINEER Part File,由PTC开发,用于Pro / ENGINEER CAD程序的文件。
psm:Solid Edge Document Format,由Siemens PLM Software开发,用于Solid Edge创建的3D零件。
pts:PointCloud 3D File,由Exelis Inc.开发,用于点云三维数据。
ptx:PageMaker Template File,由Adobe Systems Incorporated开发,用于PageMaker的7.0模板。
pwd:Solid Edge Weldment Document,由Siemens PLM Software开发,用于三维CAD制造程序Solid Edge的CAD文件。
rvt:Revit Project File,由Autodesk开发,用于建筑信息模型(BIM)软件。
sab:ACIS SAB Model File,由Spatial Corp开发,用于ACIS建模软件的三维模型。
sat:ACIS SAT 3D Model File,与空间3D ACIS建模软件相关的CAD文件类型。
session:CATIA 4 Session File,由Dassault Systèmes开发,用于CATIA软件的会话文件。
sldasm:SolidWorks Assembly File,由Dassault Systèmes开发,用于SolidWorks 3D CAD软件的装配文件。
sldprt:SolidWorks CAD Part File,由Dassault Systèmes开发,用于SolidWorks的关联文件。
step:STEP 3D Model,用于3D模型文件的ISO格式,由未知开发者开发。
stl:Stereolithography File,用于保存标准形式的CAD文件,由3D Systems开发。
stp:STEP 3D CAD File,用于表示和工业产品数据交换的ISO标准,由未知开发者开发。
stpz:压缩的STEP文件。
u3d:Universal 3D File,由Universal 3D File开发的通用3D文件格式。
unv:I-DEAS Data File,由Siemens AG开发,用于Windows和Unix操作系统的数据保存。
vda:Targa Bitmap Image File,由Microsoft Corporation开发的Raster光栅图像文件。
vrml:Virtual Reality Modeling Language 3D World,由开源开发者开发的虚拟现实建模语言相关的3D世界文件。
wrl:VRML World,由未知开发者开发的虚拟现实建模语言创造的虚拟世界文件。
x_b:Parasolid Model (binary),由Siemens PLM Software开发的Parasolid 3D CAD应用程序。
x_t:Siemens PLM Software开发的与Parasolid软件相关的文件,用于存储几何形状、拓扑和彩色三维模型数据。
xas:PTC Pro/Engineer Assembly File,由Parametric Technology Corporation开发的用于Microsoft Windows平台的3D设计解决方案。
xmt:Binary Data,用于ug软件的三维格式。
xmt_bin:Parasolid 3D图像文件。
xmt_txt:Parasolid CAD Format,包含存储在简单的ASCII文本格式的文件。
xpr:Pro/ENGINEER Part Instance Accelerator File,由Parametric Technology Corporation开发的用于加速3D产品设计应用中零件加载的文件。
xyz:Cartesian Chemical Modeller Input,由Hypercube, Inc.开发的化学分子建模软件的文件扩展名。
以上格式的PDF文档可以免费在老子云平台公众号后台留言获取。
俄罗斯三维几何内核:C3D TOOLKIT 介绍
C3D工具包,作为构建几何模型、执行几何计算及在几何模型元素间创建连接的核心,支持第三方应用中几何模型的处理,将其几何图形导出至其他三维系统。在计算机辅助设计(CAD)、计算机辅助制造(CAM)、工程(CAE)及建筑信息建模(BIM)中,C3D工具包提供关键功能,描述几何对象的形状,维护模型元素间关系,记录模型构建历史,向几何模型元素添加属性。
该工具包集成CAD/CAM/CAE/BIM及类似三维软件开发的五个关键组件,包含动态链接库、完整源代码演示应用程序、技术文档及其他支持文件,与多种集成开发环境(IDE)兼容。
C3D工具包的主要特点与优势包括:提供全面集成解决方案,集几何建模内核、约束求解器、可视化引擎、多边形网格到B-rep转换器及数据交换模块于一体;提供完整API,独立实现新功能更新,避免产品版本间的不兼容;采用现代多线程架构,高效并行计算,确保对象线程安全;跨平台运行,支持Android、FreeBSD、iOS、MacOS X、Linux及Windows;提供灵活许可证管理,考虑客户商业模式,加速收入确认;直接从开发人员获取技术支持,无需通过多层服务台。