实体的插入
1. 在AuToCAD上点一点,加载一个.dwg文件到块参照中。
ads_point pt;
if(acedGetPoint(0, _T(“\n请输入插入点<退出ESC>:”), pt) == RTNORM)
{
MmCreateBlockReference(_T(“c:\\gypdxt.dwg”), asPnt3d(pt)); }
2. 在AuToCAD上点一个点,加载一个.dwg文件到块定义中,返回该块的ID
AcDbObjectID idRecd = MmLoadBlock(_T(“c:\\gypdxt.dwg”)); If(idRecd.isValid)
{
}
3. 将块定义、图形添加到块参照中,返回该对象的ID
AddToCurrentSpace(指针对象)
AcDbObjectId id = AddToCurrentSpace(指针对象)
4. 同类对象之间的赋值,函数-clone()
AcDbBlockReference*pRef=(AcDbBlockReference*)Jig.GetBlkRef()->clone();
实体的获取
1. 在AuToCAD上点击一个实体,获取该实体的ID
Ads_point adspt;
Ads_name entname;
AcDbObjectId entId;
If(acedEntSel(_T(“\n请选择实体或<退出ESC>:”), entname, adspt) != RTNORM)
Return;
acdbGetObjectId(entId, entname);
2. 实体的指针与实体的ID之间的相互转换
AcDbLine* ptLine = new AcDbLine();
AcDbObjectId ptId;
ptId = AddToCurrentSpace(ptLine); //通过指针获取ID
AcDbObjectPointer<实体类> pt(实体ID, AcDb::kForWrite); If(pt.openStatus() == Acad::eOk)
{
}
3. AcDbObjectPointer<AcDbEntity> pt(实体ID, AcDb::kForWrite);
对实体数据的修改(set….) 用AcDb::kForWrite;
对实体数据的获取(get….) 用AcDb::kForRead; Pt.实体类函数 //通过ID获取指针
4. 封装的MmAdsEnt
MmAdsEnt entName;
rbBlk = acutBuildList(RTDXFO, _T(“INSERT”),0); MmAdsRBList
If(MmSelectEntity(_T(“请选择图块<退出>:”),entName,rbBlk) ==RTNORM) 实体的删除
1. 通过实体的ID删除实体
1) AcDbObjectPointer<AcDbEntity> pt(实体ID, AcDb::kForWrite); If(pt.openStatus() == Acad::eOk)
{
}
2)
AcDbEntity* pE;
acdbOpenObject(pE ,实体ID, AcDb::kForWrite, false);
Pt->erase();
1. 通过实体的ID获取实体的数据库类
AcDbEntity* pEn;
acdbOpenObject(pEn, 实体ID, AcDb::读写属性,false);
pEn->实体属性函数;
指针用完记得关闭
pEn->close();
1. 在界面上输入一个值,传回程序
If(acedGetReal(_T(“\n请输入一个数<提示>:”), &变量) ==RTNORM) { }
2. 在界面中对多个或单个实体的操作
MmAdsEnt
MmAdsRBList ent; ----获取单一实体类 rb = acutBuildList(RTDXFO, _T(“INSERT”), 0); -筛选选择的实体 _T(“INSERT”) 你要选择的实体
If(MmSelectEntity(_T(“\n…..”), ent, rb) == RTNORM)
{
}
1. AcDbVoidPtrArray 将实体拆分成N个单独部分,判断该实体与其他实体 的连接情况
2. AcDbExtents 在实体的周围空间中创建一个长方体
3. MmAdsEntSet 封装类,获取实体的集合
4. MmAdsRBList 实体链表封装类
5. AcDbPolyline 多线段实体类
6. AcGeScale3d 3D空间矢量,对实体的x、y、z操作
7. AcDbXline AutoCAD中的XLINE实体类型
1. 两点之间距离的判断
AcGePoint3d pt1,pt2;
Pt1.distanceTo(pt2);
距离为零的判断:
if(EQUAL_ZERO(Pt1.distanceTo(pt2)))
{}
2. 将块参照添加到块表空间
AcDbBlockReference*pRef=(AcDbBlockReference*)Jig.GetBlkRef()->clone();
if(pRef!=NULL)
{
AddToCurrentSpace(pRef);
}
3. 有些函数将传入的参数作为返回值
1) MmAdsEnt entName; MmAdsRBListrbBlk=acutBuildList(RTDXF0,_T("INSERT"),0); if(MmSelectEntity(_T(""),entName,rbBlk)!=RTNORM) return; entName.GetObjectId; 2) AcDbPolyline pEntpl; AcGePoint3d ptStart,ptEnd; pEntpl.getStartPoint(ptStart); pEntpl.getEndPoint(ptEnd);
4. 发送指令到AuToCAD的ObjectARX函数
acedPostCommend(_T(“命令名”));
5. MmGeBSPoint与AcGePoint3d的相互转换
AcGePoint3d pt;
MmGeBSPoint mpt = _PT(pt);
6. AcDbEntity与AcDbObject可以相互转换
AcDbObject Id;
AcDbEntity* pEn = (AcDbEntity*)Id;
反之 Id = pEn->id();
7. AcDbVoidPtrArray类创建对象后要记得释放
AcDbVoidPtrArray ptr;
ReleaseAcDbPtrArray(ptr);
8. MmAdsEntSetssEnt选择集兼容类
MmAdsRBListrb=acutBuildList(RTDXF0,_T("INSERT"),0); if(MmSelectEntities(_T("\n。。"),ssEnt,rb)!=RTNORM) {
return;
}
For(double i = 0;i < ssEnt.GetLength;i++)
{
ssEnt[i] //注意:i为long型
}
9. AcedGetRea获取AuToCAD传进的参数,用法:
Long dScale;
If(acedGetReal(_T(“\n。。”),&dScale) ==RTNORM) {}
10. AcGeScale3d 3D空间矢量 对实体的x、y、z进行操作: AcDbBlockReference pRef;
AcGeScale3d sc = pRef->scaleFactors();
sc.sx* = double; //double倍数
sc.sy* = double;
sc.sz* = double;
pRef->setScaleFactors(sc);
11. 获取点的模板
Ads_Point pt;
If(acedGetPoint(0, _(“\n请输入位置点<退出>:”), pt) != RTNORM)
Return;
acdbUcs2Wcs(pt, pt, false);
AcGePoint3d ptBase = asPnt3d(pt);
12. Ads_point与AcGePoint3d的相互转换
Ads_point -> AcGePoint3d;
pt3d = asPnt3d(pt);
AcGePoint3d -> ads_point
Pt[0] = pt3d[x];
Pt[1] = pt3d[y];
Pt[2] = pt3d[z];
C++ 常识总结
1.指针与引用之间的相互转换
Int *a; Int &b = *a;
Int& a; int* b = &a;
2.MFC添加控件的成员变量问题-未成功解决方案
1)点击控件添加成员变量无反应,检查所属对话框的ID是否在类中链接。
2)显示无法对某一ID添加成员变量,检查该控件的ID是否在添加后为修改,与MFC原库中重复的ID产生冲突即不可添加,例如:你的静态控件的ID为ID_STATIC,即不可添加成员变量。
3.修改控件的字体和大小;
在类的头文件中声明字体类:CFont ft;
在类的实现文件初始化函数中创建字体及大小
ft.CreatePointFont(200, _(“宋体”));
添加到控件中显示
M_Static.SetFont(&ft);
UpdateWindow;
第二篇:学习动态性能表(12)--v$db_object_cache
学习动态性能表
第12篇--V$DB_OBJECT_CACHE 2007.6.4
本视图提供对象在library cache(shared pool)中对象统计,提供比v$librarycache更多的细节,并且常用于找出shared pool中的活动对象。
v$db_object_cache中的常用列:
? OWNER:对象拥有者
?
?
?
?
?
? NAME:对象名称 TYPE:对象类型(如,sequence,procedure,function,package,package body,trigger) KEPT:告知是否对象常驻shared pool(yes/no),有赖于这个对象是否已经利用PL/SQL 过程DBMS_SHARED_POOL.KEEP“保持”(永久固定在内存中) SHARABLE_MEM:共享内存占用 PINS:当前执行对象的session数 LOCKS:当前锁定对象的session数
瞬间状态列:
下列列保持对象自初次加载起的统计信息:
? LOADS:对象被加载次数。
示例:
1.shared pool执行以及内存使用总计
下列查询显示出shared pool内存对不同类别的对象
同时也显示是否有对象通过DBMS_SHARED_POOL.KEEP()过程常驻shared pool。 SELECT type, kept, COUNT(*), SUM(sharable_mem)
FROM V$DB_OBJECT_CACHE
GROUP BY type, kept;
2.通过载入次数找出对象
SELECT owner, name sharable_mem, kept, loads
FROM V$DB_OBJECT_CACHE
WHERE loads > 1 ORDER BY loads DESC;
3.找出使用的内存超过10M并且不在常驻内存的对象。
SELECT owner, name, sharable_mem, kept
FROM V$DB_OBJECT_CACHE
WHERE sharable_mem > 102400 AND kept = 'NO'
ORDER BY sharable_mem DESC;