清华山维EPS二次开发基础篇

来源:互联网 发布:解压加密文件 软件 编辑:程序博客网 时间:2024/04/27 19:47


创建图形

CreateNewObj( type )

参数

type创建新对象类型,包括 0(点) 1(线) 2(面) 3(注记)

对于编码列表中已经存在的地物,使用编码直接创建,则图层颜色等属性自动关联

 

CreateNewObjByCode( code)

参数

code创建地物的编码

1:对于含有破折号的地物编码,如1102021-108水准点,code输入1102021,不输入破折号后面的内容

2:对于点地物,每添加一个对象,就要使用一次CreateNewObjByCode( code )

3:如果要更改相关的属性,使用SSProcess.SetNewObjValue属性,属性值的方式更改

命令

所以在日常使用中,一般不会创建新编码的地物,所以使用CreateNewObjByCode( code )

创建图形对象

创建点对象:

SSProcess.CreateNewObjByCode 1102021’水准点

SSProcess.AddNewObjPoint 1000.01, 1000.34,22.45, 0, ""

创建线对象:

SSProcess.CreateNewObjByCode 4305034’支路边线,默认线型为曲线

SSProcess.AddNewObjPoint 1000.01, 1000.34,22.45, 0, ""

SSProcess.AddNewObjPoint 1310.01, 1010.34,22.45, 0, ""

SSProcess.AddNewObjPoint 1310.01, 1310.34,22.45, 0, ""

 

SSProcess.CreateNewObjByCode 5101012’高压连向,默认线型为直线

SSProcess.AddNewObjPoint 1000.01, 1000.34,22.45, 0, ""

SSProcess.AddNewObjPoint 1310.01, 1010.34,22.45, 0, ""

SSProcess.AddNewObjPoint 1310.01, 1310.34,22.45, 0, ""

创建面对象:

SSProcess.CreateNewObjByCode 3103013’一般房屋,首末点闭合

SSProcess.AddNewObjPoint 1000.01, 1000.34,22.45, 0, ""

SSProcess.AddNewObjPoint 1310.01, 1010.34,22.45, 0, ""

SSProcess.AddNewObjPoint 1310.01, 1310.34,22.45, 0, ""

SSProcess.AddNewObjPoint 1000.01, 1000.34,22.45, 0, ""

Q1如何更改默认线型(直线or曲线)

SetNewObjValue设置SSObj_LineType属性,比如

SSProcess.CreateNewObjByCode 4305034'支路边线,默认线型为曲线

SSProcess.SetNewObjValue"SSObj_LineType",1

SSProcess.AddNewObjPoint 1000.01, 1000.34,22.45, 0, ""

SSProcess.AddNewObjPoint 1310.01, 1010.34,22.45, 0, ""

SSProcess.AddNewObjPoint 1310.01, 1310.34,22.45, 0, ""

Q2特征点如何设置J命令,比如室外楼梯怎么画?

 

 

 

 

补充一下可以修改的新建对象的属性有哪些:

SSObj_ID 

对象ID

SSObj_Code

编码

SSObj_LayerName

层名

SSObj_Type

对象类型,包括POINT(点)、LINE(线)、 AREA(面)和NOTE(注记)4

SSObj_Color

颜色,分0-256颜色号、颜色值和RGB(,绿,蓝)三种指定方式

SSObj_LineType

线形,包括0(点)、 1(线)、 2(曲线)、 3(园弧)和 4(圆)

SSObj_LineWidth

线宽,以图上0.01毫米为单位

SSObj_Name

对象名称

SSObj_Byname

别名,FeatureCodeTB表中的Byname

SSObj_Angle

角度,以弧度为单位

SSObj_DataMark

数据标识

SSObj_MemoData

备注内容

SSObj_CreateTime

创建时间 年--日 时::秒 格式

SSObj_ModifyTime

修改时间 年--日 时::秒 格式

SSObj_FontWidth

字宽,以图上0.01毫米为单位

SSObj_FontHeight

字高,以图上0.01毫米为单位

SSObj_FontName

字体名

SSObj_FontClass

注记分类号

SSObj_FontAlignment

对齐方式,包括0(中心)、1(左上角)、2(左下角)、3(左中)、4(右上角)、5(右中)、6(右下角)、7(上中)、8(下中)

SSObj_FontDirection

字头朝向,包括0(正东)1(正北)2(正西)3(正南)4(切线方向)5(法线方向)

SSObj_FontWordAngle

字角度,以度为单位

SSObj_FontStringAngle

串角度,以度为单位

SSObj_FontWeight

字重

SSObj_FontIlaticAngle

倾斜,包括0(不倾斜)、-1(左斜)、1(右斜)

SSObj_FontDownAngle

耸肩,包括0(不耸肩)、-1(左耸肩)、1(右耸肩)

SSObj_FontUnderLine

下划线,包括0(无下划线)、1(有下划线)

SSObj_FontInterval

字隔,以图上0.01毫米为单位

SSObj_FontString

注记内容

[ExtAttr]

扩展属性字段

 

创建注记对象

根据注记分类号创建注记对象

CreateNewObjByClassfontclass

 

创建居民地名称注记,并更改其类型为线类型(默认注记为点类型)。

SSProcess.CreateNewObjByClass 399111

SSProcess.SetNewObjValue "SSObj_Type" ,Line

SSProcess.SetNewObjValue"SSObj_LineType",1’必须要更改这个属性

SSProcess.SetNewObjValue"SSObj_FontString","晁湖村4"

SSProcess.AddNewObjPoint 1000.01, 1000.34,22.45, 0, ""

SSProcess.AddNewObjPoint 1040.01, 1000.34,22.45, 0, ""

编辑对象

想要编辑对象,首先要指定要编辑的对象,即要选择并筛选对象

选择对象

SetSelectCondition函数

设定选择过滤条件。

SetSelectCondition conditionName, operateMode,conditionValue

参数:

ConditionName:过滤条件名

条件分SSOBJ_开头的基本属性,<>括住的几何特性, []括住的扩展属性,{}括住的拓扑关系特性,CallBackFunc_开头的回调函数方式

SSOBJ_开头的基本属性见下表

SSObj_ID 

对象ID

SSObj_GroupID 

对象组ID

SSObj_Code

编码

SSObj_LayerName

层名

SSObj_Type

对象类型,包括POINT(点)、LINE(线)、 AREA(面)和NOTE(注记)4

SSObj_Color

颜色,分COLORNO(颜色号)、颜色值和RGB(,绿,蓝)三种指定方式

SSObj_LineType

线形,包括0(点)、 1(线)、 2(曲线)、 3(园弧)和 4(圆)

SSObj_LineWidth

线宽,以图上0.01毫米为单位

SSObj_Name

对象名称

SSObj_Byname

别名,FeatureCodeTB表中的Byname

SSObj_ObjectName

对象汉字名称,FeatureCodeTB表中的ObjectName

SSObj_Thickness

厚度,FeatureCodeTB表中的Thickness

SSObj_ExplodeStatus

打散状态,FeatureCodeTB表中的Explode

SSObj_FilterStatus

过滤状态,FeatureCodeTB表中的Filter

SSObj_ReverseStatus

反向状态,FeatureCodeTB表中的Reverse

SSObj_Angle

角度,以弧度为单位

SSObj_DataMark

数据标识(用户标识)

SSObj_MemoData

备注内容

SSObj_CreateTime

创建时间 年--日 时::秒 格式

SSObj_ModifyTime

修改时间 年--日 时::秒 格式

SSObj_FontWidth

字宽,以图上0.01毫米为单位

SSObj_FontHeight

字高,以图上0.01毫米为单位

SSObj_FontName

字体名

SSObj_FontClass

注记分类号

SSObj_FontAlignment

对齐方式,包括0(中心)、1(左上角)、2(左下角)、3(左中)、4(右上角)、5(右中)、6(右下角)、7(上中)、8(下中)

SSObj_FontPosType

注记排列方式,包括0(均分)、1(散列)

SSObj_FontDirection

字头朝向,包括0(正东)1(正北)2(正西)3(正南)4(切线方向)5(法线方向)

SSObj_FontWordAngle

字角度,以度为单位

SSObj_FontStringAngle

串角度,以度为单位

SSObj_FontWeight

字重

SSObj_FontIlaticAngle

倾斜,包括0(不倾斜)、-1(左斜)、1(右斜)

SSObj_FontDownAngle

耸肩,包括0(不耸肩)、-1(左耸肩)、1(右耸肩)

SSObj_FontUnderLine

下划线,包括0(无下划线)、1(有下划线)

SSObj_FontInterval

字隔,以图上0.01毫米为单位

SSObj_FontString

注记内容

SSObj_FontStringCount

注记内容字符个数(汉字算两个字符)

SSObj_Area

面积,以平方米为单位

SSObj_Length

2D长度,以米为单位

SSObj_3DLength

3D长度,以米为单位

SSObj_PointCount

空间点数

SSObj_X

空间点首点X坐标

SSObj_Y

空间点首点Y坐标

SSObj_Z

空间点首点Z坐标

SSObj_PointName

空间点首点点名

SSObj_PointType

空间点首点点类型,包括0x0001(实测的或计算的)、0x0002(高程注记否)、0x0004(参加建模否)、0x0008(新产生的点或旧点)、0x0010(转向点或一般点)、0x0020(断点)、0x0040(直线)、0x0080(曲线)、0x00c0(圆弧)、0x1000(依附点)、0x2000(群集点)、0x4000(平滑点)、0x8000(特征点)

SSObj_X(index)

指定索引空间点X坐标

SSObj_Y(index)

指定索引空间点Y坐标

SSObj_Z(index)

指定索引空间点Z坐标

SSObj_PointName(index)

指定索引空间点点名

SSObj_PointType(index)

指定索引空间点 点类型,包括0x0001(实测的或计算的)、0x0002(高程注记否)、0x0004(参加建模否)、0x0008(新产生的点或旧点)、0x0010(转向点或一般点)、0x0020(断点)、0x0040(直线)、0x0080(曲线)、0x00c0(圆弧)、0x1000(依附点)、0x2000(群集点)、0x4000(平滑点)、0x8000(特征点)

SSObj_SymType 

符号类型 (P,L,LC,LP,Y,H,E)

SSObj_Reverse 

地物方向,0(正向)、1(反向)

SSObj_DrawAreaLabelStatus 

面心点标注状态, 0(不注) 1(标注)

SSObj_AreaLabelX 

面心标注点X坐标

SSObj_AreaLabelY

面心标注点X坐标

SSObj_Reverse 

地物方向,0(正向)、1(反向)

SSObj_Status 

地物状态,e_Valid = 0x0001, //有效
e_Explode = 0x0002, //
是否已打散
e_Screen = 0x0004, //
是否被屏蔽
e_Duplicate = 0x0008, //
是否被复制品
e_IsQuote = 0x0010, //
是否索引
e_Hidden = 0x0020, //
是否隐藏
e_IsSelected = 0x0040, //
是否已选择 
e_Editable = 0X0080, //
是否可编辑
e_Highlight = 0X0100, //
是否加亮
e_Gray = 0X0200, //
是否变灰
e_Edited = 0X0400, //
是否被修改
e_Refrence = 0X0800, //
参考图形
e_Opaque = 0X1000, //
是否压盖

SSObj_GraphicInfo(flag) 

图形特征,flag可以是以下值:
25
面心标志点显示开关及相对多边形焦点偏移量,格式:"是否显示(0不显示,1显示),东偏,北偏",(米为单位)
26
个性化符号描述,格式:"是否替换现在符号描述(0不替换,1替换);符号描述语句(多个语句用;号分隔)"
101
图形缩放比例,格式: "X向比例,Y向比例,Z向比例" (只支持整数,单位为0.00001)

 

几何特性见下表

<Overlap>

重叠对象,包括0(不重叠)、1(有重叠)

<Close>

封闭对象,包括0(不封闭)、1(封闭)

<Clockwise>

点列方向,包括0(逆时针)、1(顺时针)

扩展属性为扩展属性表或MemoData中的任一字段,需用[]括住字段名称

[ExAttr]扩展属性

拓扑关系特性见下表

{OuterObj}

外围对象,条件值填写选择过滤条件分组名

{NotOuterObj}

无外围对象,条件值填写选择过滤条件分组名

{OuterObjSearchRange}

外围对象最大搜索范围,以米为单位?什么意思

{NotOuterObjSearchRange}

无外围对象最大搜索范围,以米为单位

{InnerObj}

包含对象,条件值填写选择过滤条件分组名

{NotInnerObj}

无包含对象,条件值填写选择过滤条件分组名

{InnerObjGetPointMode}

被包含对象取点方式, 0(判断所有点) 1(只判断焦点)

{CrossObj}

相交对象,条件值填写选择过滤条件分组名

{NearObj}

相近对象,条件值填写选择过滤条件分组名

{NotNearObj}

无相近对象,条件值填写选择过滤条件分组名

{NearObjSearchRange}

相近对象最大搜索范围,以米为单位

{NotNearObjSearchRange}

无相近对象最大搜索范围,以米为单位

{OnLineObj}

选择对象落在指定线上,条件值填写线选择过滤条件分组名

{NotOnLineObj}

选择对象不落在线上,条件值填写线选择过滤条件分组名

{OnLineObjRange}

判断点落在线上的范围,以米为单位

{SelectPolygon_GroupName}

选择多边形分组名,条件值填写选择过滤条件分组名
支持直接指定由
CreateMapFrame,CreateMapFrameByRegion,CreateMapFrameByCenterLine等函数创建的图幅缓存作为选择多边形,格式: MapFrameIndex_index MapFrameIndex_1

{SelectPolygon_InOutMode}

多边形选择方式,1(选内)2(选外)4(选择相交),允许多值相加

{SelectPolygon_CallBackFunc}

过滤多边形内对象回调函数,条件值填写回调函数名称,CallBackFunc_FilterObj,有岛时,只处理外环
说明:
    
在回调函数内可应用以下函数操作当前多边形内已选中的对象
     GetSelectPolygonObjCount() 
         
获取多边形内选中对象的个数
     GetSelectPolygonObjAttr(index,
attrField
         
获取多边形内选中对象的属性值
     RemoveSelectPolygonObj(index)
         
删除多边形内选中的指定对象(只是移出选择对象列表,并不实际删除)

{RepeatedInPolygon_GroupName}

当前选择条件选中的多边形内多次出现的同类对象,条件值填写同类对象过滤条件分组名

{RepeatedInPolygon_FieldName}

同类对象比较字段名列表,,号分隔

{RepeatedInPolygon_ReturnFirst}

是否返回首个重复对象(0不返回 1返回)"

回调函数方式

回调函数必须在脚本中定义,函数参数按字符串方式传递,函数的返回值必须强制转成字符串.

CallBackFunc_函数名

回调函数方式,"CallBackFunc_CheckString(SSObj_FontClass, SSObj_FontString)"
如果同时有拓扑关联对象,则允许指定关联对象的属性,SSSubObj_SSSubExtAttr_开头,"CallBackFunc_CheckString(SSObj_FontString, SSSubObj_FontString)"

 

OperateMode:条件操作符

==

等于

大于

小于

<> 

不等于

LIKE

包含指定字符

NOT LIKE

不包含指定字符

CompareNoCase

忽略大小写等于比较

Dec

小数位等于

 

ConditionValue:条件值

根据条件名称,指定相应的值类型,如果一个条件需要指定多个或关系的值列表,可用"1,2,..."的方式描述。

选择过滤数据标识为1,闭合的图形并显示筛选到的图形的个数

SSProcess.SetSelectCondition"SSObj_DataMark","==","1"

SSProcess.SetSelectCondition"<Close>","==","1"

SSProcess.SelectFilter

geocnt=           SSProcess.GetSelGeoCount 

选择过滤建筑名称为5#,建筑编号为1的闭合图形

SSProcess.SetSelectCondition"[JZMC]","==","5#"

SSProcess.SetSelectCondition"[JZBH]","==","1"

SSProcess.SetSelectCondition"<Close>","==","1"

Q3:选择条件的是否重叠是什么意思?

 

 

对于基本属性、几何属性、扩展属性,其条件值为单一属性值,而对于拓扑关系属性,其条件值为过滤条件分组名,下面学习过滤条件分组名。

SetSelectConditionGroup函数

设定分组选择过滤条件。

SetSelectConditionGroup( groupName, conditionName,operateMode, conditionValue )

参数基本同设置选择过滤条件,只是多了个分组名,该函数,执行一次,设定分组的一个条件,允许多次执行以设定多个分组的多个选择条件,有多个条件时,条件的关系为与的关系。函数设定的分组选择条件,只供SetSelectCondition函数中设置拓扑关系特性时使用,在执行SelectFilter函数时,不会直接使用分组条件。

在分组选择条件使用完成后,必须调用ClearSelectConditionGroups函数释放空间。

SSProcess.SetSelectConditionGroup "范围线","SSObj_Code","==","1"

SSProcess.SetSelectCondition"[JZMC]","==","5#"

'SSProcess.SetSelectCondition"[JZBH]","==","1"

SSProcess.SetSelectCondition"<Close>","==","1"

‘’SSProcess.SetSelectCondition"{OuterObjSearchRange}","==","0.1"

SSProcess.SetSelectCondition"{OuterObj}","==","范围线"

上面代码可以筛选出红色线内的图形。其中图形的建筑名称都设置为5#,建筑编号设置为1,范围线用编码为1的线圈出来。

在执行完选择集的操作后,要清空选择集和选择集操作

ClearSelectConditionGroups

‘ClearSelectConditionGroup

ClearSelectCondition

 

UpdateSysSelectionflag实现系统选择集与脚本选择集之间的呼唤

Flag=1,脚本选择集更新到系统

Flag=0,系统选择集更新到脚本

 

 

 

 


 

获取选择集对象信息

 

地物

 

注记

获取选择集地物个数

GetSelGeoCount( )

获取选择集注记个数

GetSelNoteCount( )

 

获取选择集指定地物点数

GetSelGeoPointCount( index)

获取选择集指定注记点数

GetSelNotePointCount( index )

获取选择地物指定点信息

GetSelGeoPoint( index, pointindex, x, y, z, point type, name )

获取选择集指定注记指定点信息

GetSelNotePoint( index, pointindex, x, y, z, point type, name )

 

获取选择集指定地物属性

GetSelGeoValue( index, attrField)

 

获取选择集指定地物属性

GetSelNoteValue( index, attrField)

 

获取指定ID的对象属性(不同于索引)

GetObjectAttr( geoID, attrField)

问题:如果使用GetObjectAttr( geoID,attrField)获取对象属性,则需要使用GetSelGeoValue( index,attrField)或者GetSelNoteValue(index, attrField)

获取对象的ID,那为什么不直接使用GetSelGeoValue( index,attrField)或者GetSelNoteValue(index, attrField)GetObjectAttr( geoID,attrField)存在的意义是什么?

问题:不论是使用GetSelNoteValue(index, attrField)还是使用GetObjectAttr( geoID,attrField)都无法获取code信息,可以获取其他属性信息,为什么?

Sub OnClick()

SSProcess.PushUndoMark

SSProcess.ClearSelection

SSProcess.ClearSelectCondition

SSProcess.SetSelectCondition"SSObj_Type", "==", "NOTE"

SSProcess.SelectFilter

geocount = SSProcess.GetSelNoteCount()

id = SSProcess.GetSelNoteValue(1,"SSObj_id")

code = SSProcess.GetObjectAttr(CInt(id), "SSObj_code")’CInt的意义,为什么要取整?这两句代码直接用code=SSProcess.GetSelNoteValue(1,”SSObj_code”)不就可以了吗,虽然这两个都获取不了code,获取别的属性是一样的,直接用Id,不用CIint(id)

MSGBOX id

msgbox code

End Sub

 


 

编辑对象

选择完图形后,就需要对图形进行相关的编辑操作

修改一个选择集的全部对象

每次只能修改一个选择集的属性值:ChangeSelectionObjAttrattrField, attrValue

下面代码将房屋内的高程点的值设置为房屋面的高程

SSProcess.PushUndoMark

 

SSProcess.ClearSelection

SSProcess.ClearSelectConditionGroups

SSProcess.SetSelectCondition"SSObj_Code", "==", "3103013"

SSProcess.SetSelectConditionGroup "房屋面内高程点","SSObj_Code", "==", "7201001"

SSProcess.SetSelectConditionGroup "房屋面内高程点","{OuterObj}", "==", "房屋面"

SSProcess.SetSelectConditionGroup "房屋面","SSObj_Code", "==", "3103013"

SSProcess.SelectFilter

SSProcess.ChangeSelectionObjAttr"SSObj_Z", "SelectionGroup_房屋面内高程点(SSObj_Z(0))"

SSProcess.ClearSelectConditionGroups

 

Q4:对于筛选的多个房屋,是怎么做到将每个房屋内的高程分别设置给对应的房屋的?

 

把房屋内的注记内容分别设置给房屋的[结构][层数]

Function CallBackFunc_TrimJGString( string)

CallBackFunc_TrimJGString = Mid(string,1,1)

End Function

 

Function CallBackFunc_TrimCSString( string)

Dim strCS,strlen

strlen = Len(string)-1

strCS = ""

If strlen>0 Then

strCS = Mid(string, 2, strlen )

End If

If strCS ="" Then

strCS = "1"

End If

CallBackFunc_TrimCSString = strCS

End Function

 

Sub OnClick()

SSProcess.PushUndoMark

SSProcess.ClearSelection

SSProcess.ClearSelectConditionGroups

SSProcess.SetSelectCondition"SSObj_Code", "==", "3103013"

SSProcess.SetSelectConditionGroup "房屋面内注记","SSObj_Type", "==", "NOTE"

SSProcess.SetSelectConditionGroup "房屋面内注记","SSObj_FontClass", "==", "399109"

'SSProcess.SetSelectConditionGroup "房屋面内注记","SSObj_FontWidth", "==", "300"

SSProcess.SetSelectConditionGroup "房屋面内注记","{OuterObj}", "==", "房屋面"

SSProcess.SetSelectConditionGroup "房屋面","SSObj_Code", "==", "3103013"

SSProcess.SelectFilter

SSProcess.ChangeSelectionObjAttr"[JZJG]", "SelectionGroup_房屋面内注记(CallBackFunc_TrimJGString(SSObj_FontString))"

SSProcess.ChangeSelectionObjAttr"[FWCS]", "SelectionGroup_房屋面内注记(CallBackFunc_TrimCSString(SSObj_FontString))"

SSProcess.ClearSelectConditionGroups

end sub

修改多个选择集对象

SetChangeSelectionObjParameter设置修改选择集参数

ChangeSelectionObj修改选择集对象

 

将砼12的颜色变为3,砖11的颜色变为2

Sub OnClick()

SSProcess.ClearSelection

SSProcess.ClearSelectCondition

    ' SSProcess.SetSelectCondition"SSObj_Code","==","3103031"

SSProcess.SelectFilter

SSProcess.ClearChangeSelectionParameter

SSProcess.SetChangeSelectionObjParameter"[JZJG]=,[FWCS]=12","SSObj_Color=COLORNO(3)"

SSProcess.SetChangeSelectionObjParameter"[JZJG]=,[FWCS]=11","SSObj_Color=COLORNO(2)"

'SSProcess.SetChangeSelectionObjParameter"[结构]=8,[层数]=9","SSObj_Color=COLORNO(5)"

SSProcess.ChangeSelectionObj

 SSProcess.RefreshView '刷新图形窗口

 SSProject.RefreshWorkspace '刷新工作空间窗口

endsub

Q5SSProcess.SelectFilter在这里的作用是什么,必须有这句话,否则就不能成。

Q6:如果我要将砼11、砖2的在建房屋改为绿色,并不改变砼11,砖2的一般房屋,怎么实现。

修改选择集内指定对象的属性

SetObjectAttr(geoID, attrField, attrValue)该函数修改指定ID的对象的属性,所以一般要获取ID,使用SSProcess.GetSelGeoValueindex,”SSObj_ID”)获取当前选择集指定地物对象属性,这种编辑对象的方式,适用于一个选择集内不同时修改属性的情况(那存在的意义是?个人认为用处不大)

比如help示例:

Sub OnClick()
SSProcess.PushUndoMark
SSProcess.ClearSelection
SSProcess.ClearSelectCondition
SSProcess.SetSelectCondition "SSObj_Type","==","POINT"
SSProcess.SelectFilter
geocount = SSProcess.GetSelGeoCount()
If geocount > 0Then
   For
i=0 To geocount-1

       id =SSProcess.GetSelGeoValue(i,"SSObj_ID")
       
SSProcess.SetObjectAttr CInt(id),"SSObj_Code","5201051"
      Next
End
If
End
Sub

不就可以改为

 

SubOnClick()

SSProcess.PushUndoMark

SSProcess.ClearSelection

SSProcess.ClearSelectCondition

SSProcess.SetSelectCondition"SSObj_Type", "==", "POINT"

SSProcess.SelectFilter

     SSProcess.ChangeSelectionObjAttr"SSObj_CODE", "5201071"

     SSProcess.ClearSelectCondition 

 SSProcess.RefreshView '刷新图形窗口

 SSProject.RefreshWorkspace '刷新工作空间窗口

数据输出

输出TXT

 

Sub OnClick()

SSProcess.PushUndoMark

SSProcess.ClearSelection

SSProcess.ClearSelectCondition

SSProcess.SetSelectCondition"SSObj_Type","==","NOTE"

SSProcess.SelectFilter

geocount= SSProcess.GetSelNoteCount()

set fso= CreateObject("Scripting.FileSystemObject")

set f= fso.CreateTextFile("C:\test.txt",true)'第二个参数表示目标文件存在时是否覆盖

msgbox geocount

FOR i=0to geocount-1

           dim str

       id = SSProcess.GetSelNoteValue(i,"SSObj_id")

       code = SSProcess.GetObjectAttr (id,"SSObj_LayerName")

       str=SSProcess.GetObjectAttr(id,"SSObj_FontString")

           color=SSProcess.GetObjectAttr(id,"SSObj_Color")

           str=id+","+code+","+str+","+color+","

           pointCnt=SSProcess.GetSelNotePointCount(i)

'msgbox pointCnt

           for j=0to pointCnt-1

               dim x,y,z,pointtype,name

               SSProcess.GetSelNotePoint i,j, x, y, z, pointtype, name

               str=str+cstr(x)+","+cstr(y)+","+cstr(z)

msgbox str

           next

           f.writeline(str)

next

f.close()

EndSub

 

那么问题来了,由于每个字段的长度不同,导致数据没有对齐,如何实现右对齐?

坐标一般保留三位小数,如何实现?

str=str+cstr(FormatNumber(x,3,,,0))+","

+cstr(FormatNumber(y,3,,,0))+","

+cstr(FormatNumber(z,3,,,0))

3代表的小数位,0代表去掉千分位符号

输出EXCEL

Sub OnClick()

SSProcess.PushUndoMark

SSProcess.ClearSelection

SSProcess.ClearSelectCondition

SSProcess.SetSelectCondition"SSObj_Type","==","NOTE"

SSProcess.SelectFilter

geocount=SSProcess.GetSelNoteCount()

 

 

 set app= CreateObject("Excel.Application")

 app.Visible = True

 if err.number<> 0then

  msgbox "请确认您已经正确安装Microsoft Excel 2000以上版本"

  exitsub

 endif

 Set book= app.Workbooks.Add

 Set sheet= book.ActiveSheet

 If sheetIsNothingThen

  Set sheet= book.Sheets.Add

 EndIf

'设置单元格水平居中

sheet.Cells.HorizontalAlignment=3

'设置单元格垂直居中

sheet.Cells.VerticalAlignment=2

'设置单元格显示两位小数,如13.5显示为13.50

sheet.columns(5).NumberFormatLocal="0.000"'设置第五列数字保留小数点后3

'sheet.rows(3).NumberFormatLocal="0.00"'第三行

FOR i=0to geocount-1

           dim str

       id = SSProcess.GetSelNoteValue(i,"SSObj_id")

       code = SSProcess.GetObjectAttr (id,"SSObj_LayerName")

       str=SSProcess.GetObjectAttr(id,"SSObj_FontString")

           color=SSProcess.GetObjectAttr(id,"SSObj_Color")

           'str=id+","+code+","+str+","+color+","

           pointCnt=SSProcess.GetSelNotePointCount(i)

sheet.Cells(i+1,1)=id

sheet.Cells(i+1,2)=code

sheet.Cells(i+1,3)=str

sheet.Cells(i+1,4)=color

           for j=0to pointCnt-1

               dim x,y,z,pointtype,name

               SSProcess.GetSelNotePoint i,j, x, y, z, pointtype, name

               'str=str+cstr(FormatNumber(x,3,,,0))+","+cstr(FormatNumber(y,3,,,0))+","+cstr(FormatNumber(z,3,,,0))

'msgbox str

sheet.Cells(i+1,5)=x

           next

next

'设置根据内容自动调整列宽

sheet.Cells.EntireColumn.AutoFit

 

EndSub

 

输出结果

其他设置可参考http://blog.sina.com.cn/s/blog_65f27fc20101f63b.html