发明名称 一种基于AutoCAD的图框参数识别与图纸输出方法
摘要 本发明公开了一种基于AutoCAD的图框参数识别与图纸输出方法,实施步骤如下:打开AutoCAD读入其支持格式的待输出图纸文件的文件数据、获取用户设置的图框搜索选项、块表过滤、获取对象集合、图层过滤、遍历对象集合中的对象,根据其图框类型分别进行宽高比判断,如果宽高比判断满足要求,则将提取该对象的图框信息并保存,在得到所有图纸文件的图框信息以后,选择输出样式和输出设备,然后调用AutoCAD向指定的输出设备将将待输出的图框信息对应的图纸内容批量输出。本发明具有输出快捷高效、使用方便、可靠性好、通用性好、兼容性强、适用范围广的优点。
申请公布号 CN103793145B 申请公布日期 2016.09.07
申请号 CN201410059672.X 申请日期 2014.02.21
申请人 湖南省交通规划勘察设计院 发明人 贺耀北;彭立;李瑜;刘榕;王甜;罗强;刘拓
分类号 G06F3/0481(2013.01)I;G06F17/30(2006.01)I 主分类号 G06F3/0481(2013.01)I
代理机构 湖南兆弘专利事务所(普通合伙) 43008 代理人 赵洪;谭武艺
主权项 一种基于AutoCAD的图框参数识别与图纸输出方法,其特征在于实施步骤如下:1)打开AutoCAD读入其支持格式的待输出图纸文件的文件数据;2)获取用户设置的图框搜索选项,所述图框搜索选项包括搜索空间类型、图框类型、图层名称筛选条件、图块名称筛选条件、标准图框外框的矩形区域、标准图框内框的矩形区域,所述搜索空间类型包括模型空间块表记录和布局空间块表记录两种多选选项,所述图框类型包括图块、参照引用、多义线、直线四种图框类型多选选项;读入文件数据库,遍历文件数据库中的块表数据库,根据所述图框搜索选项中的搜索空间类型对块表数据库中的块表记录进行筛选过滤;3)针对通过筛选过滤后的块表记录,获取其中所述图框搜索选项中指定的图框类型对应的对象、单行文字、多行文字作为待处理的对象集合;4)判断所述图框搜索选项是否指定图层名称筛选条件,当指定图层名称筛选条件时,将所述对象集合中不符合图层名称筛选条件的对象删除,只保留符合图层名称筛选条件的对象;5)从所述对象集合中选择第一个对象作为当前对象;6)判断当前对象的类型,在当前对象的类型为图块、参照引用时,跳转步骤7);在当前对象的类型为多义线时,跳转步骤8);在当前对象的类型为直线时,筛选出对象集合中的所有水平线和竖直线,如果当前对象为对象集合中的所有水平线和竖直线中的一根,且由包含当前对象在内的一根水平线、一根竖直线构成一个矩形的相邻边,则将所述矩形作为当前对象对应的图框并跳转步骤8);否则跳转步骤10);7)判断所述图框搜索选项是否指定图块名称筛选条件,当指定图块名称筛选条件时,如果当前对象的名称不符合图块名称筛选条件,则过滤当前对象并跳转步骤10);否则跳转步骤8);8)获取当前对象对应的图框的外边界角点,所述外边界角点包括左下角点和右上角点,计算左下角点和右上角点形成坐标区域的宽高比,同时计算标准图框外框的宽高比,标准图框内框的宽高比;判断所述左下角点和右上角点形成坐标区域的宽高比是否满足式(1)~(4)中的任意一种;如果满足式(1),则判定所述外边界角点为满足要求的外框边界角点,设置旋转角度为0°、图框缩放比例如式(5)所示;如果满足式(2),则判定所述外边界角点为满足要求的外框边界角点,设置旋转角度为90°、图框缩放比例如式(6)所示;如果满足式(3),则判定所述外边界角点为满足要求的内框边界角点,设置旋转角度为0°、图框缩放比例如式(7)所示,并更新左下角点坐标如式(9)所示和右上角点坐标如式(10)所示;如果满足式(4),则判定所述外边界角点为满足要求的内框边界角点,设置旋转角度为90°、图框缩放比例如式(8)所示,并更新左下角点坐标如式(11)所示和右上角点坐标如式(12)所示;判断左下角点和右上角点形成坐标区域的宽高比是否满足指定要求,如果满足则跳转步骤9),否则跳转步骤10);<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><mfrac><mrow><mo>|</mo><mi>R</mi><mo>-</mo><mi>P</mi><mi>W</mi><mo>|</mo></mrow><mi>R</mi></mfrac><mo>&le;</mo><mi>E</mi><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>1</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000992174680000021.GIF" wi="1310" he="118" /></maths><maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><mfrac><mrow><mo>|</mo><mi>R</mi><mo>-</mo><mfrac><mn>1</mn><mrow><mi>P</mi><mi>W</mi></mrow></mfrac><mo>|</mo></mrow><mi>R</mi></mfrac><mo>&le;</mo><mi>E</mi><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>2</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000992174680000022.GIF" wi="1309" he="177" /></maths><maths num="0003" id="cmaths0003"><math><![CDATA[<mrow><mfrac><mrow><mo>|</mo><mi>R</mi><mo>-</mo><mi>P</mi><mi>N</mi><mo>|</mo></mrow><mi>R</mi></mfrac><mo>&le;</mo><mi>E</mi><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>3</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000992174680000023.GIF" wi="1310" he="119" /></maths><maths num="0004" id="cmaths0004"><math><![CDATA[<mrow><mfrac><mrow><mo>|</mo><mi>R</mi><mo>-</mo><mfrac><mn>1</mn><mrow><mi>P</mi><mi>N</mi></mrow></mfrac><mo>|</mo></mrow><mi>R</mi></mfrac><mo>&le;</mo><mi>E</mi><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>4</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000992174680000024.GIF" wi="1310" he="175" /></maths>式(1)~(4)中,R表示左下角点和右上角点形成坐标区域的宽高比,PW表示标准图框外框的宽高比,PN表示标准图框内框的宽高比,E表示预设的允许误差值;计算左下角点和右上角点形成坐标区域的宽高比R的计算表达式为:<maths num="0005" id="cmaths0005"><math><![CDATA[<mrow><mi>R</mi><mo>=</mo><mfrac><mrow><mo>|</mo><mi>J</mi><mn>2.</mn><mi>Y</mi><mo>-</mo><mi>J</mi><mn>1.</mn><mi>Y</mi><mo>|</mo></mrow><mrow><mo>|</mo><mi>J</mi><mn>2.</mn><mi>X</mi><mo>-</mo><mi>J</mi><mn>1.</mn><mi>X</mi><mo>|</mo></mrow></mfrac></mrow>]]></math><img file="FDA0000992174680000025.GIF" wi="382" he="126" /></maths>上式中,R表示左下角点和右上角点形成坐标区域的宽高比,J1.X表示左下角点J1的X坐标,J1.Y表示左下角点J1的Y坐标;J2.X表示右上角点J2的X坐标,J2.Y表示右上角点J2的Y坐标;标准图框外框的宽高比PW的计算表达式为:<maths num="0006" id="cmaths0006"><math><![CDATA[<mrow><mi>P</mi><mi>W</mi><mo>=</mo><mfrac><mrow><mo>|</mo><mi>W</mi><mi>K</mi><mn>2.</mn><mi>Y</mi><mo>-</mo><mi>W</mi><mi>K</mi><mn>1.</mn><mi>Y</mi><mo>|</mo></mrow><mrow><mo>|</mo><mi>W</mi><mi>K</mi><mn>2.</mn><mi>X</mi><mo>-</mo><mi>W</mi><mi>K</mi><mn>1.</mn><mi>X</mi><mo>|</mo></mrow></mfrac><mo>;</mo></mrow>]]></math><img file="FDA0000992174680000026.GIF" wi="550" he="128" /></maths>上式中,PW表示标准图框外框的宽高比,WK1.X表示标准图框外框左下角点WK1的X坐标,WK1.Y表示标准图框外框左下角点WK1的Y坐标;WK2.X表示标准图框外框右上角点WK2的X坐标,WK2.Y表示标准图框外框右上角点WK2的Y坐标;标准图框内框的宽高比PN的计算表达式为:<maths num="0007" id="cmaths0007"><math><![CDATA[<mrow><mi>P</mi><mi>N</mi><mo>=</mo><mfrac><mrow><mo>|</mo><mi>N</mi><mi>K</mi><mn>2.</mn><mi>Y</mi><mo>-</mo><mi>N</mi><mi>K</mi><mn>1.</mn><mi>Y</mi><mo>|</mo></mrow><mrow><mo>|</mo><mi>N</mi><mi>K</mi><mn>2.</mn><mi>X</mi><mo>-</mo><mi>N</mi><mi>K</mi><mn>1.</mn><mi>X</mi><mo>|</mo></mrow></mfrac></mrow>]]></math><img file="FDA0000992174680000027.GIF" wi="516" he="127" /></maths>上式中,PN表示标准图框内框的宽高比,NK1.X表示标准图框内框左下角点NK1的X坐标,NK1.Y表示标准图框内框左下角点NK1的Y坐标;NK2.X表示标准图框内框右上角点NK2的X坐标,NK2.Y表示标准图框内框右上角点NK2的Y坐标;<maths num="0008" id="cmaths0008"><math><![CDATA[<mrow><mi>S</mi><mi>c</mi><mi>a</mi><mi>l</mi><mi>e</mi><mo>=</mo><mfrac><mrow><mo>|</mo><mi>J</mi><mn>2.</mn><mi>X</mi><mo>-</mo><mi>J</mi><mn>1.</mn><mi>X</mi><mo>|</mo></mrow><mrow><mo>|</mo><mi>W</mi><mi>K</mi><mn>2.</mn><mi>X</mi><mo>-</mo><mi>W</mi><mi>K</mi><mn>1.</mn><mi>X</mi><mo>|</mo></mrow></mfrac><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>5</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000992174680000028.GIF" wi="1309" he="125" /></maths><maths num="0009" id="cmaths0009"><math><![CDATA[<mrow><mi>S</mi><mi>c</mi><mi>a</mi><mi>l</mi><mi>e</mi><mo>=</mo><mfrac><mrow><mo>|</mo><mi>J</mi><mn>2.</mn><mi>X</mi><mo>-</mo><mi>J</mi><mn>1.</mn><mi>X</mi><mo>|</mo></mrow><mrow><mo>|</mo><mi>W</mi><mi>K</mi><mn>2.</mn><mi>Y</mi><mo>-</mo><mi>W</mi><mi>K</mi><mn>1.</mn><mi>Y</mi><mo>|</mo></mrow></mfrac><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>6</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000992174680000031.GIF" wi="1309" he="129" /></maths><maths num="0010" id="cmaths0010"><math><![CDATA[<mrow><mi>S</mi><mi>c</mi><mi>a</mi><mi>l</mi><mi>e</mi><mo>=</mo><mfrac><mrow><mo>|</mo><mi>J</mi><mn>2.</mn><mi>X</mi><mo>-</mo><mi>J</mi><mn>1.</mn><mi>X</mi><mo>|</mo></mrow><mrow><mo>|</mo><mi>N</mi><mi>K</mi><mn>2.</mn><mi>X</mi><mo>-</mo><mi>N</mi><mi>K</mi><mn>1.</mn><mi>X</mi><mo>|</mo></mrow></mfrac><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>7</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000992174680000032.GIF" wi="1310" he="127" /></maths><maths num="0011" id="cmaths0011"><math><![CDATA[<mrow><mi>S</mi><mi>c</mi><mi>a</mi><mi>l</mi><mi>e</mi><mo>=</mo><mfrac><mrow><mo>|</mo><mi>J</mi><mn>2.</mn><mi>X</mi><mo>-</mo><mi>J</mi><mn>1.</mn><mi>X</mi><mo>|</mo></mrow><mrow><mo>|</mo><mi>N</mi><mi>K</mi><mn>2.</mn><mi>Y</mi><mo>-</mo><mi>N</mi><mi>K</mi><mn>1.</mn><mi>Y</mi><mo>|</mo></mrow></mfrac><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>8</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000992174680000033.GIF" wi="1310" he="127" /></maths><maths num="0012" id="cmaths0012"><math><![CDATA[<mrow><mfenced open = "{" close = ""><mtable><mtr><mtd><mrow><mi>J</mi><mn>1.</mn><mi>X</mi><mo>=</mo><mi>J</mi><mn>1.</mn><mi>X</mi><mo>-</mo><mi>S</mi><mi>c</mi><mi>a</mi><mi>l</mi><mi>e</mi><mo>&times;</mo><mi>H</mi><mn>1</mn></mrow></mtd></mtr><mtr><mtd><mrow><mi>J</mi><mn>1.</mn><mi>Y</mi><mo>=</mo><mi>J</mi><mn>1.</mn><mi>Y</mi><mo>-</mo><mi>S</mi><mi>c</mi><mi>a</mi><mi>l</mi><mi>e</mi><mo>&times;</mo><mi>V</mi><mn>1</mn></mrow></mtd></mtr></mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>9</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000992174680000034.GIF" wi="1310" he="142" /></maths><maths num="0013" id="cmaths0013"><math><![CDATA[<mrow><mfenced open = "{" close = ""><mtable><mtr><mtd><mrow><mi>J</mi><mn>2.</mn><mi>X</mi><mo>=</mo><mi>J</mi><mn>2.</mn><mi>X</mi><mo>+</mo><mi>S</mi><mi>c</mi><mi>a</mi><mi>l</mi><mi>e</mi><mo>&times;</mo><mi>H</mi><mn>2</mn></mrow></mtd></mtr><mtr><mtd><mrow><mi>J</mi><mn>2.</mn><mi>Y</mi><mo>=</mo><mi>J</mi><mn>2.</mn><mi>Y</mi><mo>+</mo><mi>S</mi><mi>c</mi><mi>a</mi><mi>l</mi><mi>e</mi><mo>&times;</mo><mi>V</mi><mn>2</mn></mrow></mtd></mtr></mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>10</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000992174680000035.GIF" wi="1334" he="143" /></maths><maths num="0014" id="cmaths0014"><math><![CDATA[<mrow><mfenced open = "{" close = ""><mtable><mtr><mtd><mrow><mi>J</mi><mn>1.</mn><mi>X</mi><mo>=</mo><mi>J</mi><mn>1.</mn><mi>X</mi><mo>-</mo><mi>S</mi><mi>c</mi><mi>a</mi><mi>l</mi><mi>e</mi><mo>&times;</mo><mi>V</mi><mn>2</mn></mrow></mtd></mtr><mtr><mtd><mrow><mi>J</mi><mn>1.</mn><mi>Y</mi><mo>=</mo><mi>J</mi><mn>1.</mn><mi>Y</mi><mo>-</mo><mi>S</mi><mi>c</mi><mi>a</mi><mi>l</mi><mi>e</mi><mo>&times;</mo><mi>H</mi><mn>1</mn></mrow></mtd></mtr></mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>11</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000992174680000036.GIF" wi="1333" he="150" /></maths><maths num="0015" id="cmaths0015"><math><![CDATA[<mrow><mfenced open = "{" close = ""><mtable><mtr><mtd><mrow><mi>J</mi><mn>2.</mn><mi>X</mi><mo>=</mo><mi>J</mi><mn>2.</mn><mi>X</mi><mo>+</mo><mi>S</mi><mi>c</mi><mi>a</mi><mi>l</mi><mi>e</mi><mo>&times;</mo><mi>V</mi><mn>1</mn></mrow></mtd></mtr><mtr><mtd><mrow><mi>J</mi><mn>2.</mn><mi>Y</mi><mo>=</mo><mi>J</mi><mn>2.</mn><mi>Y</mi><mo>+</mo><mi>S</mi><mi>c</mi><mi>a</mi><mi>l</mi><mi>e</mi><mo>&times;</mo><mi>H</mi><mn>2</mn></mrow></mtd></mtr></mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>12</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000992174680000037.GIF" wi="1334" he="143" /></maths>式(5)~(12)中,Scale表示图框缩放比例;J1.X表示左下角点的X坐标,J1.Y表示左下角点的Y坐标;J2.X表示右上角点的X坐标,J2.Y表示右上角点的Y坐标;NK1.X表示标准图框内框左下角点的X坐标,NK1.Y表示标准图框内框左下角点的Y坐标;NK2.X表示标准图框内框右上角点的X坐标,NK2.Y表示标准图框内框右上角点的Y坐标;WK1.X表示标准图框外框左下角点的X坐标,WK1.Y表示标准图框外框左下角点的Y坐标;WK2.X表示标准图框外框右上角点的X坐标,WK2.Y表示标准图框外框右上角点的Y坐标;H1表示标准图框的内框的左边、外框的左边之间水平距离,其表达式为H1=|NK1.X‑WK1.X|;H2表示标准图框的内框的右边、外框的右边之间水平距离,其表达式为H2=|WK2.X‑NK2.X|;V1表示标准图框的内框的底边、外框的底边之间竖直距离,其表达式为V1=|NK1.Y‑WK1.Y|;V2表示标准图框的内框的顶边、外框的顶边之间竖直距离,其表达式为V2=|WK2.Y‑NK2.Y|;9)将当前对象对应的图框信息与已保存的图框信息对比,如当前对象对应的图框信息尚未保存过,则保存当前对象对应的图框信息,所述图框信息包含当前对象的左下角点和右上角点的坐标、图框缩放比例、旋转角度;10)判断当前对象是否为对象集合中的最后一个对象,如果是则结束处理并跳转步骤11),否则从所述对象集合中选择下一个未处理的对象作为当前对象,跳转步骤6);11)首先读取所有已保存的图框信息,显示输出给用户供用户选择,然后将用户选择的图框信息作为待输出图框信息列表;12)调用AutoCAD的输出样式表,根据预先定义值自动指定AutoCAD中输出的设备、图幅尺寸和输出样式,通过AutoCAD向指定的设备发送输出指令,所述输出指令包括当前输出图框信息的图形文件名称、图形空间名称、图形边界、图框缩放比例、旋转角度、图幅尺寸、输出样式;13)通过所述指定的设备将待输出图框信息列表中的每个图框信息对应的图纸区域输出。
地址 410008 湖南省长沙市开福区芙蓉北路二段158号