使用Teigha(OpenDesign)操作CAD的dwg文件

说起来,其实我自己也感觉这个要求挺奇怪的,Java操作CAD,好吧,目前比较完善的类库有一个是jdwglib,但是我没找到,而且公司刚好有OpenDesign的账号,因此,需要使用Teigha来进行操作,这期间遇到了相当的问题,我在这里把他们进行一些总结。

0x01 首先要有一个Teigha

从openDesign的首页就可以看到一个FreeTrial的链接,似乎是试用版,我把它down了下来(这个是要登录才可以下载的),要选择Java版,我的系统是64位的,估计多数新的pc都是64位,因此应该使用amd64版本。

接下来就是使用了,通过system.loadLibrary加载本地的动态库,然后就可以像使用其他Java类库一样使用这些关于CAD的api了。

System.loadLibrary("TeighaJavaCore");
System.loadLibrary("TeighaJavaDwg");

然后呢?这就是第一个问题了,我们会得到一个本地库的link异常,Windows下会告诉你找不到依赖库,mac下的提示信息会说找不到一个tx文件。这是由于下载的动态库不完整的原因,有一个位置是只有登录之后才可以找到的,在这个位置可以选择各种版本以及对应的操作系统,Java版需要kernel和drawing的支持,这一点是在我们下载之前的那个页面,有一个结构图上面可以看出。
Teigha的结构图
就像这样。

好了,找到了OpenDesign的会员中心,下载了相应的文件,然后再次运行,OK,依然找不到依赖库。我们应该把这些依赖库放到哪里他才能找到呢?这个和系统有关。

Windows系统放到环境变量PATH就可以了,Linux是LD_LIBRARY_PATH,至于mac,我忘了。不过有一个地方不管那个系统都能找到,就是工程的根目录,和src文件夹平级的那个,如果不怕文件多的话直接放到那里也是可以的。

到此为止,Teigha已经可以正常加载了。

0x02 然后JVM就crash了

就是这么神奇。Teigha有两个初始化方法,一个会报Error,另一个直接Crash,解决也很好解决,激活他,就会生成一个激活的java类,立即就可以解决这个问题。

我们只需要继承他的RxSystemServicesImpl这个类,然后在类的构造方法调用Global的激活方法,传入激活类的两个字段,然后通过这个新类初始化,就不会有任何问题。

0x03 那么多ERROR啊

在操作CAD文件的时候,我们会发现,这个鬼API写的简直了,就像是从其他语言生搬硬套过来的一样,按照官方给出的demo,很快我就读了一个CAD文件,结果发现,似乎只要修改他的内容就会出现OdError,这些异常都只有一个ERROR,没有任何原因的那种,呵呵呵呵。

这个时候我重新翻了下例子,才发现在safeOpenObject的时候有一个OpenMode,这个东西是什么呢?就是读取这个对象的时候,你读取的目的,把他写为write才可以set。
之前是这样读文件的,但是这样如果set的话就会有ERROR

// 读取文件
OdDbDatabase db = appServices.readFile("C:\\Users\\123\\Downloads\\architectural_example-imperial.dwg");
OdDbLayerTable layers = OdDbLayerTable.cast(db.getLayerTableId().safeOpenObject());

这样就可以了:

// 读取文件
OdDbDatabase db = appServices.readFile("C:\\Users\\123\\Downloads\\architectural_example-imperial.dwg");
OdDbLayerTable layers = OdDbLayerTable.cast(db.getLayerTableId().safeOpenObject(OpenMode.kForWrite));

OK,都做到这一步了,下面就应该去写文件了,OdDbDataBase类本身就含有写文件的方法:writeFile这个方法有一些重载,我在这里使用的是这个:

public void writeFile(String fileName, SaveType type, DwgVersion version);

分别是文件的路径(含文件名),文件类型(当然是dwg了),版本。
OdDbDataBase类本身含有一个version方法,可以返回当前版本,但是注意,你如果需要使用AutoCAD查看,而文件本身版本比较高,就需要你自己设置了。首先打印出version方法的版本,然后在DwgVersion枚举里面选一个比他低一些的版本就行,执行完毕,就可以看到在指定位置输出的新文件了。

附录

之前提到的几个Teigha的网站地址:

OpenDesign的Teigha的Java文档
OpenDesign的会员中心,下载支持库的位置,需要注册才进得去
OpenDesign库的激活地址

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

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

相关文章

免费的绘图和图表工具Tldraw

什么是 Tldraw ? Tldraw 是一款免费的绘图和图表工具,具有手绘风格和智能箭头、捕捉和便签等便捷功能。并可以导出 svg 等图片格式,可以作为组件嵌入到其他应用中。比如号称下一代笔记的 AFFiNE 就用了 Tldraw 来完成白板协同功能。 官方有演…

产品经理面试指南,常见面试题及回答思路

产品经理面试指南,常见面试题及回答思路 一、项目 自我介绍,这个不用说是所有面试都要的 2-3分钟之内介绍完,不要过于冗余或者简短,不要把重点放在个人生活,要突出和工作有关的项目、做事能力、性格等等,当…

产品经理面试,说一下你是怎么做产品规划的?

阅读本文大概需要1分12秒 “你做为产品经理或产品线负责人, 是如何规划未来 3-6 个月的产品发展计划?” 有的说是产品总监规划,自己不参与;(那麻烦问问你总监要不要过来) 有的说看业务部或公司战略规划&…

如何回答「为什么想做产品经理」【面试核心问题3】

当问出“为什么想做产品经理/为什么转行做产品经理”时,面试官的动机,是想知道:我为什么要录用你做产品经理 今日问题:为什么想做产品经理 面试时很多问题是相通的: 为什么想做产品经理为什么你适合做产品经理你做产品…

常见B端产品经理面试问题及答案(一)

↑↑↑我会一直给你分享B端产品经理面试问题及答案,请点击上方关注! 你好,我是B端产品经理面试官Aadi,任职某大厂,11年面试官,10年产品经理, 我是站在面试官角度,只告诉你拿来即用的…

产品经理笔试面试准备

产品经理聊面试:http://m.ximalaya.com/album/18917184 1、解释以下名词: 蝴蝶效应:初始条件十分微小的变化,结果不断放大,对未来状态可能造成巨大的差异。破窗效应:如果一个窗子破了,但不及时…

Alpha-GO打败⼈类的秘籍- 强化学习(Reinforcement Learning)

为了深⼊理解强化学习(Reinforcement Learning,简称RL)这⼀核⼼概念,我们从⼀个⽇常游戏的例⼦出发。在“贪吃蛇”这个经典游戏中,玩家需要掌控⼀条蛇,引导它吞吃屏幕上出现的各种果实。每次成功捕获果实&a…

关于云计算,我们问了ChatGPT 10个问题

ChatGPT懂云计算吗? 前些天,我们问了ChatGPT(非Plus收费版)一些问题。 1. 什么是云计算? 2. 云计算行业的护城河是什么? 3. 什么是云原生? 4. 微软Azure与亚马逊AWS的主要区别是什么&#xff1f…

TeeChart Pro ActiveX 2023.3.20 Crack

TeeChart Pro ActiveX 图表组件库提供数百种 2D 和 3D 图形样式、56 种数学和统计函数供您选择,以及无限数量的轴和 14 个工具箱组件。图表控件可以有效地用于创建多任务仪表板。 插件的多功能性 ActiveX 图表控件作为服务器端库中的 Web 图表、脚本化 ASP 图表或桌…

TeeChart 商业版 [2022.4.8] TeeChart.NET 专业版

TeeChart 商业版 多功能原生 .NET 图表和仪表控制 TeeChart NET 标准商业版是一个基于 Nuget 的图表控件,旨在为您的 NET 应用程序提供即时图表和仪表功能。TeeChart 拥有一系列有用的图表类型、统计功能和开发工具,是一个出色的图表库,可满…

博科Brocade 300光纤交换机配置zone教程

博科Brocade 300光纤交换机配置zone教程 光纤交换机作为SAN网络的重要组成部分,在日常应用中非常普遍,本次将以常用的博科交换机介绍基本的配置方法。 博科300实物图: 环境描述: 如上图,四台服务器通过各自的双HBA卡…

博科Brocads SAN交换机常用命令

文章目录 1、查看IP地址命令:2、查看firmware版本:3、查看交换机状态:4、查看交换机license-id:5、配置ZONE:6、查看zone配置文件:7、查看ZONE:8、查看系统日志信息:9、关机&#xf…

博科交换机建立Zone基本配置

背景信息 对于光纤交换机,目前应用比较广泛的有Brocade、Cisco 和QLogic。下面以Brocade交换机为例,对其配置进行详细的介绍。 基本步骤流程 操作步骤 使用浏览器方式登录Brocade交换机。(博科默认登录地址是:10.77.77.77) 在浏览器中输入Bro…

Brocade博科交换机按需端口概述

随着需求的增加,您可以通过购买和安装可选的按需端口许可产品来激活未许可的端口,最高可达设备受限的最大值。 下表中的博科型号可以在标明许可端口数量的情况下购买。 按需端口 按平台划分的许可端口计数 平台描述博科G610可通过 8、16 或 24 个许可…

博科园APP新版1.600.888来啦(附测评)

vivo手机实验室各方面测试100%通过 各方面体验和性能优于以前的版本 欢迎大家下载或升级到新版体验啦 与上一个版本1.600.068相比 新版本主要是性能优化和已知bug修复 使用体验和流畅度方面都有提升 同时也期待大家的【满星好评】哦 博科园APP(手机…

Brocade博科license最新兑换流程

最新版本license key,和之前license key不同,目前官方最新提供的license key如图下为例: 兑换流程 第一:需要获取光模块盒子上面序列号和光模块sn(8个随便一个光模块sn都行) 第二:进入博科官网…

vivo是安卓手机吗_你是vivo手机吗?我们博科园app上架啦!快来安装吧

博科园app-科学圈 我们的科学App:博科园 下图为vivo手机应用商店截图 支持安卓和iOS双系统 记得下载安装应用后,还望各位童鞋们能给个5星好评,同时也希望帮忙宣传分享一下,我们专注于科学(科学、科技、科研、科普)谢谢♪(^∇^*) 其…

chatgpt赋能python:PythonSearchGroup-Python搜索小组

Python Search Group - Python搜索小组 如果你是一个Python程序员,或者对Python编程语言感兴趣,那么你一定听说过Python Search Group。Python Search Group是一个专注于Python搜索和搜索引擎的小组,他们致力于提供高效的Python搜索工具和搜…

ChatGPT重塑Windows!微软王炸更新:操作系统全面接入,Bing也能用插件了

金磊 丰色 西风 发自 凹非寺量子位 | 公众号 QbitAI 一夜之间,微软彻底重新定义了PC交互。 因为这一次,它把Bing和ChatGPT插件的能力,注入到了整个Windows系统! 这就是在刚刚结束的Build 2023中,微软重磅推出的Windows…

创业大赛,助力AI创业团队加速发展

AI产业投资人认为,参加AI大模型大赛的企业,无论是大厂还是创业团队,在技术、资本和产品等方面都面临全方位的竞争。特别对于创业团队而言,早期的问题是缺乏资金和技术支持,这让很多创业团队犹豫不决。 大型模型的研发…