Author Topic: Layer Selection Filter  (Read 1675 times)

0 Members and 1 Guest are viewing this topic.

chobo

  • Newt
  • Posts: 24
Layer Selection Filter
« on: July 21, 2014, 11:37:33 AM »
why is below code not working ?

Code - vb.net: [Select]
  1.     <CommandMethod("TEST")> _
  2.     Public Shared Sub FilterCircles()
  3.         Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
  4.  
  5.         Dim tvArr() As TypedValue = { _
  6.          New TypedValue(CInt(DxfCode.Operator), "<AND"), _
  7.          New TypedValue(CInt(DxfCode.Start), "CIRCLE"), _
  8.          New TypedValue(CInt(DxfCode.Operator), "<>"), _
  9.          New TypedValue(CInt(DxfCode.LayerName), "1"), _
  10.          New TypedValue(CInt(DxfCode.Operator), "AND>") _
  11.         }
  12.  
  13.         Dim psRes As PromptSelectionResult = ed.SelectAll(New SelectionFilter(tvArr))
  14.         If psRes.Status = PromptStatus.OK Then
  15.             ed.WriteMessage("Number of objects selected: {0}", psRes.Value.Count)
  16.         End If
  17.     End Sub
  18.  

gile

  • Gator
  • Posts: 2507
  • Marseille, France
Re: Layer Selection Filter
« Reply #1 on: July 21, 2014, 01:21:56 PM »
Hi,

Your code doesn't work because relational filters as (CInt(DxfCode.Operator), "<>") or (-4, "<>") only work with numerical values.

Use logical grouping with "NOT" (putting the whole filter list in a "AND" grouping is unusefull because it's the default).

Code - vb.net: [Select]
  1. Dim tvArr() As TypedValue = { _
  2.     New TypedValue(0, "CIRCLE"),  _
  3.     New typedValue(-4, "<NOT"), _
  4.     New TypedValue(8, "1"), _
  5.     New TypedValue(-4, "NOT>") _
  6. }

Or, more concisely, use wildcard patterns:
Code - vb.net: [Select]
  1. Dim tvArr() As TypedValue = { New TypedValue(0, "CIRCLE"),  New TypedValue(8, "~1") }
« Last Edit: July 21, 2014, 06:20:28 PM by gile »
Speaking English as a French Frog

chobo

  • Newt
  • Posts: 24
Re: Layer Selection Filter
« Reply #2 on: July 21, 2014, 11:41:48 PM »
That's the reason !!
Thank you gile, I really appreciate it.