找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 769|回复: 9

[求助]:将实体转移到指定图层(附源码)

[复制链接]
发表于 2006-2-9 14:59:19 | 显示全部楼层 |阅读模式

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

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

×
请教个ARX的问题:
我已经在某个图层选中了一个闭合polyline线
我现在要把这个闭合polyline线转移到图层"1"中,
在ARX中的程序怎么实现?谢谢


Acad::ErrorStatus
getselectpoly(const char* szLayerName)
{// 得到模型空间的块表记录,并遍历它得到所需要的实体
        Acad::ErrorStatus es = Acad::eOk;
        createnewlayer(szLayerName);
        AcDbBlockTable *pBlockTable = NULL;
    es = acdbHostApplicationServices()->workingDatabase()
        ->getSymbolTable(pBlockTable, AcDb::kForRead);
        if (es != Acad::eOk) {
                acutPrintf("\n以读方式打开块表操作失败!");
                return es;
        }
    AcDbBlockTableRecord *pBlockTableRecord = NULL;
    es = pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,
        AcDb::kForRead);
        if (es != Acad::eOk) {
                pBlockTable->close();
                acutPrintf("\n以读方式打开块表记录操作失败!");
                return es;
        }
    pBlockTable->close();
       
    AcDbBlockTableRecordIterator *pBlockIterator = NULL;
    pBlockTableRecord->newIterator(pBlockIterator);
       
        AcDbBlockTableRecordIterator *pBlkTblRcdItr;        //生成块表记录的迭代器
        pBlockTableRecord->newIterator(pBlkTblRcdItr);
        AcDbEntity *pEnt;        //遍历法获得并打印每一个实体的类名
        int  n=0,m=1,x=0;//,NoPl=0;
        for (pBlkTblRcdItr->start(); !pBlkTblRcdItr->done(); pBlkTblRcdItr->step())
        {                       
                pBlkTblRcdItr->getEntity(pEnt, AcDb::kForRead);
        //        acutPrintf("\npEnt is: %s\n", (pEnt->isA())->name());        
                if (pEnt->isKindOf(AcDbPolyline::desc()))
                {
        AcDbPolyline *pPLine;
        pPLine=AcDbPolyline::cast(pEnt);
        if(pPLine->isClosed()!=0)    //筛选闭合
                        {       
以上代码为遍历所有图层  找出闭合的AcDbPolyline
我现在需要把这个pPLine实体转移到指定的"建筑功能线"层?
请教下怎么实现?(希望不吝指教)

先把实现该功能的lisp代码附上:
快速改变对象所在图层

;选择对象后,点击目标层上任一对象,即将所选转移到该对象所在层

(defun C:CL(/ ss e n)
(princ "改变实体所在图层,请选择要修改的实体...")
(setq ss (ssget))
(if ss
   (progn
     (setq e (car (entsel "选择目标层上任一实体:")))   ;car不能少!
     (if e
       (progn
         (setq e (entget e))
         (setq n (cdr (assoc 8 e)))
         (command "chprop" ss "" "C" "BYLAYER" "")
         (command "chprop" ss "" "LT" "BYLAYER" "")
         (command "chprop" ss "" "LA" n "")
         (princ (strcat "\n实体改到图层 : " n "." "\n其颜色线型属性为 BYLAYER."))
       )
     );end if e
     (princ)
   )
);end if ss
);end CL (Change Layer)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-2-9 15:14:42 | 显示全部楼层
我晕,有这么麻烦么?
acedSSGet 用一下不就完了?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-9 15:21:12 | 显示全部楼层
我问的是快速改变对象所在图层?不是对指定层的物体用选择集合进行选择,能给个提示吗?谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-2-9 15:43:11 | 显示全部楼层
设置图层 setLayer  不就行了么?什么叫快速?怎么个快速法?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-2-9 16:26:19 | 显示全部楼层
对呀,直接设置实体的layer就可以了
pPoly->setLayer(xxx);
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

发表于 2006-2-10 10:43:37 | 显示全部楼层
直接设置实体的layer就可以了
pPoly->setLayer(xxx);
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 01:07 , Processed in 0.420693 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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