Salut, Il n'y a pas moyen de filtrer directement par attribut (que ce soit valeur ou étiquette). Il faut donc ouvrir le bloc et parcourir les attributs. Ceci peut se faire a posteriori une fois la sélection faite ou pendant la sélection en utilisant l’évènement SelectionAdded. [CommandMethod("CMD")]
public void TestCommand()
{
Editor ed = AcAp.DocumentManager.MdiActiveDocument.Editor;
TypedValue[] filter = { new TypedValue(0, "INSERT"), new TypedValue(66, 1) };
ed.SelectionAdded += onSelectionAdded;
PromptSelectionResult psr = ed.GetSelection(new SelectionFilter(filter));
ed.SelectionAdded -= onSelectionAdded;
if (psr.Status == PromptStatus.OK)
ed.SetImpliedSelection(psr.Value);
}
void onSelectionAdded(object sender, SelectionAddedEventArgs e)
{
Document doc = ((Editor)sender).Document;
using (Transaction tr = doc.TransactionManager.StartOpenCloseTransaction())
{
ObjectId[] ids = e.AddedObjects.GetObjectIds();
for (int i = 0; i < ids.Length; i++)
{
BlockReference br =
(BlockReference)tr.GetObject(ids[i], OpenMode.ForRead);
foreach (ObjectId id in br.AttributeCollection)
{
AttributeReference att =
(AttributeReference)tr.GetObject(id, OpenMode.ForRead);
if (att.Tag != "TOTO")
{
e.Remove(i);
break;
}
}
}
tr.Commit();
}
}