找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1541|回复: 3

[求助]:vs2005+objectarx2007 如何实现关闭wipeout边

[复制链接]
发表于 2009-6-20 15:26:15 | 显示全部楼层 |阅读模式

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

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

×
我创建wipeout的代码如下:
static AcDbObjectId PostToModelSpace(AcDbEntity *pEnt)
        {
                AcDbBlockTable *pBlockTable;
                acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable,AcDb::kForRead);

                AcDbBlockTableRecord *pBlockTableRecord;
                pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);

                AcDbObjectId entId;
                Acad::ErrorStatus es=pBlockTableRecord->appendAcDbEntity(entId,pEnt);

                pBlockTable->close();
                pBlockTableRecord->close();
                pEnt->close();

                return entId;
        }

        static void trans3DTo2D(AcGePoint3dArray& arr3d, AcGePoint2dArray& arr2d)
        {
                for(int i = 0; i < arr3d.length(); i++)
                {
                        AcGePoint3d pt3d = arr3d.at(i);
                        AcGePoint2d pt2d(pt3d.x, pt3d.y);
                        arr2d.append(pt2d);
                }
        }

        static void wptest()
        {
                AcGePoint3d pt1;
                AcGePoint3dArray cbPtAry;

                pt1[0] = 300; pt1[1] = 300; pt1[2] = 0;
                cbPtAry.append(pt1);

                pt1[0] = 700; pt1[1] = 300; pt1[2] = 0;
                cbPtAry.append(pt1);

                pt1[0] = 700; pt1[1] = 100; pt1[2] = 0;
                cbPtAry.append(pt1);

                pt1[0] = 300; pt1[1] = 100; pt1[2] = 0;
                cbPtAry.append(pt1);

                pt1[0] = 300;pt1[1] = 300;pt1[2] = 0;
                cbPtAry.append(pt1);

                // TODO: Implement the command

                AcRxClass* pClass = AcRxClass::cast(acrxClassDictionary->at(L"AcDbWipeout"));
                AcDbEntity *pWipeOut=(AcDbEntity *)pClass->create();

                AcDbRasterImage *pImage = AcDbRasterImage::cast(pWipeOut);

                // Set clip boundary
                AcGePoint3d origin;
                //AcGeVector3d u;
                //AcGeVector3d v;
                AcGeVector3d u(400,0,0);
                AcGeVector3d v(0,400,0);

                pImage->getOrientation(origin, u, v);
                pImage->setOrientation(origin, u, v);
                pImage->setClipBoundaryToWholeImage();

                AcGeMatrix3d PixelToModel,ModelToPixel;
                pImage->getPixelToModelTransform(PixelToModel);
                ModelToPixel=PixelToModel.invert();

                for(int i=0;i< cbPtAry.length();i++)
                {
                        cbPtAry.transformBy(ModelToPixel);
                }

                AcGePoint2dArray poly2d;
                //XdGeUtils::trans3DTo2D(&cbPtAry,poly2d);
                trans3DTo2D(cbPtAry,poly2d);

                pImage->setClipBoundary(AcDbRasterImage::kPoly,poly2d);
                pImage->setDisplayOpt(AcDbRasterImage::kTransparent,Adesk::kTrue);
                pImage->setDisplayOpt(AcDbRasterImage::kShow,Adesk::kFalse );

                pWipeOut=(AcDbEntity *)pImage;

                //if(PostToModelSpace(pImage)==Acad::eOk)
                //if(appendToModelSpace(pWipeOut)==Acad::eOk)
                PostToModelSpace(pImage);
                pImage->close();
                //pWipeOut->close();


                acutPrintf(L"\nYes,append");
        }

        // - GJwipeout._WO command (do not rename)
        static void GJwipeout_WO(void)
        {
                // Add your code for command GJwipeout._WO here
                wptest();
        }

我知道用cad的wipeout+F命令可以关闭边框,但我想通过程序实现,请各位大虾不吝赐教!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2009-6-24 19:42:40 | 显示全部楼层
我也用过这样的问题
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2009-7-6 16:29:16 | 显示全部楼层
AcDbDatabase的命名对象字典中,与“ACAD_WIPEOUT_VARS”为主键的对象中保存着“AcDbWipeout”对象是否显示边框的标记变量,这个变量的DXF组码为70,对应的变量类型为16位短整型,把这个变量的值设为1就显示边框,设为0则隐藏边框。
如果采用特殊手段修改了这个变量,则需要手动刷新这个数据库中所有AcDbWipeout对象。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 10:53 , Processed in 0.190131 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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