CAD改变图形对象属性
所有对象都一个唯一的标识id和句柄,都是用来标识对象,知道对象的Id或句柄,就能找到对象并修改属性。id是只在当前内存中唯一,下次再打开id就会发生变化,句柄会随图纸保存,并会一直不变。
对象Id,指针,句柄三者之前的转换关系:
从 ID 到对象指针: 通过Mx::mcdbOpenObject 打开对象,或使用智能指针打开, McDbObjectPointer。
从对象指针到 ID: 所有的数据库对象都继承自McDbObject,调用McDbObject::objectId()返回对象的ID。
从句柄到 ID:使用McDbDatabase::getAcDbObjectId 函数。
从 ID 到句柄:使用McDbObjectId::handle 函数。
从指针到句柄:使用 McDbObject::getAcDbHandle 函数。
修改对象颜色
上一节中:函数McDbObjectId CreateLine1(McGePoint3d pt1,McGePoint3d pt2)会返回新绘制的对象id。
// -------------------------------------------------------------------------
// Summary:
// 改变实体颜色
// Parameters:
// id - 实体的id
// color - 实体的新颜色
// Returns:
// 成功返回true
// -------------------------------------------------------------------------
bool ChangeColor(McDbObjectId id,const McCmColor& color)
{
// 用智能指针打开对象,写方式打开。智能指针会自动关闭对象.
McDbObjectPointer spEnt(id,McDb::kForWrite);
if(spEnt.openStatus() != Mcad::eOk)
{
// 如果对象,在其它地方打开,就会打开的失败.
return false;
}
// 设置对象颜色
spEnt->setColor(color);
return true;
}
COM接口调用方式,如C#代码:
// -------------------------------------------------------------------------
// Summary:
// 改变实体颜色
// Parameters:
// id - 实体的id.
// iR, iG,iB - 实体的颜色
// Returns:
// 成功返回true
// -------------------------------------------------------------------------
bool ChangeColor(Int64 id,int iR,int iG,int iB)
{
// 由id得到实体对象.
MxDrawEntity ent = (MxDrawEntity)axMxDrawX1.ObjectIdToObject(id);
if (ent == null)
return false;
MxDrawMcCmColor color = new MxDrawMcCmColor();
color.SetRGB(iR, iG, iB);
// 设置实体颜色。
ent.TrueColor = color;
return true;
}
修改实体的其他特性
下面实现修改其它属性的函数,比如:
修改图层属性:
// -------------------------------------------------------------------------
// Summary:
// 修改对象图层.
// Parameters:
// id - 实体的id.
// pszLayerName - 层名,如果数据库,没有该层名,返回失败。
// Returns:
// 成功返回true
// -------------------------------------------------------------------------
bool ChangeLayer(McDbObjectId id,LPCTSTR pszLayerName)
{
// 用智能指针打开对象,写方式打开。智能指针会自动关闭对象.
McDbObjectPointer spEnt(id,McDb::kForWrite);
if(spEnt.openStatus() != Mcad::eOk)
{
// 如果对象,在其它地方打开,就会打开的失败.
return false;
}
// 设置对象颜色
if(spEnt->setLayer(pszLayerName) != Mcad::eOk)
return false;
return true;
}
比如修改线型属性:
// -------------------------------------------------------------------------
// Summary:
// 修改对象线型.
// Parameters:
// id - 实体的id.
// pszLinetypeName - 线型名,如果数据库,没有线型名,返回失败。
// Returns:
// 成功返回true
// -------------------------------------------------------------------------
bool ChangeLinetype(McDbObjectId id,LPCTSTR pszLinetypeName)
{
// 用智能指针打开对象,写方式打开。智能指针会自动关闭对象.
McDbObjectPointer spEnt(id,McDb::kForWrite);
if(spEnt.openStatus() != Mcad::eOk)
{
// 如果对象,在其它地方打开,就会打开的失败.
return false;
}
// 设置对象颜色
if(spEnt->setLinetype(pszLinetypeName) != Mcad::eOk)
return false;
return true;
}
浙公网安备 33010602011771号