找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2395|回复: 15

[ARX函数]://添加实体到数据库

[复制链接]
发表于 2004-12-10 14:23:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
//添加实体到数据库
AcDbObjectId CLjDwg::AddEntity(AcDbEntity* pEnt,
                                                                AcDbDatabase* pDb,
                                                                BOOL bClose)
{
        AcDbObjectId idNew=AcDbObjectId::kNull;
        if(pDb==NULL)
#ifdef __R14_       
                pDb=acdbCurDwg();
#else
                pDb=acdbHostApplicationServices()->workingDatabase();
#endif
        AcDbBlockTable *pTable=NULL;
        Acad::ErrorStatus Error=pDb->getBlockTable(pTable, AcDb::kForRead);
        if(pTable==NULL)
        {
                AfxMessageBox("块表打开错误!");
                return idNew;
        }
        AcDbBlockTableRecord *pRecord=NULL;
        Error=pTable->getAt(ACDB_MODEL_SPACE,pRecord,AcDb::kForWrite);
        pTable->close();
        if(pRecord==NULL)
        {
                AfxMessageBox("块纪录打开错误!");
                return idNew;
        }               

        pEnt->setColorIndex(256);
        pEnt->setLinetype("BYLAYER");
#ifndef __R14_       
        pEnt->setLineWeight(AcDb::kLnWtByLayer);
#endif

        Error=pRecord->appendAcDbEntity(idNew,pEnt);
        pRecord->close();
        if(bClose)
                pEnt->close();
        return idNew;
}
有十个人跟贴,我就继续发函数
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-12-10 15:28:53 | 显示全部楼层
这太简单了
发点有难度的可以吗?
讲一下Xdata的作用之类的怎样
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-12-10 16:03:12 | 显示全部楼层
//带扩展数据
//添加线到数据库
//输入参数:const AcGePoint3d ptStart  起点
//                    const AcGePoint3d ptEnd    终点
//                    const AcDbObjectId idLayer 图层
//                        const resbuf* xdata        扩展数据  
//                        AcDbDatabase* pDb          数据库指针
AcDbObjectId CLjDwg::AddLine(const AcGePoint3d ptStart,
                                                          const AcGePoint3d ptEnd,
                                                          const AcDbObjectId idLayer,
                                                          const resbuf* xdata,
                                                          AcDbDatabase* pDb)
{
        double dLen=CGeometry3D::GetLength(ptStart,ptEnd);
        if(dLen<=ZERO)
                return AcDbObjectId::kNull;
        AcDbLine* pLine=new AcDbLine(ptStart,ptEnd);
        pLine->setLayer(idLayer);
        AcDbObjectId idLine=AddEntity(pLine,pDb);
        pLine->setXData(xdata);
        pLine->close();
        return idLine;
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-11 11:08:40 | 显示全部楼层
很好,考虑了版本问题,涉及文档时,又如何考虑版本问题呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 70个

财富等级: 招财进宝

发表于 2004-12-11 16:46:12 | 显示全部楼层
我想学习,算我一个。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-12-12 12:29:13 | 显示全部楼层
//添加MText到数据库
AcDbObjectId CLjDwg::AddMText(const AcGePoint3d ptCenter,const CString strText,
const double dHeight,
const AcDbObjectId idStyle,
const AcDbObjectId idTextLayer,
                                                           const resbuf* xdata,
                                                           AcDbDatabase* pDb)
{       
        AcDbObjectId idNew=AcDbObjectId::kNull;
        if(strText=="")
                return idNew;

        AcDbMText* pMText=new AcDbMText;
        pMText->setLocation(ptCenter);
#ifdef __R2002_
        pMText->setHorizontalMode(AcDb::kTextCenter);
        pMText->setVerticalMode(AcDb::kTextVertMid);
#else
        pMText->setAttachment(AcDbMText::kMiddleCenter);
#endif
        pMText->setContents((LPCTSTR)strText);       
        pMText->setTextStyle(idStyle);
        pMText->setTextHeight(dHeight);
        pMText->setLayer(idTextLayer);
        idNew=AddEntity(pMText,pDb);
        pMText->setXData(xdata);
        pMText->close();
       
        return idNew;
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-13 08:46:09 | 显示全部楼层
有没有复杂点的例子,比如说我想知道:
ARX中如何控制视口对象模型的坐标参数以及坐标系的旋转参数?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-12-13 13:32:13 | 显示全部楼层
把实体从世界坐标系转成用户坐标系
void CLjDwg::ObjectWcs2Ucs(AcDbObjectIdArray& idArray)
{       
        AcGeMatrix3d xform;
        acdbUcsMatrix(xform);
               
        ads_name ssname;
        ads_ssadd(NULL,NULL,ssname);
        for(int i=0;i<idArray.length();i++)
        {
                ads_name locname;
                AcDbObjectId id=idArray.at(i);
               
                acdbGetAdsName(locname,id);
                ads_redraw(locname,2);
                ads_ssadd(locname,ssname,ssname);
                ads_ssfree(locname);               
        }       
        ads_xformss(ssname,xform.entry);
        ads_ssfree(ssname);       
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-14 08:50:06 | 显示全部楼层
这是坐标系的转换问题,
我想知道是哪些函数控制着坐标系的旋转参数。
有这方面的例子么?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-12-14 09:22:18 | 显示全部楼层
先通过AcGeMatrix3d 中的函数获得坐标系

AcGeMatrix3d::getCoordSystem Function
void getCoordSystem(AcGePoint3d& origin,AcGeVector3d& xAxis,
AcGeVector3d& yAxis,AcGeVector3d& zAxis) const;

origin
输出坐标系原点
xAxis
输出矢量定义 x 轴
yAxis
输出矢量定义 y轴
zAxis
输出矢量定义 z 轴

此函数用于输出参数 origin, xAxis, yAxis, and zAxis 对照另一坐标系映射到标准坐标系以原点另一坐标系映射到标准坐标系以原点为(0, 0, 0)和轴 (1, 0, 0), (0, 1, 0), 和 (0, 0,1)的原点和轴。

再做矩阵旋转变换
后setCoordSystem
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-14 10:44:50 | 显示全部楼层
楼主,能不能把你的例子通过邮件的形式发给我,我是新手,没有爱心币,不能下载东西,真郁闷,我的email:shaoqiang_1983@sohu.com。 谢谢了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-14 12:26:52 | 显示全部楼层
感谢jingelou 。
能否进一步说说“矩阵旋转变换”,或者据个例子。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-12-14 12:59:15 | 显示全部楼层
具体的我没试过,看你要怎么旋转了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-12 16:43:07 | 显示全部楼层
有没有这方面的例子,老大,lxkenger@163.com
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-12 21:52:35 | 显示全部楼层
很好啊,我顶你!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-24 18:20 , Processed in 0.380977 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表