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