Code sample Home

The drawing "LEDs with attributes.lcd" contains 25 block references representing LEDs. The below function is being called many times to sequentially switch light on\off of each LED.
Download Demo video to see how the function works.

//-----------------------------------------------
void DemoBlockAttLED (HANDLE hLcWnd)
{
  static int Addr = 0;
  int StartAddr, EndAddr;
  HANDLE hBlock;

  // get a block, linked with CAD window
  hBlock = lcPropGetHandle( hLcWnd, LC_PROP_WND_VIEWBLOCK );

  StartAddr = 101;
  EndAddr = 125;
  // set lights by LED address
  if (Addr == 0){
    // all LEDs off
    SetLED( hBlock, 0, false );
    Addr = StartAddr;
  }else{
    if (Addr > EndAddr){
      // all LEDs on
      SetLED( hBlock, 0, true );
      Addr = 0;
    }else{
      if (Addr == StartAddr){
        SetLED( hBlock, Addr, true );
      }else{
        SetLED( hBlock, Addr-1, false );
        SetLED( hBlock, Addr, true );
      }
      ++Addr;
    }
  }
  // update view
  lcWndRedraw( hLcWnd ); 
}

//-----------------------------------------------
bool SetLED (HANDLE hBlock, int Addr, bool On)
{
  HANDLE hEnt;
  WCHAR  szValue[32];
  int    Color;

  if (On){
    // color for Light ON
    Color = lcColorRGB( 255, 50, 0 );
  }else{
    // color for Light OFF
    Color = lcColorRGB( 70, 70, 40 );
  }

  if (Addr == 0){
    // select all BlockRefs with Tag "DMXNo"
    hEnt = lcBlockGetBlkRefByTag( hBlock, 0, L"DMXNo", L"", true );
    if (hEnt > 0){
      // set color for selected entities
      hEnt = lcBlockGetFirstSel( hBlock );
      while( hEnt != 0){
        lcPropPutInt( hEnt, LC_PROP_ENT_COLOR, Color );
        hEnt = lcBlockGetNextSel( hBlock );
      }
      // unselect all entities
      lcBlockUnselect( hBlock );
      return true;
    }
    return false;
  }

  swprintf( szValue, L"1.2.%d", Addr );
  // find BlockRef entity by attribute
  hEnt = lcBlockGetBlkRefByTag( hBlock, 0, L"DMXNo", szValue, false );
  if (hEnt){
    lcPropPutInt( hEnt, LC_PROP_ENT_COLOR, Color );
    return true;
  }
  return false;
}