How could I get the ObjectIdCollection of all entities (points, polyline) in a certain layer?
I am using the following code at this moment.
private ObjectIdCollection GetEntitiesOnLayer(string layerName)
{
Editor ed = doc.Editor;
TypedValue[] tvs = new TypedValue[1] { new TypedValue((int)DxfCode.LayerName, layerName) };
SelectionFilter sf = new SelectionFilter(tvs);
PromptSelectionResult psr = ed.SelectAll(sf);
if (psr.Status == PromptStatus.OK)
return new ObjectIdCollection(psr.Value.GetObjectIds());
else
return new ObjectIdCollection();
}
But it seems the function fetches more ObjectId than I expected.
For example, if I draw 3 points and 2 polylines in "A" layer.
ObjectIdCollection obc = GetEntitiesOnLayer("A");
int i = obc.Count;
I was expecting i to be 5 (3 points and 2 polylines), but i seems to be more than 5.
Any thought?
Solved! Go to Solution.
Solved by Hallex. Go to Solution.
Your code is working good on my end
Maybe you need to add filter on entities in
the current layout, just a guess, e.g:
TypedValue [] tvs = newTypedValue[2] { newTypedValue((int)DxfCode.LayerName, layerName),
newTypedValue((int)DxfCode.LayoutName, "Model") };
That would be my guess as well. SelectAll will return entities that are not in the current space, but otherwise your code should be fine, and I've never had a simple selection filter give me entities that did not meet the criteria.