コード例 #1
0
ファイル: editortools.cpp プロジェクト: FXIhub/hawk
void EditorTools::onMathEdit(){
  bool ok;
  QString text = QInputDialog::getText(this, tr("Apply expression to image"),
				       tr("\"A\" represents the current image. Examples:\n"
					  "A + 3 -> adds 3 to every pixel\n"
					  "fft(A) -> takes the fourier transform of the image\n"
					  "\n"
					  "Expression:"), 
				       QLineEdit::Normal,
				       "A + 0", &ok);
  if (ok && !text.isEmpty()){
    const Image * image_list[2] = {0,0};
    if(editor->editorView()->selectedImage() && editor->editorView()->selectedImage()->getImage()){
      image_list[0] = editor->editorView()->selectedImage()->getImage();
    }
    qDebug("Got formula %s\n",text.toAscii().data());
    Math_Output * out = evaluate_math_expression(text.toAscii().data(),image_list);
    if(out->type == MathOutputImage){
      /* We got a new image */
      ImageItem * item = new ImageItem(out->image,QString(),editor->editorView());
      editor->editorView()->setImage(item);
    }else if(out->type == MathOutputScalar){
      /* We got a scalar. Show it to the user */
      QString out_text;
      out_text = QString("Expression evaluated to %0 + %1 i").arg(sp_real(out->scalar)).arg(sp_imag(out->scalar));
      QMessageBox::information ( 0,tr("Apply expression to image"),out_text);
    }else if(out->type == MathOutputError){
      QString out_text(out->error_msg);
      QMessageBox::warning( 0,tr("Apply expression to image"),out_text);

    }
  }
}
コード例 #2
0
ファイル: OnyxWalker.c プロジェクト: jwatte/robotcode
static void dispatch_out(void) {
    //  update latest serial received
    if (out_packet_ptr) {
        in_packet[0] = out_packet[0];
        if (in_packet_ptr == 0) {
            in_packet_ptr = 1;
        }
    }
    unsigned char ptr = 1;
    while (ptr < out_packet_ptr) {
        unsigned char code = out_packet[ptr];
        ++ptr;
        unsigned char sz = code & 0xf;
        if (sz == 15) {
            if (ptr == out_packet_ptr) {
                goto too_big;
            }
            sz = out_packet[ptr];
            ++ptr;
        }
        if (ptr + sz > out_packet_ptr || ptr + sz < ptr) {
too_big:
            MY_Failure("Too big recv", ptr + sz, out_packet_ptr);
        }
        unsigned char code_ix = (code & 0xf0) >> 4;
        if (code_ix >= sizeof(min_size)) {
unknown_op:
            MY_Failure("Unknown op", code & 0xf0, sz);
        }
        unsigned char msz = 0;
        memcpy_P(&msz, &min_size[code_ix], 1);
        if (sz < msz) {
            MY_Failure("Too small data", sz, code);
        }
        unsigned char *base = &out_packet[ptr];
        switch (code & 0xf0) {
        case OpSetStatus:
            set_status(base[0], sz-1, base+1);
            break;
        case OpGetStatus:
            get_status(base[0]);
            break;
        case OpWriteServo:
            write_servo(base[0], base[1], sz-2, base+2);
            break;
        case OpReadServo:
            read_servo(base[0], base[1], base[2]);
            break; 
        case OpOutText:
            out_text(sz, base);
            break;
        case OpRawWrite:
            raw_write(sz, base);
            break;
        case OpRawRead:
            raw_read(base[0]);
            break;
        default:
            goto unknown_op;
        }
        ptr += sz;
    }
}