基于Auto LISP技术实现房屋面积计算的二次检核
2013-03-03陈荣谢光陈庆华徐拥国
陈荣,谢光,陈庆华,徐拥国
(浙江有色测绘院,浙江绍兴 312000)
基于Auto LISP技术实现房屋面积计算的二次检核
陈荣∗,谢光,陈庆华,徐拥国
(浙江有色测绘院,浙江绍兴 312000)
房产测量中房屋面积的手工计算,是房屋面积二次检核的一种有效手段,但也是较为繁重的一项工作。本文结合实例介绍在AutoCAD软件平台上,如何引入Auto LISP编程,简化手工计算,实现可视、快速的房屋面积二次检核的方法。
AutoLISP;房产测量;房屋面积;面积计算;二次检核
1 引 言
房屋面积作为房地产权属登记管理、开发交易等房地产活动紧密相关的基础性数据,其测算与检核都需要有效的方法与严格的程序把控。房屋面积的测算,由于其复杂性与风险性,原则上要求两套房产测绘软件独立计算保证数据成果的正确性。在实际操作中,利用AutoCAD软件进行房屋面积的手工计算,也是一种有效的检核手段。但此项工作较为繁重,由于AutoCAD软件原有的面积计算命令较为简单,这造成实际操作中很多不便,特别是一些墙体不规则、结构较复杂的房屋,如酒店、别墅、商住楼等,处理起来既费时又费力,也容易出错。
借助AutoCAD绘图软件的开放性平台,引入AutoLISP二次开发技术,可以使AutoCAD软件上房屋面积的手工计算二次检核工作变得可视化、简便化。利用AutoLISP编程,在AutoCAD软件上可实现上空部位面积的扣除、阳台半面积的计算、户室全面积的计算、外半墙面积的自动生成,最后整幢房屋面积的统计一系列二次检核工作。
2 实例及实现
2.1 基本框架和流程
本文结合浙江省绍兴市一个公寓式酒店房屋面积统计的实例,介绍房屋面积检核的这一程序的实现过程。
房屋面积的计算,一般在分层图上进行,房屋内有户室、阳台、上空部位等要素,CAD软件无法直接对这些面积进行分辨及计算,所以首先应该对这些面域按一定的规则进行属性的赋加;另外一般分层图绘制的是中轴图,分层图中每层的外半墙是不存在的,CAD软件无法直接计算,必须先判别出每层的外半墙。所以程序的思路是先解决这两步,然后完成每层房屋面积的计算和幢总面积的计算,最终完成房屋面积计算的二次检核工作。程序的基本框架和流程如图1所示。
图1 基本框架和流程
2.2 面域属性的输入
根据房屋面积计算的方式房屋面域一般分增加部分、扣除部分、减半部分三种,增加部分如户室、楼梯等,扣除部分如上空部位,减半部分如不封闭的阳台、无柱走廊等。子模块按此三种方式对房屋面域进行属性的赋加,使程序能通过相应的操作进行面积的分类计算。
在CAD软件中输入命令“fcmj”,就可以调用程序,按命令行的提示依次给分层图上所有面域进行属性的赋加,图上各面域自动按增加、扣除、减半三类完成面积的标注。实现界面如图2所示。
图2 面域属性输入界面
关键代码如下:
(setq pt(getpoint"\n选取中心点:"))
(setq xx 0 yy 0 zz 0 xyz 0 fabc 0)
(while pt
(setvar "cecolor""1")
(command"bpoly"pt"")
(setq en(entlast))
(if(/=en nil)
(progn
(command"area""o"en)
(setq aa(getvar"area"))
(redraw en 3)
(setq fwsx(getstring"\n输入属性(1)增加面积(2)减半面积(3)扣除面积<增加面积>:"))
(if(=fwsx"")(setq fwsx"1"))
(if(=fwsx"1")
(progn
(setq xx(+xx aa))
(setvar "cecolor""1")
(command"_Text""j""mc"pt 0.5 0(strcat" +"(rtos aa)))))
(if(=fwsx"2")
(progn
(setq yy(+yy(/aa 2)))
(setvar "cecolor""5")
(command"_Text""j""mc"pt 0.5 0 (strcat (rtos aa)"/2"))))
(if(=fwsx"3")
(progn
(setq zz(+zz aa))
(setvar "cecolor""3")
(command"_Text""j""mc"pt 0.5 0(strcat" -"(rtos aa)))))
2.3 外半墙面积的计算
多数情况下房屋外墙的厚度整体统一,房屋分层图中没有绘制外框线,这种情况下手工计算外半墙面积将是一项繁琐的工作,直接用CAD软件的“bhatch”命令无法完成外边线的绘制。在编程中我们用了" boundary"函数,实现了自动寻找每层房屋的外框封闭范围并完成外边线的绘制。
一般的房屋测量外半墙存在两种方式,一种是较常见的“外凸型”,另一种是回字形房屋的内部,我们称它为“内凹型”。外半墙线的绘制在CAD操作中,常用“offset”命令,但此命令无法自动判断是向外偏移还是向内偏移,这是编程的一个难点。在编程中我们用了"offsetdist"函数,再根据偏移面积的大小来辨别绘制的线是外凸型还是内凹型的外半墙线,较好解决了这一问题。在操作中只要选择外凸型或内凹型,选中外边线,并输入外半墙厚度,就可以实现本层外半墙线的绘制并自动完成外半墙面积的计算。
当本层所有面域都完成了属性配赋后,按程序提示进行房屋外半墙的绘制,完成后会自动添加青色的外半墙线,并计算外半墙面积,实现界面如图3所示。
图3 外半墙面积计算界面
关键代码如下:
(setq pt(getpoint"\n如房屋外墙中轴线未封闭请点击外侧..."))
(command"_.boundary""a""o""p"""pt"")
(setvar "cecolor""4")
(setq obj(entsel "\n选择房屋外墙中轴线:"))
(entdel(entlast)) (while obj
(setq fbxsx(getstring"\n输入外半墙属性(1)外凸型(2)内凹型<外凸型>:"))
(if(=fbxsx"")(setq fbxsx"1"))
(command"_.area""o"obj)
(setq faa(getvar"area"))
(setq cm(getvar"cmdecho")of 0.12) (if(null(setq nf(getdist(strcat"\n输入房屋半墙宽:<" (rtos of 2 2)">"))))
(setq nf of))
(setvar"cmdecho"0)
(setvar"offsetdist"nf)
(vl-load-com)
(setq obj(vlax-ename->vla-object(car obj)))
(vla-offset obj nf)
(setq en(entlast))
(command"_.area""o"en)
(setq fbb(getvar"area"))
(command"_.change"en"""p""c""4""lt""x6" "")
(if(>fbb faa)
(progn
(setq fab(-fbb faa))
(if(=fbxsx"2")(entdel en))))
(if(<fbb faa)
(progn
(setq fac(-faa fbb))
(if(=fbxsx"1")(entdel en))))
(vla-offset obj(∗nf-1))
(setq en(entlast))
2.4 房屋面积的检核
房屋面积的统计检核,一般要考虑每层房屋面积的统计,还有考虑整幢房屋面积的统计,有时为检查分析错误,也需要任意几个面域或几个层次的面积统计,这需要程序功能有这种开放性和灵活性。我们利用“ssget”选择所有的面域数据集,让程序自动分辨属于需统计的那些数值,筛选选择集中非房屋面域的数据,对赋加了属性的面域进行分类统计。程序运行后生成一个关于面积统计的信息框,包括增加面积的累计值、减半面积的累计值、扣除面积的累计值、外半墙的累计值,并自动完成房屋总面积的统计,如图4所示。
关键代码如下:
(princ"\n∗∗选择要统计的房屋面积数值∗∗") (setq ent(ssget))
(setq n(sslength ent))
(setq i0)
(initget5)
(repeat n
(setq x(ssname ent i))
(setq el(entget x))
(setq i(+1 i))
(setq txt(dxf 0 el))
(if(=txt"TEXT")
(progn
(setq txt(dxf 1 el))
(setq txtgs(strlen txt))
(if(=(substr txt1 1)"+")
(progn
(setq txt(substr txt 2))
(setq xx(+(atof txt)xx))))
(if(=(substr txt1 1)"-")
(progn
(setq txt(substr txt 2))
(setq zz(+zz(atof txt)))))
(if(=(substr txt(-txtgs 1))"/2")
(progn
(setq txt(substr txt 1(-txtgs 2)))
(setq yy(+(/(atof txt)2)yy))))
(if(=(substr txt 1 2)"外")
(progn
(setq txt(substr txt 3))
(setq fab(+(atof txt)fab)))))))
(setq xyz(-(+xx yy fab)zz))
图4 房屋面积统计界面
3 结 语
本程序通过实际应用,又通过与WalkFloor房屋面积计算分摊系统、手工统计的计算成果相比较,计算值完全一致。
房屋面域属性的赋加、外半墙面积的计算以及面积统计命令的使用,三个步骤便能轻松完成房屋面积的自动统计实现房屋面积的二次检核。三个部分既组成整体,又相互独立,既可单独计算一个户室的套内面积,也可检核整幢房屋的总面积,这种独立性使程序在涉及面积统计的其他领域也可适用,如土地分类面积的统计、竣工测量中房屋建筑占地面积和绿化面积的自动统计。可以看到的是,利用AutoLISP的二次开发技术,使房屋面积的手工统计检核工作从繁重中解放出来。
[1] GB/T 17986-2000.房产测量规范[S].
[2] 刘武.房地产测绘成果质量检查的实践[J].测绘通报,2004(4).
[3] 龚子桢,花向红,徐秀川等.在CAD平台下实现房屋属性自动修改的方法[J].测绘通报,2011(9).
[4] 赵文峰.利用AUTOLISP编程进行房产图尺寸标注[J].测绘工程,2006(2).
[5] 汤峻.AutoCAD 2000高级应用与Visual AutoLISP开发[M].北京:人民邮电出版社,2001.
Second Check of Calculation of Property Area by Auto LISP
Chen Rong,Xie Guang,Chen Qinghua,Xu Yongguo
(Zhejiang Colored Surveying and Mapping Institute,Shaoxing 312000,China)
Manual computation is an effectivemeasure for double-checking floor space in house property surveying,but also a heavy one.This paper demonstrates the way to simplify themanual computation by introducing Auto LISP on the AutoCAD platform along with some examples,so as to rapidly double-check floor space and visualize the process at the same time.
AutoLISP;house property surveying;floor space;house size;double check
1672-8262(2013)02-136-04
P209
B
2012—07—23
陈荣(1971—),男,工程师,主要从事房产测绘和工程测量等技术工作。