找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 168|回复: 0

[每日一码] ADSFUNCTION VPLAYEROFF

[复制链接]

0

主题

0

回帖

26

积分

管理员

积分
26
发表于 2024-2-26 10:33:30 | 显示全部楼层 |阅读模式
A/Vlisp 中队Viewport的图层冻结解冻比较麻烦,ARX很简单
(vplyroff (car (entsel)) 0 "1" "2") 或者 (vplyroff (car (entsel)) 0 '("1" "2"))
0 - 冻结 ,1 - 解冻 ,2 - 全部解冻
  1. static int ads采用VPLyrOff(void)
  2.         {
  3.                 struct resbuf *args=acedGetArgs();
  4.                 if (args==NULL || args->restype!=RTENAME)
  5.                 {
  6.                         return RTNIL;
  7.                 }
  8.                 ads采用name vpEnt;
  9.                 ads采用name采用set(args->resval.rlname,vpEnt);
  10.                 AcDbObjectId id;
  11.                 acdbGetObjectId(id,vpEnt);
  12.                 AcDbEntity* pEnt=NULL;               
  13.                 if (acdbOpenAcDbEntity(pEnt,id,AcDb::kForWrite)!=Acad::eOk)
  14.                 {
  15.                         pEnt->close();
  16.                         return RTNIL;
  17.                 }
  18.                 if (!pEnt->isKindOf(AcDbViewport::desc()))
  19.                 {
  20.                         pEnt->close();
  21.                         return RTNIL;
  22.                 }
  23.                 AcDbViewport* pViewport=NULL;
  24.                 pViewport=AcDbViewport::cast(pEnt);
  25.                 if (pViewport==NULL)
  26.                 {
  27.                         pViewport->close();
  28.                         pEnt->close();
  29.                         return RTNORM;
  30.                 }
  31.                 args=args->rbnext;
  32.                 if (args->restype!=RTSHORT && (args->resval.rint!=0 || args->resval.rint!=1 || args->resval.rint!=2))
  33.                 {
  34.                         pViewport->close();
  35.                         pEnt->close();
  36.                         return RTNIL;
  37.                 }
  38.                 int vInt=args->resval.rint;
  39.                 args=args->rbnext;
  40.                 AcDbObjectIdArray lyrIds;
  41.                 if (vInt<2)
  42.                 {
  43.                         if (args!=NULL || args->restype!=RTSTR)
  44.                         {
  45.                                 pViewport->close();
  46.                                 pEnt->close();
  47.                                 return RTNIL;
  48.                         }                       
  49.                         AcDbDatabase* pDb=acdbHostApplicationServices()->workingDatabase();
  50.                         for (;args!=NULL;args=args->rbnext)
  51.                         {
  52.                                 if (args->restype==RTSTR)
  53.                                 {
  54.                                         ACHAR* name=args->resval.rstring;
  55.                                         AcDbLayerTableRecordPointer lyrId(name,pDb,AcDb::kForRead);
  56.                                         if (lyrId.openStatus()==Acad::eOk)
  57.                                         {
  58.                                                 lyrIds.append(lyrId->objectId());
  59.                                         }
  60.                                 }
  61.                         }
  62.                         if (lyrIds.isEmpty())
  63.                         {
  64.                                 pViewport->close();
  65.                                 pEnt->close();
  66.                                 return RTNORM;
  67.                         }
  68.                 }               
  69.                 switch(vInt)
  70.                 {
  71.                 case 0:
  72.                         {
  73.                                 if (pViewport->freezeLayersInViewport(lyrIds)==Acad::eOk)
  74.                                 {
  75.                                         pViewport->close();
  76.                                         pEnt->close();
  77.                                         return acedRetT();
  78.                                 }
  79.                                 break;
  80.                         }
  81.                 case 1:
  82.                         {
  83.                                 if (pViewport->thawLayersInViewport(lyrIds)==Acad::eOk)
  84.                                 {
  85.                                         pViewport->close();
  86.                                         pEnt->close();
  87.                                         return acedRetT();
  88.                                 }
  89.                                 break;
  90.                         }
  91.                 default:
  92.                         {
  93.                                 if (pViewport->thawAllLayersInViewport()==Acad::eOk)
  94.                                 {
  95.                                         pViewport->close();
  96.                                         pEnt->close();
  97.                                         return acedRetT();
  98.                                 }                              
  99.                                 break;
  100.                         }
  101.                 }               
  102.                 pViewport->close();
  103.                 pEnt->close();
  104.                 return RTNORM;
  105.         }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-28 13:43 , Processed in 0.188285 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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