实体是在idata软件中展现图形的载体,通过设置实体的相关属性,让各种实体表现出各自的差异。可以说实体在idata中算是比较复杂对象。
下面来学习一下idata的实体相关函数。.
函数名 | 说明 |
addToScene() | 将实体加入到容器中 |
boundingRect() | 获得实体外包矩形(实体坐标系) |
clearUndoEntAttribute() | 清除撤销操作的属性状态 |
clone(int mode, IDataGeoCode pGeoCode = null) | 克隆一个新实体,内存中会开辟新的空间,返回内存空间的地址 |
cloneEntityForScreen(int mode, int color) | 克隆一个实体,用于屏幕动态显示,系统自已维护 |
createEntityFromClrObject(object entityObj) | CLR对象创建实体。如果CLR对象不合法,则返回空。 |
createRect() | 重算外包矩形,并更新索引 |
delFromScene() | 将实体从容器中删除 |
Dirty() | 判断实体的Dirty标识 |
entlStatus() |
|
entStatus() | 获取实体的状态 |
getArea() | 计算实体的面积 |
getBoundingRect() | 获得实体外包矩形(场景坐标系) |
getCode() | 获取当前实体编码的字符串 |
GetColor() | 获得普通图层实体的RGB色 |
getColorIndex() | 获得有编码的实体的颜色号 |
getCurSelIdx() | 获得当前激活的夹点的下标 |
getDataBase() | 获得实体所在数据源 |
GetGeoCode() | 获得实体所在编码 |
getGripPoints(out List<List<Point>> gripPoints, out List<List<int>> osnapModes) | 获取实体上所有拐点 |
getGroupID() | 获得编组ID,返回GUID的编组号 |
getHeight() | 获得实体的标高,只取第一个节点 |
getHighLight() | 获得实体的隐藏状态 |
GetLayer() | 获得实体所在图层 |
getLength() | 计算实体的长度 |
getLongPtr() | 获取实体在内存中的指针地址 |
getmd5() | 获得实体所有信息总和的MD5值,用于自动测试,判断实体是否和上次一致 |
getName() | 获取当前实体编码对应的名称 |
getNodes(out List<List<Point>> nodes, out List<List<double>> bulges, bool bFullNodes = false, double dTolerance = 0.01) | 获取实体的结点数组 |
getNodesBinMD5() | 获取实体几何信息的MD5码,用于名部判断实体是否被修改 |
getNodesSize() | 获取实体节点的个数,包含所有part之和 |
getOID() | 获取实体的ID号 |
getOrder() | 获得实体叠置顺序 |
getOsnapPoints(byte osnapMode, Point pickPoint, Point lastPoint, Point snapPoint, ref uint mode, double max_dist) | 传入一个点,计算该点在该实体上的捕捉点传入一个点,计算该点在该实体上的捕捉点 |
getPartNodes(uint part, out List<Point> nodes, out List<double> bulges, bool bFullNodes, double dTolerance) | 获得指定第几部分的实体上的节点数组 |
getParts() | 获得实体的part数 |
getUndoAttributeValue() | 获取撤销操作属性的值 |
GetUniqueID() | 获取实体的所在的图层名+实体的ID号,组成唯一的ID号码 |
getViewScale() | 获得当前视口的缩放比例,一般用于计算一个象素所代表的实际长度 |
GetWidth() | 获得实体线宽,作用为普通图层实体获得实体线宽,作用为普通图层实体 |
getXData(string name) | 获取数据库字段属性(进数据库) |
getXDataAll() | 获取数据库所有属性数据 |
isBulges(int part) | 指定part号,判断该部分是否有弧段 |
isClean() | 撤销与回退的列表是否为空 |
isClosed(int part) |
|
isComEnt() | 判断是否为普通图层实体 |
isCurveFit(int part) | 指定part号,判断是该部分否是拟合线 |
isHasText() | 判断是否是带文字注记的实体,如:房屋面中的文字注记 |
isInScene() | 判断实体是否被加入到了容器中 |
isLocked() | 判断实体是否被锁定,如被锁定,则不能选中,不能应该被操作。锁定是以数据库为单位 |
isMask() | 判断实体是否为遮罩实体 |
isOK() | 判断实体是否能被绘制到图面(如数据源关掉,图层关掉,实体隐藏都会影响) |
isScreenEntity() | 判断当前实体是不是虚拟克隆的屏幕实体 |
isSelected() | 获得实体的选中状态 |
isValid() | 判断实体是否有效 |
isVisible() | 获得实体的隐藏状态 |
list() | 将节点和图层信息输出成字符号,用于命令窗口的打印 |
mapFromScene(Point point) | 将场景坐标系(地理坐标系)的点转换为实体坐标系 |
mapToScene(Point point) | 将实体坐标系的点转换为场景坐标系(地理坐标系) |
mapToScene(double x, double y) | 将实体坐标系的点转换为场景坐标系(地理坐标系) |
moveBy(double dx, double dy) | 移动实体插入点的坐标 |
moveGripPointsAt(List<int> indices, List<Point> newPtArr, List<double> newZArr) | 移动拐点到新的位置 |
Pos() | 获得实体插入点(实体坐标系中的0,0)在场景坐标系(地理坐标系)中的坐标 |
property(string sKey) | 获得扩展属性 |
readShape(out string shape) | 将shape格式的二进制传入,完成对实体的坐标初始化 |
readSymbolRef(string buf) | 导入SymbolRef字段,完成对符号特征点信息的初始化 |
redo(bool bFirst) redo(bool bFirst) | 实体的恢复操作,例如,调整节点的位置,将取消的操作从新实现 |
removeGroup() | 移除编组 |
removeProperty(string name) | 移除拓展属性 |
removeXData(string name) | 数据库数据置为空,传入为空值,则清空所有 |
removeXData(List<string> sname) | 数据库数据置为空,传入为空值,则清空所有 |
rotation() | 获得点和文字的旋转角 |
saveHistory(Dictionary<string, object> vt) | 保存操作的历史记录,从加载数据开始 |
SerializeIn(out string byteIn) | 普通串行化入 |
SerializeOut(out string byteOut) | 普通串行化出,没有格式约束 |
setClosed(bool bClosed, int part) | 指定part号,判断是否闭合 |
SetColor(Color color) | 通过RGB设置实体的颜色,作用于没有普通图层的实体 |
setColorIndex(ushort index) | 获得有编码的实体的颜色号 |
setComEnt(bool a) | 设置实体的状态是否为普通图层实体 |
setCurNodeIdx(ushort nIdxSel) | 设置当前激活的Node型(节点)夹点的下标 |
setCurSelIdx(ushort nIdxSel) | 设置当前激活的夹点的下标 |
setCurveFitMode(bool bCurvefit, int part) | 指定part号,设置当前部分为拟合状态 |
setDirty(ushort nDir) | 设置实体的修改标识 |
setEntStatus(EntMode nStatus) | 设置实体的状态 |
setGapScale(double scale_x, double scale_y) | 设置填充图块间比例,默认为1,点状也会用到 |
setGroupID(string groupID) | 传入编组号,设置编组指针内的编组号 |
setHasText(bool bText) | 设置实体的文字注记状态 |
setHeight(double dHeight) | 执行此函数目的是设置统一的标高,会更新所有节点的Z值 |
setHighLight(bool bLight) | 设置实体的高亮状态 |
|
|
setLongPtr(long ptr) | 设置实体在内存中的指针地址。 |
setMask(bool bCover) | 设置普通图层面实体为遮罩实体(消隐,用背景色填充面) |
setNodes(List<List<Point>> nodes, List<List<double>> bulges) | 传入结点数据,更新结点的坐标值信息 |
setOID(uint guid) | 设置实体的ID号 |
setOrder(int order) | 设置实体的叠置顺序 |
setPartNodes(uint part, List<Point> nodes, List<double> bulges) | 根据指定的part号,并更该节点数据信息 |
setPos(double x, double y) | 设置实体插入点的坐标(在场景坐标系中) |
setPos(Point point) | 设置实体插入点的坐标(在场景坐标系中) |
setProperty(string sKey, object vt) | 设置扩展属性,该属性记入SymbolRef字段,不进入数据库字段 |
setRotation(uint angle) | 设置点和文字的旋转角 |
setSelected(bool selected) | 设置实体的选择状态 |
setUserCode(string usercode) | 设置实体的用户编码 |
setVisible(bool visible) | 设置实体的显隐状态 |
SetWidth(float width) | 设置普通图层实体线宽 |
setXData(string name, object value) | 设置数据库字段属性 |
setXDataMap(Dictionary<string, object> vtMap, bool bClear) | 批量设置数据库字段属性,传入一组。 bClear = true 则清空原来数据,false则合并 |
stackPush(Dictionary<string, object> vtMap, bool bAtrribute) | 添加操作信息到列表中去 |
oShape(string shape, bool bIgnoreRect) | 将实体的节点信息转换为二进制 |
toSymbolRef() | symbolRef为iData的附加字段,存储一些特有的符号信息。该函数是将SymbolRef信息导出 |
type() | 返回实体的类型 |
undo() | 实体的撤销操作,例如,调整节点的位置,使用撤销,将恢复到为调整之前的状态 |
undoClear() | 清除实体的撤销操作,将无法再使用撤销功能 |
undoCurValue() | 撤销操作当前的值 |
undoSetPreValue(Dictionary<string, object> vtMap) | 设置撤销操之前的值 |
UserCode() | 获得用户编码 |
|
|
|
|
|
|
|
|
|
|
下面是实体移动的一个例子。
using Southgis.iData;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace MoveEntity
{
public class Class1
{
private iDataInterface iData = new iDataInterface();
public void EntityMove()
{
if (!this.iData.isDocumentActived())
{
MessageBox.Show("没有打开数据", "信息", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
return;
}
iDataEntity entity;
Point point;
ErrorType e = this.iData.iDataEntSel("选择一个实体:", out entity, out point);
if (e != ErrorType.eOk)
{
return;
}
point = entity.Pos();
Point point_new;
e = this.iData.iDataGetPoint(null, "选择一个点,实体将被移动到该点:", out point_new);
if (e != ErrorType.eOk)
{
return;
}
if (point_new.Distance2DTo(point) < 1E-06)
{
this.iData.iDataPrintf("两点坐标相同,不需要移动。");
}
this.iData.iDataPrintf(string.Concat(new object[]
{
"实体将被移动到新点:(",
point_new.X,
",",
point_new.Y,
")"
}));
this.iData.iDataInitGet(0, "Y N");
string input_str;
e = this.iData.iDataGetString(0, "是否确定移动实体:确定[Y]、取消[N]:", out input_str);
if ((e == ErrorType.eOk || e == ErrorType.eKWord) && (input_str == "y" || input_str == "Y"))
{
entity.setPos(point_new.X, point_new.Y);
List<iDataEntity> entity_list = new List<iDataEntity>();
entity_list.Add(entity);
this.iData.Commit(entity_list, CommitMode.kModified, true);
}
this.iData.iDataRegen(null, true);
}
}
}
更多内容,微信扫二维码关注公众号