清华山维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
Q5:SSProcess.SelectFilter在这里的作用是什么,必须有这句话,否则就不能成。
Q6:如果我要将砼11、砖2的在建房屋改为绿色,并不改变砼11,砖2的一般房屋,怎么实现。
修改选择集内指定对象的属性
SetObjectAttr(geoID, attrField, attrValue)
该函数修改指定ID的对象的属性,所以一般要获取ID,使用
SSProcess.GetSelGeoValue(index,”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
- 清华山维EPS二次开发基础篇
- 清华山维EPS二次开发VBS基础篇
- 清华山维EPS二次开发-距离平行线
- 清华山维软件EPS2012常用快捷键
- Eps
- EPS
- EPS
- EPS
- revit二次开发基础
- GoogleEarth二次开发基础
- .NET AutoCAD二次开发之路(一、基础篇)
- 3ds Max .NET二次开发的基础入门篇
- 月下华山
- 雨中登天华山
- 华山游记
- 第二章:【UCHome二次开发】基础
- OpenMeetings二次开发(一)OpenMeetings基础
- OpenMeetings二次开发(三)OpenLaszlo基础
- java基础语言(五)
- 一道简单的算法题(一)
- 我的网络编程学习之路——TCP和UDP
- Web前端-HeadFirst-笔记-html规范
- 在线云评测系统日志八
- 清华山维EPS二次开发基础篇
- 安装electron
- bzoj1831: [AHOI2008]逆序对
- mybatis学习之高级映射中的一对一查询
- node 中buffer创建
- mac mono 安装 command not found: mcs
- 链表面试题总汇
- QFileDialog使用对话框选取本地文件
- 39. Combination Sum