分类筛选
分类筛选:

关于激光切割论文范文资料 与激光切割编程连通性检查问题分析有关论文参考文献

版权:原创标记原创 主题:激光切割范文 科目:发表论文 2024-04-15

《激光切割编程连通性检查问题分析》:本论文主要论述了激光切割论文范文相关的参考文献,对您的论文写作有参考作用。

摘 要:激光切割程序需要将二维图形进行一系列处理后导入到专用的软件中进行编制,图形中的外缘、终孔、视口等部位的轮廓必须是封闭的,才能被激光程序识別.然而,大多数尺寸大、曲度大、形状复杂的零件,其二维图通常都含有许多肉眼难以发现的不连通位置.这些位置肉眼难以发现,而此前业内使用的一种图形处理程序SYLBDxfProcess实用性较差,性能和实际需求相差甚远.文章将探讨在AutoCAD工作环境下,激光切割图形连通性的检查方法,以期为该工作提供高效的解决方案.

关键词:激光切割;图形处理;连通性;封闭性;ObjectARX;二次开发

中图分类号:TG485 文献标志码:A 文章编号:2095-2945(2017)33-0079-02

引言

进行激光切割,需要将二维图形导入到专用软件中生成切割程序.对于零件轮廓、通孔、视口等区域需要保证其图形在激光编程程序中是连通(轮廓封闭)的,否则切割机和相关软件无法识别.然而,大多数壁板、框等尺寸大、曲度大、形状复杂的零件,其二维图形中的倾斜边、圆角、曲线结构等位置的图形质量通常都不好,含有许多肉眼难以发现的不连通位置,如断开、交叠、多余线条和端头错位等.这些图形缺陷肉眼难以发现,人工处理几乎不可能;而此前业内使用的SYLBDxfProcess每次只能检查一个链,而且运行极慢,检查结果也不可靠,对解决问题助益甚微.本文将探讨激光切割图形连通性问题及检查算法,以及如何在基于ObjectARX(VC)开发的程序中实现.该方法可以一键式地找出上述图形缺陷的精确位置,将为设计人员提供极大方便,同时也极大保证了工作质量.

1 连通性检查问题描述

用于编制激光切割程序的二维图形中所有的轮廓,包括外缘、视口、各种孔等,必须是连通的才能被识别.在投影图形质量不佳的情况下,很多肉眼看起来连通的轮廓实际上被系统认为是开放的.放大图形后可知,这是由于线和线的连接处存在着尺度极小的断开、重叠、毛刺等.如图1.

2 算法分析

图元的拓扑关系判定需要考虑一个因素——公差.假设约定的公差值为geTol(长度变量单位默认为mm,下同),则两点距离小于geTol时,认为两点重合.这个值应根据所选用的设备、设备的配套软件设置和使用的CAD软件设置来确定.

在激光切割图形中,允许存在的图元包括且限于直线、圆弧和圆.由于圆自封闭,不需要判断连通性,故只需检查直线和圆弧(以下简称曲线).当曲线pCurve1的某一端点和曲线pCurve2的某一端点重合时,称两曲线邻接.

在一组曲线中,如果每条曲线都和其他至少1条曲线邻接,称这组曲线为一个链;如果一个链中每条曲线的每个端点最多只和其他一条曲线邻接,则称这个链为一个单链.如果一个单链首尾相接,则称该链连通.激光切割图形中的轮廓最终应达到这种状态(由于激光切割图形的特性,此处不考虑诸如8字形之类的曲线相交情形).于是可根据以上条件设计出检查连通性的算法:(1)获得所有图形元素,分解其中的组合元素.(2)将所有元素分成若干个链.(3)对于每个链,获取一个元素,递归检查和之邻接的元素,以确定是否为连通链.(4)重复2、3步骤,检查所有链.(5)在用户界面突出显示连通的链.

3 算法的实现

考虑到业内普遍的工作方式,本文选择在AutoCAD平台上实现上述算法.由于基于VC++的ObjectARX程序运行效率最高,拥有和AutoCAD自身几乎相同的编程接口和控制能力[1],故使用ObjectARX(VC)2007开发,编译环境是Visual Studio 2005.和AutoCAD自身的功能一样,该连通性检查功能通过命令调用.如图2.

部分代码如下:

static void NITemplateAssistAutomaticChain(void)

{

std::list chainList;

std::list::iterator iter;

AcDbObjectIdArray entIds 等于 GlobalFunction::GetAllEntityIds();

if (entIds.isEmpty())

{

acutPrintf(_T("\nThere"s no entity in this drawing!"));

return;

}

// Divide entities into several chains

TopologicalFunction::DivideIntoGroups(entIds,chainList,1);

// For each chain, check its closure and mark the ents

int count 等于 0;

for (iter等于chainList.begin();iter!等于chainList.end();iter++)

{

AcGePoint3dArray points;

if (TopologicalFunction::IsClosed(*iter,points))

{

GlobalFunction::MarkEnt(*iter);

count++;

}

}

acutPrintf(_T("\n%d loops are found."),count);

激光切割论文参考资料:

激光杂志

结论:激光切割编程连通性检查问题分析为适合激光切割论文写作的大学硕士及相关本科毕业论文,相关钢板激光切割价格开题报告范文和学术职称论文参考文献下载。

和你相关的