查看单个帖子
旧 2009-05-07, 05:00 PM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】he Problem About Select Objects By Layer

the problem about select objects by layer
the problem about select objects by layer
hi,all
in dwgdirect 2.20,select objects by layer:
code:
bool odexeditorobject:nmouseleftbuttonclick(unsigned int nflags, int x, int y,
odexeditorobject* pdragcallback,bool bselectenable)
{
try
{
odgepoint3d pt = toeyetoworld(x, y);
if( hasselection() )
{
if( m_pgrippoints.get() && m_pgrippoints->gripedit(m_pcmdctx, pt) )
return true;
if(pdragcallback)
{
oddbselectionsetptr pwsset = workingsset();

oddbselectionsetptr psset = oddbselectionset::select(activevpid(), 1, &pt);
oddbselectionsetiteratorptr piter = psset->newiterator();
while(!piter->done())
{
if(pwsset->ismember(piter->objectid()))
{
piter.release();
break;
}
piter->next();
}
if(piter.isnull())
{
// if(pdragcallback->begindragcallback(pt))
return true;
}
}
}
oddbuserio* pio = m_pcmdctx->dbuserio();
pio->setlastpoint(pt);
pio->setpickfirst(0);
int options = oded::kselpicklastpoint|
oded::kselsinglepass|
oded::kselleavehighlighted;
setbit(options, oded::kselremove, getbit(nflags, kshiftisdown));
oddbselectionsetptr psset = pio->select(odstring::kempty, options, workingsset());
odgsview* pview = activeview();
if(m_pgrippoints.get())
pview->erase(m_pgrippoints);
if ( psset->numentities()>0 )
{
m_pgrippoints = odrxcreateobject( dd_t("grippointscloning") );
if ( m_pgrippoints.get() )
{
oddbselectionsetiteratorptr piter = psset->newiterator();
while ( !piter->done() )
{
// messagebox(null,oddbentity::cast(piter->objectid().openobject())->layer(),_t("aaa"),mb_ok);
if (oddbentity::cast(piter->objectid().openobject())->layer().find(dd_t("mackup"))!=-1 || oddbentity::cast(piter->objectid().openobject())->layer()=="")
{
if (bselectenable)
{
m_pgrippoints->addentity( piter->objectid() );
}
}
piter->next();
}
pview->add(m_pgrippoints, 0);
}
}
setworkingsset(psset);
}
catch(const odedcancel&)
{
}
catch(const oderror& e)
{
m_pcmdctx->userio()->putstring(e.description());
return false;
}
return true;
}
but in dwgdirect 2.3.1,the select object in exgripmanager.cpp,how can i implement the function?
please help me!
best regards
in 2.4 the code below selects block references on layer "thelayertoselect":
code:
odstring inserttype("insert");
odresbufptr rb = odresbuf::newrb(0, inserttype);
odstring layername ("thelayertoselect");
rb->setnext(odresbuf::newrb(8, layername));
oddbselectionsetptr psset = oddbselectionset::select(pdb, rb);
int count = psset->numentities();
and this code - all entities on the layer:
code:
odresbufptr rb;
odstring layername ("thelayertoselect");
rb = odresbuf::newrb(8, layername);
oddbselectionsetptr psset = oddbselectionset::select(pdb, rb);
int count = psset->numentities();
the rb chain supplied specifies the dxf group codes that must match for selected entities.
sergey slezkin
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)