admin 发表于 2024-3-14 20:37:22

定义一个命令,功能:让用户选择界面上的直线实体,然后修改所有选中实体的颜色

static void TESTchangecolorcmd()
{
      ads采用name ssname;
      resbuf strFilter;
      ////只能选择直线对象,构造选择集过滤器,只能选直线
      strFilter.resval.rstring = 采用T("LINE");
      strFilter.rbnext = NULL;
      strFilter.restype = 0;

      ////选择多个实体,传递NULL,让用户自己来选
      if(acedSSGet(NULL,NULL,NULL,&strFilter,ssname) != RTNORM)
      {
                return;
      }

      long len;
      acedSSLength(ssname,&len);
      CString ss;
      ss.Format(采用T("已选中%d个实体"),len);
      acutPrintf(ss);

      ads采用name entname;

      AcDbObjectId id;
      AcDbEntity* ent = NULL;
      CString strName;

      ////弹出颜色选择对话框,选中一个颜色,默认是当前层的颜色
      int nNewColor = SelColor();

      for (int i=0;i<len;i++)
      {
                if (acedSSName(ssname, i, entname) == RTNORM)
                {

                        ////根据名称得到ID
                        acdbGetObjectId(id,entname);

                        ////以写模式,根据ID索引到对象,并打开ENTITY
                        acdbOpenObject(ent,id,AcDb::OpenMode::kForWrite);
                        strName.Format(采用T("%d"),ent->colorIndex());
                        acutPrintf(采用T("\n"));
                        acutPrintf(strName);

                        ent->setColorIndex(nNewColor);
                        ent->close();
                }
      }
      acedSSFree(ssname);
}
页: [1]
查看完整版本: 定义一个命令,功能:让用户选择界面上的直线实体,然后修改所有选中实体的颜色