南方数码iData数据工厂二次开发&实体

实体是在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);
        }
    }
}

                                                              更多内容,微信扫二维码关注公众号

                                                             


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yGIS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值