明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5087|回复: 13

批量把所有图层放入到0层

  [复制链接]
发表于 2007-2-2 11:28:00 | 显示全部楼层 |阅读模式
如何批量把所有的图层放入到0层并进行CAD中的“pu”命令
 楼主| 发表于 2007-2-3 18:26:00 | 显示全部楼层

删除一个图层上的所有实体是用如下代码的,那么放在0层是怎么操作的呢

void lcdlg::delSS(char* nLayerName,AcDbObjectIdArray& nIDs)
{
 //AfxMessageBox(nLayerName);
 Acad::ErrorStatus es = Acad::eOk;
 ads_name ents;
 struct resbuf *rb;
 rb=acutNewRb(AcDb::kDxfLayerName);
 rb->restype=8;
 rb->resval.rstring=(char*)nLayerName;
 rb->rbnext=NULL;
 acedSSGet("X",NULL,NULL,rb,ents);
 long entNums=0;
 acedSSLength(ents,&entNums);
 if (entNums == 0)
  es = Acad::eInvalidInput;
 else
 {
  for (long a = 0; a < entNums ; a ++)
  {
   AcDbObjectId  objId;
   ads_name      ent;
   AcDbObject* obj;
   acedSSName(ents,a,ent);
   acdbGetObjectId(objId, ent);
   acdbOpenObject((AcDbObject *&) obj,objId,AcDb::kForWrite);
   nIDs.append(objId);
   obj->erase();
   nIDs.append(objId);
  }
 }
 acedSSFree(ents);
 acutRelRb(rb);
}

 楼主| 发表于 2007-2-6 20:52:00 | 显示全部楼层

我将上面代码做了如下修改,没有提示错误,但是没有执行。有人帮忙看下吗?

void lcdlg::delSS(char* nLayerName,AcDbObjectIdArray& nIDs)
{
 //AfxMessageBox(nLayerName);
 Acad::ErrorStatus es = Acad::eOk;
 ads_name ents;
 struct resbuf *rb;

 rb=acutNewRb(AcDb::kDxfLayerName);
 rb->restype=8;
 rb->resval.rstring=(char*)nLayerName;
 rb->rbnext=NULL;
 acedSSGet("X",NULL,NULL,rb,ents);
 long entNums=0;
 acedSSLength(ents,&entNums);
 if (entNums == 0)
  es = Acad::eInvalidInput;
 else
 {
  for (long a = 0; a < entNums ; a ++)
  {
   AcDbObjectId  objId;
   ads_name      ent;
   AcDbObject* obj;
   AcDbEntity *pE;
   acedSSName(ents,a,ent);
   acdbGetObjectId(objId, ent);
   acdbOpenObject(pE,objId,AcDb::kForWrite,false);
  // nIDs.append(objId);
   pE->setLayer("0");
   pE->close;
  // nIDs.append(objId);
  }
 }
 acedSSFree(ents);
 acutRelRb(rb);
}

 楼主| 发表于 2007-2-7 20:15:00 | 显示全部楼层

人呢,没有人回答下的吗?

发表于 2007-2-8 09:41:00 | 显示全部楼层
看代码好像应该没什么问题啊,看一下你所选的图层是不是一个锁定的图层,锁定图层上的对象是不允许修改的
发表于 2007-2-8 09:51:00 | 显示全部楼层
本帖最后由 作者 于 2007-2-8 9:54:39 编辑

void DelSS(const char *sLay)
{
 ads_name ss;
 struct resbuf *rb=acutBuildList(8,sLay,NULL);
 long nLen=0;
 if(acedSSGet("X",NULL,NULL,rb,ss)!=RTNORM)
 {
  acutRelRb(rb);
  return;
 }
  acutRelRb(rb);

 acedSSLength(ss,&nLen);
 for(long n=0L;n<nLen;n++)
 {
  ads_name ent;
  acedSSName(ss,n,ent);
  AcDbObjectId idEnt;
  acdbGetObjectId(idEnt,ent);
  AcDbEntity *pEnt=NULL;
  if(acdbOpenObject(pEnt,idEnt,AcDb::kForWrite)==Acad::eOk)
  {
   pEnt->setLayer("0");
   pEnt->close();
  }
 }
 acedSSFree(ss);
}
 楼主| 发表于 2007-2-8 20:21:00 | 显示全部楼层

为什么还是不行呢

void lcdlg::delSS(char* nLayerName,AcDbObjectIdArray& nIDs)
{
 Acad::ErrorStatus es = Acad::eOk;
 ads_name ents;
 struct resbuf *rb;
 struct resbuf blc;
 AcDbEntity *pE;

 rb=acutNewRb(AcDb::kDxfLayerName);
 rb->restype=8;
 rb->resval.rstring=(char*)nLayerName;
 rb->rbnext=NULL;
 acedSSGet("X",NULL,NULL,rb,ents);

// long entNums=0;
 long entNums;

 acedSSLength(ents,&entNums);
 if (entNums == 0)
  es = Acad::eInvalidInput;
 else
 {
  for (long a = 0; a < entNums ; a ++)
  {
   AcDbObjectId  objId;
   ads_name      ent;
   AcDbObject* obj;
   
   acedSSName(ents,a,ent);
   acdbGetObjectId(objId, ent);
   acdbOpenObject(pE,objId,AcDb::kForWrite,false);
   nIDs.append(objId);

   pE->setLayer("0");
   pE->close;
      obj->close;
   nIDs.append(objId);
  }
 }
 acedSSFree(ents);
 blc.restype = RTSTR;
    blc.resval.rstring = "0";
    acedSetVar("CLAYER",&blc);//设置当前图层为0层 

 AcDbLayerTable * pLayerTbl;//定义层表指针
    acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pLayerTbl, AcDb::kForWrite);
    
    AcDbLayerTableRecord * pLayerTblRcd; //定义层表记录指针
    if ( Acad::eOk == pLayerTbl->getAt((char*)nLayerName, pLayerTblRcd , AcDb::kForWrite))
    {
     pLayerTblRcd->erase(true);//删除图层
    }   
    pLayerTblRcd->close();
    pLayerTbl->close();
    acutRelRb(rb);
}

 楼主| 发表于 2007-2-8 20:46:00 | 显示全部楼层

按照上面的方法没有出任何错误,但是也没有执行任何操作,包括最后最后从层表中删除图层也没有执行,为什么呢

发表于 2007-2-9 12:30:00 | 显示全部楼层

前面给你的代码是可以的啊,我试过了

但是不能应用于被锁定的层,锁定的层是不允许修改的

发表于 2007-2-9 12:41:00 | 显示全部楼层

我按照你的代码试过了,结果是可以改变图层的。看来你不能从代码找问题了,可能是别的问题。

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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