Example #1
0
void
TTraction::Load( cParser *parser, glm::dvec3 const &pOrigin ) {

    parser->getTokens( 4 );
    *parser
        >> asPowerSupplyName
        >> NominalVoltage
        >> MaxCurrent
        >> fResistivity;
    if( fResistivity == 0.01f ) {
        // tyle jest w sceneriach [om/km]
        // taka sensowniejsza wartość za http://www.ikolej.pl/fileadmin/user_upload/Seminaria_IK/13_05_07_Prezentacja_Kruczek.pdf
        fResistivity = 0.075f;
    }
    fResistivity *= 0.001f; // teraz [om/m]
    // Ra 2014-02: a tutaj damy symbol sieci i jej budowę, np.:
    // SKB70-C, CuCd70-2C, KB95-2C, C95-C, C95-2C, YC95-2C, YpC95-2C, YC120-2C
    // YpC120-2C, YzC120-2C, YwsC120-2C, YC150-C150, YC150-2C150, C150-C150
    // C120-2C, 2C120-2C, 2C120-2C-1, 2C120-2C-2, 2C120-2C-3, 2C120-2C-4
    auto const material = parser->getToken<std::string>();
    // 1=miedziana, rysuje się na zielono albo czerwono
    // 2=aluminiowa, rysuje się na czarno
         if( material == "none" ) { Material = 0; }
    else if( material == "al" )   { Material = 2; }
    else                          { Material = 1; }
    parser->getTokens( 2 );
    *parser
        >> WireThickness
        >> DamageFlag;
    pPoint1 = LoadPoint( *parser ) + pOrigin;
    pPoint2 = LoadPoint( *parser ) + pOrigin;
    pPoint3 = LoadPoint( *parser ) + pOrigin;
    pPoint4 = LoadPoint( *parser ) + pOrigin;
    auto const minheight { parser->getToken<double>() };
    fHeightDifference = ( pPoint3.y - pPoint1.y + pPoint4.y - pPoint2.y ) * 0.5 - minheight;
    auto const segmentlength { parser->getToken<double>() };
    iNumSections = (
        segmentlength ?
            glm::length( ( pPoint1 - pPoint2 ) ) / segmentlength :
            0 );
    parser->getTokens( 2 );
    *parser
        >> Wires
        >> WireOffset;
    m_visible = ( parser->getToken<std::string>() == "vis" );

    std::string token { parser->getToken<std::string>() };
    if( token == "parallel" ) {
        // jawne wskazanie innego przęsła, na które może przestawić się pantograf
        parser->getTokens();
        *parser >> asParallel;
    }
Example #2
0
void
PolarShapeEditWidget::SetPolarShape(const PolarShape &_shape)
{
  shape = _shape;

  for (unsigned i = 0; i < ARRAY_SIZE(points); ++i)
    LoadPoint(points[i], shape[i]);
}
bool SIFSpritesSect::LoadFrame(SIFFrame *frame, int ndirs, \
					const uint8_t **data, const uint8_t *data_end)
{
	// sets defaults for un-specified/default fields
	memset(frame, 0, sizeof(SIFFrame));
	
	for(int d=0;d<ndirs;d++)
	{
		SIFDir *dir = &frame->dir[d];
		LoadPoint(&dir->sheet_offset, data, data_end);
		
		int t;
		for(;;)
		{
			t = read_U8(data, data_end);
			if (t == S_DIR_END) break;
			
			switch(t)
			{
				case S_DIR_DRAW_POINT: LoadPoint(&dir->drawpoint, data, data_end); break;
				case S_DIR_ACTION_POINT: LoadPoint(&dir->actionpoint, data, data_end); break;
				case S_DIR_ACTION_POINT_2: LoadPoint(&dir->actionpoint2, data, data_end); break;
				
				case S_DIR_PF_BBOX:
					LoadRect(&dir->pf_bbox, data, data_end);
				break;
				
				default:
					NX_LOG("SIFSpriteSect::LoadFrame: encountered unknown optional field type %d\n", t);
				return 1;
			}
		}
	}
	
	return 0;
}
bool SIFSpritesSect::Decode(const uint8_t *data, int datalen, \
						  SIFSprite *sprites, int *nsprites_out, int maxsprites)
{
const uint8_t *data_end = data + (datalen - 1);
int i, f, nsprites;
	
	nsprites = read_U16(&data, data_end);
	if (nsprites_out) *nsprites_out = nsprites;
	
	if (nsprites >= maxsprites)
	{
		NX_ERR("SIFSpritesSect::Decode: too many sprites in file (nsprites=%d, maxsprites=%d)\n", nsprites, maxsprites);
		return 1;
	}
	
	NX_LOG("SIFSpritesSect: loading %d sprites\n", nsprites);
	for(i=0;i<nsprites;i++)
	{
		if (data > data_end)
		{
			NX_ERR("SIFSpritesSect::Decode: section corrupt: overran end of data\n");
			return 1;
		}
		
		// read sprite-level fields
		sprites[i].w = read_U8(&data, data_end);
		sprites[i].h = read_U8(&data, data_end);
		sprites[i].spritesheet = read_U8(&data, data_end);
		
		sprites[i].nframes = read_U8(&data, data_end);
		sprites[i].ndirs = read_U8(&data, data_end);
		
		if (sprites[i].ndirs > SIF_MAX_DIRS)
		{
			NX_ERR("SIFSpritesSect::Decode: SIF_MAX_DIRS exceeded on sprite %d (ndirs=%d)\n", i, sprites[i].ndirs);
			return 1;
		}
		
		LoadRect(&sprites[i].bbox, &data, data_end);
		LoadRect(&sprites[i].solidbox, &data, data_end);
		
		LoadPoint(&sprites[i].spawn_point, &data, data_end);
		
		LoadPointList(&sprites[i].block_l, &data, data_end);
		LoadPointList(&sprites[i].block_r, &data, data_end);
		LoadPointList(&sprites[i].block_u, &data, data_end);
		LoadPointList(&sprites[i].block_d, &data, data_end);
		
		// malloc enough space to hold the specified number
		// of apple fritters, i mean, frames.
		sprites[i].frame = (SIFFrame *)malloc(sizeof(SIFFrame) * sprites[i].nframes);
		
		// then load all frames
		for(f=0;f<sprites[i].nframes;f++)
		{
			if (LoadFrame(&sprites[i].frame[f], sprites[i].ndirs, &data, data_end))
				return 1;
		}
	}
	
	return 0;
}
Example #5
0
void
PolarShapeEditWidget::Prepare(ContainerWindow &parent, const PixelRect &_rc)
{
  PanelWidget::Prepare(parent, _rc);
  const DialogLook &look = UIGlobals::GetDialogLook();
  ContainerWindow &panel = (ContainerWindow &)GetWindow();

  const unsigned width = _rc.right - _rc.left;
  const unsigned height = _rc.bottom - _rc.top;

  const TCHAR *v_text = _("Polar V");
  const TCHAR *w_text = _("Polar W");

  const unsigned row_height = height / 2;
  const unsigned label_width = Layout::Scale(8) +
    std::max(look.text_font->TextSize(v_text).cx,
             look.text_font->TextSize(v_text).cx);
  const UPixelScalar edit_width = (width - label_width) / ARRAY_SIZE(points);

  WindowStyle style;
  style.TabStop();

  PixelRect label_rc(0, 0, label_width, row_height);
  v_label = new WndFrame(panel, look, label_rc);
  v_label->SetText(v_text);

  PixelRect rc;
  rc.left = label_width;
  rc.top = 0;
  rc.right = rc.left + edit_width;
  rc.bottom = row_height;
  for (unsigned i = 0; i < ARRAY_SIZE(points);
       ++i, rc.left += edit_width, rc.right += edit_width) {
    points[i].v = new WndProperty(panel, look, _T(""),
                                  rc, 0, style);
    DataFieldFloat *df = new DataFieldFloat(_T("%.0f"), _T("%.0f %s"),
                                            fixed(0), fixed(300), fixed(0),
                                            fixed(1), false, NULL);
    points[i].v->SetDataField(df);
  }

  label_rc.top += row_height;
  label_rc.bottom += row_height;
  w_label = new WndFrame(panel, look, label_rc);
  w_label->SetText(w_text);

  rc.left = label_width;
  rc.top = row_height;
  rc.right = rc.left + edit_width;
  rc.bottom = height;

  fixed step = fixed(0.05), min = fixed(-10);
  switch (Units::current.vertical_speed_unit) {
  case Unit::FEET_PER_MINUTE:
    step = fixed(10);
    min = fixed(-2000);
    break;

  case Unit::KNOTS:
    step = fixed(0.1);
    min = fixed(-20);
    break;

  default:
    break;
  }

  for (unsigned i = 0; i < ARRAY_SIZE(points);
       ++i, rc.left += edit_width, rc.right += edit_width) {
    points[i].w = new WndProperty(panel, look, _T(""),
                                  rc, 0, style);
    DataFieldFloat *df = new DataFieldFloat(_T("%.2f"), _T("%.2f %s"),
                                            min, fixed(0), fixed(0),
                                            step, false, NULL);

    points[i].w->SetDataField(df);
  }

  for (unsigned i = 0; i < ARRAY_SIZE(points); ++i)
    LoadPoint(points[i], shape[i]);
}
Example #6
0
BOOL plResponderWaitProc::DlgProc(TimeValue t, IParamMap2 *pm, HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
        case WM_INITDIALOG:
        {
            fhDlg = hDlg;

            fWaitPB = pm->GetParamBlock();

            ResponderWait::FixupWaitBlock(fWaitPB);

            IParamBlock2 *pb = GetCmdParams(fCurCmd);
            plResponderCmd *cmd = plResponderCmd::Find(pb);
            pm->Enable(kWaitMe, cmd->IsWaitable(pb));

            LoadWho();
            LoadPoint();
            return TRUE;
        }

        case WM_CUSTEDIT_ENTER:
            if (wParam == IDC_MARKER_EDIT)
            {
                ICustEdit *edit = GetICustEdit((HWND)lParam);
                char buf[256];
                edit->GetText(buf, sizeof(buf));
                fWaitPB->SetValue(kWaitPoint, 0, buf);

                return TRUE;
            }
            break;

        case WM_COMMAND:
        {
            int code = HIWORD(wParam);
            int id = LOWORD(wParam);

            if (id == IDC_CHECK_WAIT && code == BN_CLICKED)
            {
                BOOL checked = (IsDlgButtonChecked(hDlg, IDC_CHECK_WAIT) == BST_CHECKED);
                if (!checked)
                {
                    fWaitPB->SetValue(kWaitWho, 0, -1);
                    fWaitPB->SetValue(kWaitPoint, 0, "");

                    LoadPoint();

                    HWND hWho = GetDlgItem(hDlg, IDC_WAIT_WHO);
                    EnableWindow(hWho, FALSE);
                    ComboBox_ResetContent(hWho);
                }
                else
                {
                    LoadWho(true);
                    LoadPoint();
                }

                return TRUE;
            }
            else if (id == IDC_WAIT_WHO && code == CBN_SELCHANGE)
            {
                HWND hWho = (HWND)lParam;
                int who = ComboBox_GetCurSel(hWho);
                int idx = ComboBox_GetItemData(hWho, who);
                fWaitPB->SetValue(kWaitWho, 0, idx);

                LoadPoint();
                return TRUE;
            }
            else if (id == IDC_RADIO_FINISH && code == BN_CLICKED)
            {
                fWaitPB->SetValue(kWaitPoint, 0, "");
                LoadPoint();
                return TRUE;
            }
            else if (id == IDC_RADIO_POINT && code == BN_CLICKED)
            {
                LoadPoint(true);
                return TRUE;
            }
            else if (id == IDC_WAIT_POINT && code == CBN_SELCHANGE)
            {
                HWND hPoint = (HWND)lParam;
                if (ComboBox_GetCurSel(hPoint) != CB_ERR)
                {
                    char buf[256];
                    ComboBox_GetText(hPoint, buf, sizeof(buf));
                    fWaitPB->SetValue(kWaitPoint, 0, buf);
                }
                return TRUE;
            }
            break;
        }
    }

    return FALSE;
}