黄林冯耀能(四川天辰空间信息技术有限公司,四川成都610081)
【摘要】根据城市部件普查工作内容和特点,在AutoCAD平台环境下利用VBA二次开发,批量进行测量坐标展点、块属性赋值可以提高内业作业效率和正确率。
【关键词】AutoCAD;二次开发;VBA块属性
随着数字城市建设的不断加快,城市信息数字化的要求不断提高。数字城管作为数字城市建设的一部分,其中的城市部件普查便是重中之重,是数字城管的基础数据,其主要任务是对城市部件进行普查上图,基础数据普查对象主要包括:城市管理部件、兴趣点、标志物。获得它们的平面位置、状态、现势性等属性信息。成都市城市部件被分为7大类,包括公用设施类、道路交通类、市容环境类、园林绿化类、房屋土地类、其它设施类及扩展部件类。在大类的基础上又具体分成约117小类。
采用常规方法测量,外业测量完成后进行展点、绘图、部件块属性赋值不仅工作量大、效率低,而且容易出错。针对以上原因,结合每个具体的城市部件,其归类和属性值具有唯一性的特点,在AutoCAD下利用VBA二次开发的方法,批量进行块属性赋值、按测量坐标展点,大大提高内业作业效率和准确率。
编程的基本思路是:
定义外业测量名称简码、属性简码→根据测量坐标展点→根据简码选择对应的块并赋属性值。
1外业测量简码定义
外业测量简码编码规则如下:
a)名称:城市部件按名称汉语拼音首字母进行编码,占用两个字节。少数重复另行编码。为了便于区别和记忆,所有的井盖编码在外业测量时均为一位由内业程序转化为两位,其它部件名称直接为两位编码。
b)材质:城市部件的材质属性在原作业规范共有20种,但对于具体的每一类部件只有2~4个属性值可供选择,为了便于记忆,故外业编码只取1~4这4个数字中的一个。对于不需标注材质的属性的部件,外业数据采集时录入0。
c)状态:即部件的使用状态,共有4个属性值:W-完好、P-破损、D-丢失、Z-占用。若完好外业数据采集时可省略。
d)现势性:即部件是否在用,共有2个属性值:Y-在用、F-作废。
外业测量简码识别和转换的程序如下:
DimCode0AsString'外业测量简码
DimNameAsString'部件名称
DimMaterialAsString'材质属性
DimConditionAsString'状态属性
DimUse_or_notAsString'现势性属性
DimiAsInteger
DimpAsString
Code0=Cass_Name
'------------定位材质属性位置并存储--------
Fori=1To5
Ifi<=Len(Code0)Then
Material=Mid(Code0,i,1)
IfAsc(Material)<=57AndAsc(Material)>=48Then
ExitFor
EndIf
Else
MsgBox"材质属性错误!",vbOKOnly,"注意"
ExitFor
EndIf
Nexti
'------------------------------------------------------------
Name=Mid(Code0,1,i-1)
IfLen(Name)=1ThenName="#"&Name'若名称简码为一位则在其前面加“#”补齐
'-----------------存储现势和状态属性------------
Ifi=Len(Code0)Then
Condition="W"
Use_or_not="Y"
EndIf
Ifi=Len(Code0)-1Then
p=Right(Code0)
Ifp="Y"Orp="F"Then
Condition="W"
Use_or_not=p
Else
Condition=p
Use_or_not="Y"
EndIf
EndIf
Ifi=Len(Code0)-2Then
Condition=Mid(Code0,i+1,1)
Use_or_not=Right(Code0,1)
EndIf
2展点程序
外业测量数据格式采用南方CASS软件格式,即:点号,简码,Y,X,H。
其对应的展点程序:
DimCass_xyh(2)AsDouble'存储坐标
CommonDialog1.Flags=cdlOFNHideReadOnly
CommonDialog1.DialogTitle="打开CASS(*.dat)数据格式文件"
CommonDialog1.Filter="数据文件(*.dat)|*.DAT|文本文件(*.txt)|*.TXT|所有文件(*.*)|*.*"
CommonDialog1.FilterIndex=1
CommonDialog1.FileName=""
CommonDialog1.ShowOpen
My_filename=Me.CommonDialog1.FileName
IfMy_filename=""ThenExitSub
……
OpenMy_filenameForInputAs#1'打开文件
Link_Num=-1
NumberOfElements=-1
OnErrorResumeNext'错误继续执行
DoUntilEOF(1)'文件读取循环
Input#1,Cass_Num,Cass_Name,Cass_xyh(0),Cass_xyh(1),Cass_xyh(2)'CASS软件DAT格式
3.属性值赋值
SelectCaseName
Case"#S"
newBlock"101"
newLayer"101"
……
EndSelect
SetBlockRefObj=ThisDrawing.ModelSpace.InsertBlock(Cass_xyh,"101",1,1,1,0)
attr3=BlockRefObj.GetAttributes'获取块属性
‘---------------------------------------------
SelectCaseMaterial
Case"1"
attr3(0).TextString="1-铸铁"
Case"2"
attr3(0).TextString="2-混凝土"
Case"3"
attr3(0).TextString="3-复合材料"
EndSelect
‘-------------------------------------------------
SelectCaseCondition
Case“W”
attr3(1).TextString="完好"
Case“P”
attr3(1).TextString="破损"
Case“D”
attr3(1).TextString="丢失"
Case“Z”
attr3(1).TextString="占用"
EndSelect
‘--------------------------------------------
SelectCaseCondition
Case“Y”
attr3(3).TextString="在用"
Case“F”
attr3(3).TextString="作废"
EndSelect
4.程序测试与工程实践
程序编写完成后,进行了程序的测试,其运行界面如下:
本程序还进行了线状地物连线、XY坐标互换位置等功能的开发,由于篇幅有限,在此就不一一介绍。
经本程序运行后,采用原部件调查检查程序进行检查,属性检查无误,证明程序的可靠性较高。
5.结束语
VBA是VB语言的一个子集,可在AutoCAD平台上进行的二次开发,作为测量内业处理的辅助工具,可大大提高内业作业效率和正确率,通过工程实践证明了该程序的稳定性和准确性,具有较强的实用性,具有推广应用价值。
参考文献:
(1)佟士懋,刑芳芳,夏齐霄.AutoCADActiveXVBA二次开发技术基础及应用实例,国防工业出版社,2006,20~80
(2)成都市勘察测绘研究院,成都市数字化城市管理数据普查作业指导书,2012,1~12