feat: sync all remaining python source board configurations

This commit is contained in:
yczpf2019
2026-01-24 16:19:55 +08:00
parent 1990bee9a1
commit 20bde81bbb
519 changed files with 93119 additions and 0 deletions

View File

@@ -0,0 +1,3 @@
node_modules
build
origin

View File

@@ -0,0 +1,370 @@
import * as Blockly from 'blockly/core';
const AI_HUE = 205;
export const AI_ChooseAndGet = {
init: function () {
this.setColour(AI_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_CHOOSE_AND_GET)
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.MIXLY_CHOOSE_AND_GET_ONE_FILE_NAME, "getOneFile"],
[Blockly.Msg.MIXLY_CHOOSE_AND_GET_MANY_FILE_NAMES, "getManyFiles"],
[Blockly.Msg.MIXLY_CHOOSE_AND_GET_DIR, "getDirectory"]
]), 'TYPE');
this.setInputsInline(true);
this.setOutput(true);
}
}
export const AI_client = {
init: function () {
this.setColour(AI_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_SETUP)
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.MIXLY_AipImageClassify, "AipImageClassify"],
[Blockly.Msg.MIXLY_AipSpeech, "AipSpeech"],
[Blockly.Msg.MIXLY_AipImageCensor, "AipImageCensor"],
[Blockly.Msg.MIXLY_AipFace, "AipFace"],
[Blockly.Msg.MIXLY_AipOcr, "AipOcr"],
[Blockly.Msg.MIXLY_AipNlp, "AipNlp"]
]), 'CTYPE')
this.appendValueInput('SUB')
.appendField(Blockly.Msg.MIXLY_Client)
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput('API_KEY')
.appendField('API_KEY')
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput('SECRET_KEY')
.appendField('SECRET_KEY')
.setAlign(Blockly.inputs.Align.RIGHT);
this.setInputsInline(false);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const AI_Speech_synthesis = { // AI_TYPE_FUNC
init: function () {
this.setColour(AI_HUE);
this.appendValueInput('SUB')
.appendField(Blockly.Msg.MIXLY_AipSpeech_synthesis)
.appendField(Blockly.Msg.MIXLY_Client)
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput('STR')
.appendField(Blockly.Msg.OLED_STRING)
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput('ATTR')
.appendField(Blockly.Msg.MIXLY_AIP_ATTR)
.setAlign(Blockly.inputs.Align.RIGHT);
this.setTooltip(Blockly.Msg.MIXLY_AipSpeech_synthesis_TOOLTIP)
this.setInputsInline(false);
this.setOutput(true);
}
};
export const AI_Speech_asr = { // AI_TYPE_FUNC
init: function () {
this.setColour(AI_HUE);
this.appendValueInput('SUB')
.appendField(Blockly.Msg.MIXLY_AipSpeech_asr)
.appendField(Blockly.Msg.MIXLY_Client)
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput('FILE')
.appendField(Blockly.Msg.MIXLY_AipSpeech_File)
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput('ATTR')
.appendField(Blockly.Msg.MIXLY_AIP_ATTR)
.setAlign(Blockly.inputs.Align.RIGHT);
this.setTooltip(Blockly.Msg.MIXLY_AipSpeech_ASR_TOOLTIP)
this.setInputsInline(false);
this.setOutput(true);
}
};
export const AI_ImageClassify = { // AI_TYPE_FUNC
init: function () {
this.setColour(AI_HUE);
this.appendValueInput('SUB')
.appendField(Blockly.Msg.MIXLY_AipImageClassify)
.appendField(Blockly.Msg.MIXLY_Client)
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput('FUNC')
.appendField(Blockly.Msg.MIXLY_AIP_FUNC)
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput('ADDR')
.appendField(Blockly.Msg.MIXLY_AipImageClassify_Image)
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput('ATTR')
.appendField(Blockly.Msg.MIXLY_AIP_ATTR)
.setAlign(Blockly.inputs.Align.RIGHT);
this.setTooltip(Blockly.Msg.MIXLY_AipImageClassify_advancedGeneral_TOOLTIP)
this.setInputsInline(false);
this.setOutput(true);
}
};
export const AI_ImageClassify_Func = {
init: function () {
this.setColour(AI_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.MIXLY_AipImageClassify_advancedGeneral, "advancedGeneral"],
[Blockly.Msg.MIXLY_AipImageClassify_dishDetect, "dishDetect"],
[Blockly.Msg.MIXLY_AipImageClassify_carDetect, "carDetect"],
[Blockly.Msg.MIXLY_AipImageClassify_animalDetect, "animalDetect"],
[Blockly.Msg.MIXLY_AipImageClassify_plantDetect, "plantDetect"],
[Blockly.Msg.MIXLY_AipImageClassify_logoSearch, "logoSearch"]
]), 'TYPE')
this.setOutput(true);
}
};
export const AI_Face_match = { // AI_TYPE_FUNC
init: function () {
this.setColour(AI_HUE);
this.appendValueInput('SUB')
.appendField(Blockly.Msg.MIXLY_AipFace_match)
.appendField(Blockly.Msg.MIXLY_Client)
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput('VAR')
.appendField(Blockly.Msg.MIXLY_AipImageClassify_Image + '1' + Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_THE_PATH)
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput('VAR2')
.appendField(Blockly.Msg.MIXLY_AipImageClassify_Image + '2' + Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_THE_PATH)
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput('ATTR')
.appendField(Blockly.Msg.MIXLY_AIP_ATTR)
.setAlign(Blockly.inputs.Align.RIGHT);
this.setTooltip(Blockly.Msg.MIXLY_AipFace_match_TOOLTIP)
this.setInputsInline(false);
this.setOutput(true);
}
};
export const AI_Ocr = { // AI_TYPE_FUNC
init: function () {
this.setColour(AI_HUE);
this.appendValueInput('SUB')
.appendField(Blockly.Msg.MIXLY_AipOcr)
.appendField(Blockly.Msg.MIXLY_Client)
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput('FUNC')
.appendField(Blockly.Msg.MIXLY_AIP_FUNC)
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput('ADDR')
.appendField(Blockly.Msg.MIXLY_AipImageClassify_Image)
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput('ATTR')
.appendField(Blockly.Msg.MIXLY_AIP_ATTR)
.setAlign(Blockly.inputs.Align.RIGHT);
this.setTooltip(Blockly.Msg.MIXLY_AipOcr_TOOLTIP)
this.setInputsInline(false);
this.setOutput(true);
}
};
export const AI_Ocr_Func = {
init: function () {
this.setColour(AI_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.MIXLY_AipOcr_basicGeneral, "basicGeneral"],
[Blockly.Msg.MIXLY_AipOcr_webImage, "webImage"],
[Blockly.Msg.MIXLY_AipOcr_idcard, "idcard"],
[Blockly.Msg.MIXLY_AipOcr_bankcard, "bankcard"],
[Blockly.Msg.MIXLY_AipOcr_drivingLicense, "drivingLicense"],
[Blockly.Msg.MIXLY_AipOcr_vehicleLicense, "vehicleLicense"],
[Blockly.Msg.MIXLY_AipOcr_licensePlate, "licensePlate"],
[Blockly.Msg.MIXLY_AipOcr_businessLicense, "businessLicense"],
[Blockly.Msg.MIXLY_AipOcr_receipt, "receipt"],
[Blockly.Msg.MIXLY_AipOcr_trainTicket, "trainTicket"],
[Blockly.Msg.MIXLY_AipOcr_taxiReceipt, "taxiReceipt"],
[Blockly.Msg.MIXLY_AipOcr_form, "tableRecognition"],
[Blockly.Msg.MIXLY_AipOcr_vatInvoice, "vatInvoice"],
[Blockly.Msg.MIXLY_AipOcr_passport, "passport"],
[Blockly.Msg.MIXLY_AipOcr_handwriting, "handwriting"]
]), 'TYPE')
this.setOutput(true);
}
};
export const AI_Nlp = { // AI_TYPE_FUNC
init: function () {
this.setColour(AI_HUE);
this.appendValueInput('SUB')
.appendField(Blockly.Msg.MIXLY_AipNlp)
.appendField(Blockly.Msg.MIXLY_Client)
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput('FUNC')
.appendField(Blockly.Msg.MIXLY_AIP_FUNC)
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput('STR')
.appendField(Blockly.Msg.OLED_STRING)
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput('ATTR')
.appendField(Blockly.Msg.MIXLY_AIP_ATTR)
.setAlign(Blockly.inputs.Align.RIGHT);
this.setTooltip(Blockly.Msg.MIXLY_AipNlp_TOOLTIP)
this.setInputsInline(false);
this.setOutput(true);
}
};
export const AI_Nlp_Sim = { // AI_TYPE_FUNC
init: function () {
this.setColour(AI_HUE);
this.appendValueInput('SUB')
.appendField(Blockly.Msg.MIXLY_AipNlp_Sim)
.appendField(Blockly.Msg.MIXLY_Client)
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput('FUNC')
.appendField(Blockly.Msg.MIXLY_AIP_FUNC)
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput('STR1')
.appendField(Blockly.Msg.OLED_STRING + '1')
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput('STR2')
.appendField(Blockly.Msg.OLED_STRING + '2')
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput('ATTR')
.appendField(Blockly.Msg.MIXLY_AIP_ATTR)
.setAlign(Blockly.inputs.Align.RIGHT);
this.setTooltip(Blockly.Msg.MIXLY_AipNlp_Sim_TOOLTIP)
this.setInputsInline(false);
this.setOutput(true);
}
};
export const AI_Nlp_Func = {
init: function () {
this.setColour(AI_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.MIXLY_AipNlp_lexer, "lexer"],
[Blockly.Msg.MIXLY_AipNlp_depParser, "depParser"],
[Blockly.Msg.MIXLY_AipNlp_wordEmbedding, "wordEmbedding"],
[Blockly.Msg.MIXLY_AipNlp_dnnlm, "dnnlm"],
[Blockly.Msg.MIXLY_AipNlp_commentTag, "commentTag"],
[Blockly.Msg.MIXLY_AipNlp_sentimentClassify, "sentimentClassify"],
[Blockly.Msg.MIXLY_AipNlp_keyword, "keyword"],
[Blockly.Msg.MIXLY_AipNlp_topic, "topic"],
[Blockly.Msg.MIXLY_AipNlp_ecnet, "ecnet"],
[Blockly.Msg.MIXLY_AipNlp_emotion, "emotion"]
]), 'TYPE')
this.setOutput(true);
}
};
export const AI_Nlp_Func_sim = {
init: function () {
this.setColour(AI_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.MIXLY_AipNlp_wordSimEmbedding, "wordSimEmbedding"],
[Blockly.Msg.MIXLY_AipNlp_simnet, "simnet"]
]), 'TYPE')
this.setOutput(true);
}
};
export const AI_Nlp_Topic = { // AI_TYPE_FUNC
init: function () {
this.setColour(AI_HUE);
this.appendValueInput('SUB')
.appendField(Blockly.Msg.MIXLY_AipNlp_topic)
.appendField(Blockly.Msg.MIXLY_Client)
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput('STR1')
.appendField(Blockly.Msg.MIXLY_AipNlp_Topic_Title)
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput('STR2')
.appendField(Blockly.Msg.MIXLY_AipNlp_Topic_Content)
.setAlign(Blockly.inputs.Align.RIGHT);
this.setTooltip(Blockly.Msg.MIXLY_AipNlp_Topic_TOOLTIP)
this.setInputsInline(false);
this.setOutput(true);
}
};
export const AI_Nlp_newsSummary = { // AI_TYPE_FUNC
init: function () {
this.setColour(AI_HUE);
this.appendValueInput('SUB')
.appendField(Blockly.Msg.MIXLY_AipNlp_summary)
.appendField(Blockly.Msg.MIXLY_Client)
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput('STR')
.appendField(Blockly.Msg.MIXLY_AipNlp_Topic_Content)
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput('LEN')
.appendField(Blockly.Msg.MIXLY_LIST_LEN)
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput('ATTR')
.appendField(Blockly.Msg.MIXLY_AIP_ATTR)
.setAlign(Blockly.inputs.Align.RIGHT);
this.setTooltip(Blockly.Msg.MIXLY_AipNlp_Summary_TOOLTIP)
this.setInputsInline(false);
this.setOutput(true);
}
};
// [Blockly.Msg.MIXLY_AipNlp_topic, "topic"]
// [Blockly.Msg.MIXLY_AipNlp_keyword, "keyword"]
export const AI_audio = {
init: function () {
this.setColour(AI_HUE);
this.appendValueInput("VAR")
.appendField(Blockly.Msg.MIXPY_AI_AUDIO);
this.appendValueInput("TIME")
.appendField(Blockly.Msg.MIXPY_AI_AUDIO_TIME);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXPY_AI_AUDIO_TOOLTIP);
}
};
export const AI_photo = {
init: function () {
this.setColour(AI_HUE);
this.appendValueInput("VAR")
.appendField(Blockly.Msg.MIXPY_AI_PHOTO);
this.appendValueInput("BUT")
.appendField(Blockly.Msg.MIXPY_AI_PHOTO_BUTTON);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXPY_AI_PHOTO_TOOLTIP);
}
};
export const AI_result = {
/**
* Block for negation.
* @this Blockly.Block
*/
init: function () {
this.setColour(AI_HUE);
this.appendValueInput('AI')
.appendField(Blockly.Msg.MIXPY_AI_RESULT)
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.MIXLY_AipImageClassify, "Image"],
[Blockly.Msg.MIXLY_AipSpeech_asr, "Speech"],
[Blockly.Msg.MIXLY_AipFace_match, "Face"],
[Blockly.Msg.MIXLY_AipOcr, "Ocr"],
[Blockly.Msg.MIXLY_AipNlp_simnet, "OcrSimilarity"],
[Blockly.Msg.MIXLY_AipNlp_sentimentClassify, "Emotion"],
]), 'CTYPE')
this.setOutput(true);
this.setTooltip(Blockly.Msg.LOGIC_NEGATE_TOOLTIP);
}
};

View File

@@ -0,0 +1,835 @@
import * as Blockly from 'blockly/core';
const ALGORITHM_HUE = '#526FC3';
// sub_algorithm_1
export const algorithm_prepare = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_PREPARE);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const algorithm_add_school = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_ADD_SCHOOL);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const algorithm_find_path = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_FIND_PATH);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const algorithm_new_path = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_NEW_PATH);
this.setOutput(true);
}
}
export const algorithm_set_path = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_SET_PATH);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const algorithm_add_path = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_ADD_PATH);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const algorithm_del_path = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_DEL_PATH);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const algorithm_return_path = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_RETURN_PATH);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const algorithm_no_left = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_NO_LEFT);
this.setOutput(true);
}
}
export const algorithm_print_path = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_PRINT_PATH);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
// sub_algorithm_2
export const algorithm_prepare2 = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_PREPARE2);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const algorithm_current_school = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_CURRENT_SCHOOL);
this.setOutput(true);
}
}
export const algorithm_no_path = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_NO_PATH);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
// sub_algorithm_3
export const algorithm_prepare_2_1 = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_PREPARE_2_1);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const algorithm_prepare_2_2 = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_PREPARE_2_2);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const algorithm_move_recent = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_MOVE_RECENT);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const algorithm_not_home = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_NOT_HOME);
this.setOutput(true);
}
};
export const algorithm_not_school = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_NOT_SCHOOL);
this.setOutput(true);
}
};
export const algorithm_print_path2 = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_PRINT_PATH2);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
// sub_algorithm_4 hanoi
export const hanoi_init = {
init: function () {
this.appendDummyInput()
.appendField("准备")
.appendField(new Blockly.FieldNumber(3, 0, 100, 1), "NUM")
.appendField("层汉诺塔");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(ALGORITHM_HUE);
this.setTooltip('');
this.setHelpUrl('');
}
};
export const hanoi_move = {
init: function () {
this.appendDummyInput()
.appendField("移动圆盘从");
this.appendValueInput("FROM_NUM")
.setCheck(null)
.appendField("柱");
this.appendDummyInput()
.appendField("到");
this.appendValueInput("TO_NUM")
.setCheck(null)
.appendField("柱");
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(ALGORITHM_HUE);
this.setTooltip('');
this.setHelpUrl('');
}
};
// sub_algorithm_5
export const algorithm_all_books = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_ALL_BOOKS);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const algorithm_all_books_sequence = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_ALL_BOOKS2);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const algorithm_first_book = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_FIRST_BOOK);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
// export const algorithm_no_ring = {
// init: function() {
// this.setColour(ALGORITHM_HUE);
// this.appendDummyInput()
// .appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_NO_RING);
// this.setOutput(true);
// }
// }
export const algorithm_no_ring2 = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_NO_RING);
this.setOutput(true);
}
};
export const algorithm_yes_ring2 = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_YES_RING);
this.setOutput(true);
}
};
export const algorithm_next_book = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_NEXT_BOOK);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const algorithm_two_left = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_TWO_LEFT);
this.setOutput(true);
}
}
export const algorithm_divide_books = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_DIVIDE_BOOKS);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const algorithm_get_half_books = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_GET_HALF_BOOKS);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
// export const algorithm_check_half_books = {
// init: function() {
// this.setColour(ALGORITHM_HUE);
// this.appendDummyInput()
// .appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_CHECK_HALF_BOOKS);
// this.setPreviousStatement(true, null);
// this.setNextStatement(true, null);
// }
// };
export const algorithm_delete_book = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_DELETE_BOOK);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const algorithm_delete_books = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_DELETE_BOOKS);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const algorithm_delete_books2 = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_DELETE_BOOKS2);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
// export const algorithm_print_book = {
// init: function() {
// this.setColour(ALGORITHM_HUE);
// this.appendDummyInput()
// .appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_PRINT_BOOK);
// this.setPreviousStatement(true, null);
// this.setNextStatement(true, null);
// }
// };
export const algorithm_print_book2 = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_PRINT_BOOK);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
// sub_algorithm_6
export const algorithm_book_scale = {
init: function () {
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.LEFT)
.appendField("设置待查书总数 N=")
.appendField(new Blockly.FieldDropdown([
["5", "5"],
["10", "10"],
["20", "20"],
["50", "50"]
]), "NUM");
this.setInputsInline(false);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(ALGORITHM_HUE);
this.setTooltip('');
this.setHelpUrl('');
}
};
export const algorithm_number_zero = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_NUMBER_ZERO);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const algorithm_number_add = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_NUMBER_ADD);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const algorithm_print_number = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_PRINT_NUMBER);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const algorithm_get_book_num = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField('n' + Blockly.Msg.MIXLY_VALUE2)
.appendField(new Blockly.FieldTextInput('50'), 'NUM');
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const algorithm_print_sequence = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_PRINT_SEQUENCE);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const algorithm_print_divide = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_PRINT_DIVIDE);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
// sub_algorithm_7
export const algorithm_init_jttl = {
init: function () {
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.LEFT)
.appendField("初始化鸡兔同笼问题:");
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.LEFT)
.appendField("有若干只鸡、兔在同一个笼子里。");
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.LEFT)
.appendField("从上面数鸡兔有10个头");
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.LEFT)
.appendField("从下面数鸡兔有32只脚。");
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.LEFT)
.appendField("问笼中有多少只鸡和多少只兔?");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(ALGORITHM_HUE);
this.setTooltip('');
this.setHelpUrl('');
}
};
export const algorithm_rabbit_zero = {
init: function () {
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.LEFT)
.appendField("假设兔子的数量为0只");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(ALGORITHM_HUE);
this.setTooltip('');
this.setHelpUrl('');
}
};
export const algorithm_rabbit_number_in_range = {
init: function () {
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.LEFT)
.appendField("兔子的数量在范围之内");
this.setOutput(true, null);
this.setColour(ALGORITHM_HUE);
this.setTooltip('');
this.setHelpUrl('');
}
};
export const algorithm_chick_calculate = {
init: function () {
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.LEFT)
.appendField("根据(头数-兔子数)计算出鸡的数量");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(ALGORITHM_HUE);
this.setTooltip('');
this.setHelpUrl('');
}
};
export const algorithm_check_feet = {
init: function () {
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.LEFT)
.appendField("计算得到脚的数量正确");
this.setOutput(true, null);
this.setColour(ALGORITHM_HUE);
this.setTooltip('');
this.setHelpUrl('');
}
};
export const algorithm_print_jttl_answer = {
init: function () {
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.LEFT)
.appendField("输出鸡、兔的数量");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(ALGORITHM_HUE);
this.setTooltip('');
this.setHelpUrl('');
}
};
export const algorithm_rabbit_add = {
init: function () {
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.LEFT)
.appendField("假设兔子数量要更多一只");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(ALGORITHM_HUE);
this.setTooltip('');
this.setHelpUrl('');
}
};
// sub_algorithm_8
export const algorithm_init_fzsf = {
init: function () {
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.LEFT)
.appendField("加载路线图");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(ALGORITHM_HUE);
this.setTooltip('');
this.setHelpUrl('');
}
};
export const algorithm_fz_calc = {
init: function () {
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.LEFT)
.appendField("计算")
.appendField(new Blockly.FieldDropdown([
["S1", "1"],
["S2", "2"],
["S3", "3"],
["S4", "4"]
]), "PATHNAME")
.appendField("长度");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(ALGORITHM_HUE);
this.setTooltip('');
this.setHelpUrl('');
}
};
export const algorithm_fz_calc_first_min = {
init: function () {
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.LEFT)
.appendField("设置S1为Smin");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(ALGORITHM_HUE);
this.setTooltip('');
this.setHelpUrl('');
}
};
export const algorithm_fz_compare = {
init: function () {
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.LEFT)
.appendField(new Blockly.FieldDropdown([
["S1", "1"],
["S2", "2"],
["S3", "3"],
["S4", "4"]
]), "PATHNAME")
.appendField("的长度比")
.appendField(new Blockly.FieldDropdown([
["S1", "1"],
["S2", "2"],
["S3", "3"],
["S4", "4"]
]), "PATHNAME2")
.appendField("短");
this.setOutput(true, null);
this.setColour(ALGORITHM_HUE);
this.setTooltip('');
this.setHelpUrl('');
}
};
export const algorithm_fz_set_min = {
init: function () {
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.LEFT)
.appendField("设置")
.appendField(new Blockly.FieldDropdown([
["S1", "1"],
["S2", "2"],
["S3", "3"],
["S4", "4"]
]), "PATHNAME")
.appendField("为Smin");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(ALGORITHM_HUE);
this.setTooltip('');
this.setHelpUrl('');
}
};
export const algorithm_fz_move = {
init: function () {
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.LEFT)
.appendField("按照Smin移动");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(ALGORITHM_HUE);
this.setTooltip('');
this.setHelpUrl('');
}
};
// sub_algorithm_8
export const algorithm_init_hxdb = {
init: function () {
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.LEFT)
.appendField("初始化韩信点兵问题:");
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.LEFT)
.appendField("有未知数量的若干士兵。");
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.LEFT)
.appendField("若3人一排列队多1人");
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.LEFT)
.appendField("若5人一排列队多2人");
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.LEFT)
.appendField("若7人一排列队多2人");
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.LEFT)
.appendField("问士兵的数量最少是多少人?");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(ALGORITHM_HUE);
this.setTooltip('');
this.setHelpUrl('');
}
};
export const algorithm_hxdb_init_soldier = {
init: function () {
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.LEFT)
.appendField("初始化士兵为")
.appendField(new Blockly.FieldTextInput("7"), "NUM")
.appendField("个");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(ALGORITHM_HUE);
this.setTooltip('');
this.setHelpUrl('');
}
};
export const algorithm_hxdb_stand_in_line = {
init: function () {
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.LEFT)
.appendField("使士兵")
.appendField(new Blockly.FieldDropdown([
["3", "3"],
["5", "5"],
["7", "7"]
]), "NUM")
.appendField("人一排列队");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(ALGORITHM_HUE);
this.setTooltip('');
this.setHelpUrl('');
}
};
export const algorithm_hxdb_last_line = {
init: function () {
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.LEFT)
.appendField("剩余")
.appendField(new Blockly.FieldTextInput("1"), "NUM")
.appendField("个士兵");
this.setOutput(true, null);
this.setColour(ALGORITHM_HUE);
this.setTooltip('');
this.setHelpUrl('');
}
};
export const algorithm_hxdb_add = {
init: function () {
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.LEFT)
.appendField("增加1个士兵");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(ALGORITHM_HUE);
this.setTooltip('');
this.setHelpUrl('');
}
};
export const algorithm_hxdb_result = {
init: function () {
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.LEFT)
.appendField("输出士兵数量");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(ALGORITHM_HUE);
this.setTooltip('');
this.setHelpUrl('');
}
};
// others
export const hanoi_init_offline = {
init: function () {
this.appendDummyInput()
.appendField("准备")
.appendField(new Blockly.FieldNumber(3, 0, 100, 1), "NUM")
.appendField("层汉诺塔");
this.appendValueInput('VAR')
.setCheck(String)
.appendField(Blockly.Msg.HTML_COLOUR);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(ALGORITHM_HUE);
this.setInputsInline(true);
this.setTooltip('');
this.setHelpUrl('');
}
};
export const algorithm_get_current_location = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_GET_CURRENT_LOCATION);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const algorithm_void_path = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MIXPY_ALGORITHM_VOID_PATH);
this.setOutput(true);
}
}
export const algorithm_color_seclet = {
init: function () {
this.setColour(ALGORITHM_HUE);
this.appendDummyInput("")
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(new Blockly.FieldColour("ff0000"), "COLOR");
this.setInputsInline(true);
this.setOutput(true, String);
}
};

View File

@@ -0,0 +1,121 @@
import * as Blockly from 'blockly/core';
const COMMUNICATE_HUE = '#3288dd'; //'#3288dd';
export const requests_get_old = {
init: function () {
this.setColour(COMMUNICATE_HUE);
this.appendValueInput("DOMAIN")
.appendField(Blockly.Msg.DISPLAY_IMAGE_LET2)
.setCheck(String);
this.appendDummyInput("")
.appendField(Blockly.Msg.blockpy_REQUESTS_GET)
.appendField(new Blockly.FieldTextInput('response'), 'VAR')
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.blockpy_REQUESTS_GET_TOOLTIP);
},
getVars: function () {
return [this.getFieldValue('VAR')];
},
renameVar: function (oldName, newName) {
if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {
this.setTitleValue(newName, 'VAR');
}
}
}
export const requests_get = {
init: function () {
this.setColour(COMMUNICATE_HUE);
this.appendValueInput("URL")
.appendField(Blockly.Msg.DISPLAY_IMAGE_LET2)
.setCheck(String);
this.appendDummyInput("")
.appendField(Blockly.Msg.blockpy_CONDUCT)
.appendField(new Blockly.FieldDropdown([["get", "get"], ["head", "head"], ["delete", "delete"]]), 'TYPE')
.appendField(Blockly.Msg.blockpy_REQUESTS)
.appendField(Blockly.Msg.MIXPY_REQUESTS_GET_RESULT)
this.setInputsInline(true);
this.setOutput(true);
this.setTooltip("");
},
}
export const requests_post = {
init: function () {
this.setColour(COMMUNICATE_HUE);
this.appendValueInput("URL")
.appendField(Blockly.Msg.DISPLAY_IMAGE_LET2)
.setCheck(String);
this.appendDummyInput("")
.appendField(Blockly.Msg.blockpy_CONDUCT)
.appendField(new Blockly.FieldDropdown([["post", "post"], ["put", "put"], ["patch", "patch"]]), 'TYPE')
.appendField(Blockly.Msg.blockpy_REQUESTS)
this.appendValueInput("data")
.appendField(Blockly.Msg.blockpy_REQUESTS + Blockly.Msg.OLED_STRING)
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXPY_REQUESTS_GET_RESULT)
this.setInputsInline(true);
this.setOutput(true);
this.setTooltip("");
},
}
export const requests_attribute = {
init: function () {
this.appendValueInput('VAL')
var attr = [
[Blockly.Msg.blockpy_REQUESTS_GET_ATTR_STATUS_CODE, 'status_code'], [Blockly.Msg.blockpy_REQUESTS_GET_ATTR_TEXT, 'text'],
[Blockly.Msg.blockpy_REQUESTS_GET_ATTR_COOKIES, 'cookies'], [Blockly.Msg.blockpy_REQUESTS_GET_ATTR_CONTENT, 'content'],
[Blockly.Msg.MIXPY_TEXT_ENCODE, 'encoding']
];
this.setColour(COMMUNICATE_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_MICROBIT_JS_GET)
.appendField(new Blockly.FieldDropdown(attr), 'ATTR')
this.setInputsInline(true);
this.setOutput(true, String);
}
};
export const requests_method = {
init: function () {
this.appendValueInput("VAR")
.appendField(Blockly.Msg.DISPLAY_IMAGE_LET2)
.setCheck(String);
var method = [
['post', 'post'], ['put', 'put'],
['delete', 'delete'], ['head', 'head'],
['option', 'option']
];
this.setColour(COMMUNICATE_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.blockpy_CONDUCT)
.appendField(new Blockly.FieldDropdown(method), 'DIR')
this.appendDummyInput("")
.appendField(Blockly.Msg.blockpy_REQUESTS)
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
var thisBlock = this;
this.setTooltip(function () {
var mode = thisBlock.getFieldValue('DIR');
var TOOLTIPS = {
'forward': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_FORWARD,
'backward': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_BACKWARD
};
return TOOLTIPS[mode];
});
}
};

View File

@@ -0,0 +1,206 @@
import * as Blockly from 'blockly/core';
const CV_HUE = "f0a559";
export const cv_read_image = {
init: function () {
this.setColour(CV_HUE);
this.appendValueInput("FILE")
.setCheck(String)
.appendField(Blockly.Msg.MIXLY_CV_IMREAD);
this.setInputsInline(true);
this.setPreviousStatement(false);
this.setNextStatement(false);
this.setOutput(true);
}
};
export const cv_show_image = {
init: function () {
this.setColour(CV_HUE);
this.appendValueInput("FILE")
.appendField(Blockly.Msg.OLED_BITMAP);
this.appendValueInput('data')
.setCheck(String)
.appendField(Blockly.Msg.MIXLY_AipNlp_Topic_Title);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setInputsInline(true);
}
}
export const cv_write_image = {
init: function () {
this.setColour(CV_HUE);
this.appendValueInput("FILE")
.appendField(Blockly.Msg.MIXLY_CV_IMWRITE);
this.appendValueInput('data')
.setCheck(String)
.appendField(Blockly.Msg.HTML_NAME);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setInputsInline(true);
}
}
export const cv_waitkey = {
init: function () {
this.setColour(CV_HUE);
this.appendValueInput('data')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_DELAY);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MILLIS + Blockly.Msg.MIXLY_CV_OR_PRESS)
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_CV_WAITKEY_TOOLTIP)
}
}
export const cv_destroy_all = {
init: function () {
this.setColour(CV_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_CV_DESTROY_ALL)
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setInputsInline(true);
}
}
export const cv_line_rect = {
init: function () {
this.setColour(CV_HUE);
this.appendValueInput("FILE")
.appendField(Blockly.Msg.MIXLY_MICROBIT_IMAGE);
var line_rect =
[[Blockly.Msg.MIXLY_CV_RECT, 'rectangle'], [Blockly.Msg.MIXLY_CV_LINE, 'line']];
this.appendValueInput('x1')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_DISPLAY_DRAW)
.appendField(new Blockly.FieldDropdown(line_rect), 'DIR')
.appendField(Blockly.Msg.MIXLY_CV_DRAWLINE_BEGIN + '(x1')
this.appendValueInput('y1')
.setCheck(Number)
.appendField(',y1');
this.appendValueInput('x2')
.setCheck(Number)
.appendField(') ' + Blockly.Msg.MIXLY_CV_DRAWLINE_END + '(x2');
this.appendValueInput('y2')
.setCheck(Number)
.appendField(',y2');
this.appendDummyInput()
.appendField(') ' + Blockly.Msg.MIXLY_CV_DRAWLINE_COLOR)
.appendField(new Blockly.FieldColour('#ff0000'), 'FIELDNAME');
this.appendValueInput('thick')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_CV_DRAWLINE_THICKNESS);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_CV_DRAWLINE_RECT_TOOLTIP)
}
}
export const cv_text = {
init: function () {
this.setColour(CV_HUE);
this.appendValueInput("FILE")
.appendField(Blockly.Msg.MIXLY_MICROBIT_IMAGE);
var font =
[['SIMPLEX', 'SIMPLEX'], ['PLAIN', 'PLAIN'], ['DUPLEX', 'DUPLEX'], ['COMPLEX', 'COMPLEX'], ['COMPLEX_SMALL', 'COMPLEX_SMALL'], ['TRIPLEX', 'TRIPLEX'], ['SCRIPT_SIMPLEX', 'SCRIPT_SIMPLEX'], ['SCRIPT_COMPLEX', 'SCRIPT_COMPLEX'],];
this.appendValueInput('data')
.setCheck(String)
.appendField(Blockly.Msg.MIXLY_CV_DRAWTEXT);
this.appendValueInput('x1')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_CV_DRAWLINE_BEGIN + '(x1')
this.appendValueInput('y1')
.setCheck(Number)
.appendField(',y1');
this.appendDummyInput()
.appendField(') ' + Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_NAME)
.appendField(new Blockly.FieldDropdown(font), 'font');
this.appendValueInput('size')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_NUM);
this.appendDummyInput()
.appendField(') ' + Blockly.Msg.MIXLY_CV_DRAWLINE_COLOR)
.appendField(new Blockly.FieldColour('#ff0000'), 'FIELDNAME');
this.appendValueInput('thick')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_CV_DRAWLINE_THICKNESS);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_CV_DRAWLINE_RECT_TOOLTIP)
}
}
export const cv_face_classifier = {
init: function () {
this.setColour(CV_HUE);
this.appendValueInput("FILE")
.setCheck(String)
.appendField(Blockly.Msg.MIXLY_CV_FACE_CLASSIFIER);
this.setInputsInline(true);
this.setPreviousStatement(false);
this.setNextStatement(false);
this.setOutput(true);
}
};
export const cv_face_detect = {
init: function () {
this.setColour(CV_HUE);
this.appendValueInput("FILE")
.appendField(Blockly.Msg.MIXLY_MICROBIT_IMAGE);
this.appendValueInput("FACE")
.appendField(Blockly.Msg.MIXLY_CV_FACE_DETECT);
this.appendValueInput('SCALE')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_CV_FACE_DETECT_SCALE)
this.appendValueInput('NEIGHBOR')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_CV_FACE_DETECT_NEIGHBOR)
this.setInputsInline(true);
this.setPreviousStatement(false);
this.setNextStatement(false);
this.setOutput(true);
}
};
export const cv_face_detect_all = {
init: function () {
this.setColour(CV_HUE);
this.appendValueInput("FILE")
.appendField(Blockly.Msg.MIXLY_MICROBIT_IMAGE);
this.appendValueInput("FACE")
.appendField(Blockly.Msg.MIXLY_CV_FACE_DETECT);
this.appendValueInput('SCALE')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_CV_FACE_DETECT_SCALE)
this.appendValueInput('NEIGHBOR')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_CV_FACE_DETECT_NEIGHBOR)
this.appendValueInput('x1')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_CV_FACE_DETECT_RANGE)
.appendField(Blockly.Msg.blockpy_TUPLE_MIN)
this.appendValueInput('y1')
.setCheck(Number)
.appendField('×')
this.appendValueInput('x2')
.setCheck(Number)
.appendField(Blockly.Msg.blockpy_TUPLE_MAX)
this.appendValueInput('y2')
.setCheck(Number)
.appendField('×')
this.setInputsInline(true);
this.setPreviousStatement(false);
this.setNextStatement(false);
this.setOutput(true);
}
};

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,355 @@
import * as Blockly from 'blockly/core';
const DS_HUE = 80;
export const ds_create_linkedlist = {
/**
* Block for creating a list with any number of elements of any type.
* @this Blockly.Block
*/
init: function () {
this.setColour(DS_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldLabel(Blockly.Msg.DS_CREATE_LINKEDLIST_NEW))
this.appendDummyInput("")
.appendField(new Blockly.FieldLabel(Blockly.Msg.DS_CREATE_LINKEDLIST_HEAD))
.appendField(new Blockly.FieldTextInput('head'), 'VAR')
this.appendDummyInput("")
.appendField(new Blockly.FieldLabel(Blockly.Msg.DS_CREATE_LINKEDLIST_TYPE))
.appendField(new Blockly.FieldTextInput('tag'), 'TYPE')
this.appendDummyInput()
.appendField(Blockly.Msg.DS_CREATE_LINKEDLIST_ATTRIBUTE);
this.itemCount_ = 1;
this.updateShape_();
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setMutator(new Blockly.icons.MutatorIcon(['ds_create_linkedlist_item'], this));
this.setTooltip(Blockly.Msg.DS_CREATE_LINKEDLIST_TOOLTIP);
},
/**
* Create XML to represent list inputs.
* @return {Element} XML storage element.
* @this Blockly.Block
*/
mutationToDom: function () {
var container = document.createElement('mutation');
container.setAttribute('items', this.itemCount_);
return container;
},
/**
* Parse XML to restore the list inputs.
* @param {!Element} xmlElement XML storage element.
* @this Blockly.Block
*/
domToMutation: function (xmlElement) {
this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);
this.updateShape_();
},
/**
* Populate the mutator's dialog with this block's components.
* @param {!Blockly.Workspace} workspace Mutator's workspace.
* @return {!Blockly.Block} Root block in mutator.
* @this Blockly.Block
*/
decompose: function (workspace) {
var containerBlock =
workspace.newBlock('ds_create_linkedlist_container');
containerBlock.initSvg();
var connection = containerBlock.getInput('STACK').connection;
for (var i = 0; i < this.itemCount_; i++) {
var itemBlock = workspace.newBlock('ds_create_linkedlist_item');
itemBlock.initSvg();
connection.connect(itemBlock.previousConnection);
connection = itemBlock.nextConnection;
}
return containerBlock;
},
/**
* Reconfigure this block based on the mutator dialog's components.
* @param {!Blockly.Block} containerBlock Root block in mutator.
* @this Blockly.Block
*/
compose: function (containerBlock) {
var itemBlock = containerBlock.getInputTargetBlock('STACK');
// Count number of inputs.
var connections = [];
var i = 0;
while (itemBlock) {
connections[i] = itemBlock.valueConnection_;
itemBlock = itemBlock.nextConnection &&
itemBlock.nextConnection.targetBlock();
i++;
}
this.itemCount_ = i;
this.updateShape_();
// Reconnect any child blocks.
for (var i = 0; i < this.itemCount_; i++) {
if (connections[i]) {
this.getInput('ADD' + i).connection.connect(connections[i]);
}
}
},
/**
* Store pointers to any connected child blocks.
* @param {!Blockly.Block} containerBlock Root block in mutator.
* @this Blockly.Block
*/
saveConnections: function (containerBlock) {
var itemBlock = containerBlock.getInputTargetBlock('STACK');
var i = 0;
while (itemBlock) {
var input = this.getInput('ADD' + i);
itemBlock.valueConnection_ = input && input.connection.targetConnection;
i++;
itemBlock = itemBlock.nextConnection &&
itemBlock.nextConnection.targetBlock();
}
},
/**
* Modify this block to have the correct number of inputs.
* @private
* @this Blockly.Block
*/
updateShape_: function () {
// Delete everything.
if (this.getInput('EMPTY')) {
this.removeInput('EMPTY');
}
var keyNames = [];
for (var i = 0; this.getInput('ADD' + i); i++) {
//this.getInput('VALUE' + i).removeField("KEY"+i);
keyNames.push(this.getFieldValue("KEY" + i))
this.removeInput('ADD' + i);
}
// Rebuild block.
//if (this.itemCount_ == 0) {
// this.getField('TIP').setText(Blockly.Msg.DICTS_CREATE_EMPTY_TITLE);
// } else {
// this.getField('TIP').setText(Blockly.Msg.DS_CREATE_LINKEDLIST_NEW);
for (var i = 0; i < this.itemCount_; i++) {
this.appendValueInput('ADD' + i)
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(
new Blockly.FieldTextInput(keyNames.length > i
? keyNames[i]
: 'name'),
'KEY' + i)
.appendField("=")
}
}, getVars: function () {
return [this.getFieldValue('VAR')];
},
renameVar: function (oldName, newName) {
if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {
this.setTitleValue(newName, 'VAR');
}
}
};
export const ds_create_linkedlist_container = {
/**
* Mutator block for list container.
* @this Blockly.Block
*/
init: function () {
this.setColour(DS_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.DS_CREATE_LINKEDLIST_CONTAINER_TITLE);
this.appendStatementInput('STACK');
this.setTooltip(Blockly.Msg.DS_CREATE_LINKEDLIST_CONTAINER_TOOLTIP);
this.contextMenu = false;
}
};
export const ds_create_linkedlist_item = {
/**
* Mutator bolck for adding items.
* @this Blockly.Block
*/
init: function () {
this.setColour(DS_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.DS_CREATE_LINKEDLIST_ITEM_TITLE);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.DS_CREATE_LINKEDLIST_ITEM_TOOLTIP);
this.contextMenu = false;
}
};
export const ds_create_node = {
init: function () {
this.setColour(DS_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.DS_CREATE_NODE_USE)
.appendField(new Blockly.FieldTextInput('tag'), 'TYPE')
this.appendDummyInput("")
.appendField(Blockly.Msg.DS_CREATE_NODE_NEW)
this.appendValueInput('NODE')
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.DS_CREATE_NODE_TOOLTIP);
}
}
export const ds_get_node_attr = {
init: function () {
this.setColour(DS_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.DS_GET_NODE_ATTR_NODE)
this.appendValueInput('NODE')
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_AIP_ATTR)
.appendField(new Blockly.FieldTextInput('name'), 'TYPE')
this.appendDummyInput("")
.appendField(Blockly.Msg.DICTS_ADD_VALUE)
this.setOutput(true);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.DS_GET_NODE_ATTR_TOOLTIP);
}
}
export const ds_set_node_attr = {
init: function () {
this.setColour(DS_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.DS_SET_NODE_ATTR_NODE)
this.appendValueInput('NODE')
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_AIP_ATTR)
.appendField(new Blockly.FieldTextInput('name'), 'TYPE')
this.appendValueInput('VAR')
.appendField(Blockly.Msg.DS_SET_NODE_ATTR_SET)
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.DS_SET_NODE_ATTR_TOOLTIP);
}
}
export const ds_add_node_by_name = {
init: function () {
this.setColour(DS_HUE);
this.appendValueInput('NODE')
.appendField(Blockly.Msg.DS_ADD_NODE_HEAD_NODE)
var pos =
[[Blockly.Msg.DS_ADD_NODE_BEFORE, 'before'], [Blockly.Msg.DS_ADD_NODE_AFTER, 'after']];
this.appendDummyInput("")
.appendField(Blockly.Msg.DS_ADD_NODE_LINKEDLIST)
this.appendValueInput('NODE2')
.appendField(Blockly.Msg.DS_SET_NODE_ATTR_NODE)
this.appendValueInput('NODE3')
.appendField(new Blockly.FieldDropdown(pos), 'DIR')
.appendField(Blockly.Msg.DS_ADD_NODE)
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.DS_ADD_NODE_TOOLTIP);
}
}
export const ds_add_node_by_attr = {
init: function () {
this.setColour(DS_HUE);
this.appendValueInput('NODE')
.appendField(Blockly.Msg.DS_ADD_NODE_HEAD_NODE)
var pos =
[[Blockly.Msg.DS_ADD_NODE_BEFORE, 'before'], [Blockly.Msg.DS_ADD_NODE_AFTER, 'after']];
this.appendDummyInput("")
.appendField(Blockly.Msg.DS_ADD_NODE_LINKEDLIST)
this.appendDummyInput("")
.appendField(Blockly.Msg.DS_CREATE_LINKEDLIST_ITEM_TITLE)
.appendField(new Blockly.FieldTextInput('name'), 'TYPE')
this.appendValueInput('VAR')
.appendField(Blockly.Msg.MIXLY_AS)
this.appendDummyInput("")
.appendField(Blockly.Msg.DS_ADD_NODE_ATTR)
this.appendValueInput('NODE3')
.appendField(new Blockly.FieldDropdown(pos), 'DIR')
.appendField(Blockly.Msg.DS_ADD_NODE)
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.DS_ADD_NODE_TOOLTIP);
}
}
export const ds_del_node_by_name = {
init: function () {
this.setColour(DS_HUE);
this.appendValueInput('NODE')
.appendField(Blockly.Msg.DS_ADD_NODE_HEAD_NODE)
this.appendDummyInput("")
.appendField(Blockly.Msg.DS_ADD_NODE_LINKEDLIST)
this.appendValueInput('NODE2')
.appendField(Blockly.Msg.DS_DEL_NODE_NAME)
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.DS_DEL_NODE_TOOLTIP);
}
}
export const ds_del_node_by_attr = {
init: function () {
this.setColour(DS_HUE);
this.appendValueInput('NODE')
.appendField(Blockly.Msg.DS_ADD_NODE_HEAD_NODE)
this.appendDummyInput("")
.appendField(Blockly.Msg.DS_ADD_NODE_LINKEDLIST)
this.appendDummyInput("")
.appendField(Blockly.Msg.DS_DEL_NODE_ATTR)
.appendField(new Blockly.FieldTextInput('name'), 'TYPE')
this.appendValueInput('VAR')
.appendField(Blockly.Msg.MIXLY_AS)
this.appendDummyInput("")
.appendField(Blockly.Msg.DS_ADD_NODE_ATTR)
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.DS_DEL_NODE_TOOLTIP);
}
}
export const ds_reverse_linkedlist = {
init: function () {
this.setColour(DS_HUE);
this.appendValueInput('NODE')
.appendField(Blockly.Msg.DS_ADD_NODE_HEAD_NODE)
this.appendDummyInput("")
.appendField(Blockly.Msg.DS_REVERSE_LINKEDLIST)
this.appendValueInput('NODE2')
.appendField(Blockly.Msg.DS_REVERSE_LINKEDLIST_NEW_HEAD)
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.DS_DEL_NODE_TOOLTIP);
}
}

View File

@@ -0,0 +1,273 @@
import * as Blockly from 'blockly/core';
const FACTORY_HUE = "#777777"; //65;
export const factory_from_import = {
init: function () {
this.setColour(FACTORY_HUE);
this.appendDummyInput("")
.appendField("from ")
.appendField(new Blockly.FieldTextInput('ESP32'), 'path')
.appendField(" import ")
.appendField(new Blockly.FieldTextInput('*'), 'module');
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const factory_import = {
init: function () {
this.setColour(FACTORY_HUE);
this.appendDummyInput("")
.appendField("import ")
.appendField(new Blockly.FieldTextInput('module'), 'module');
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const factory_function_noreturn = {
init: function () {
//console.log('init');
this.setColour(FACTORY_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldTextInput('my_function'), 'NAME');
this.itemCount_ = 1;
this.arguments_ = ['x'];//add
this.updateShape_();
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setMutator(new Blockly.icons.MutatorIcon(['factory_create_with_item'], this));
},
mutationToDom: function () {
//console.log('mutationToDom');
var container = document.createElement('mutation');
container.setAttribute('items', this.itemCount_);
//add
for (var i = 0; i < this.arguments_.length; i++) {
var parameter = document.createElement('arg');
parameter.setAttribute('name', this.arguments_[i]);
container.appendChild(parameter);
}
return container;
},
domToMutation: function (xmlElement) {
//console.log('domToMutation');
this.arguments_ = [];//add
//add
for (var i = 0; xmlElement.childNodes[i]; i++) {
let childNode = xmlElement.childNodes[i];
if (childNode.nodeName.toLowerCase() == 'arg') {
this.arguments_.push(childNode.getAttribute('name'));
}
}
this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);
this.updateShape_();
},
decompose: function (workspace) {
//console.log('decompose');
var containerBlock =
workspace.newBlock('factory_create_with_container');
containerBlock.initSvg();
var connection = containerBlock.getInput('STACK').connection;
for (var i = 0; i < this.itemCount_; i++) {
var itemBlock = workspace.newBlock('factory_create_with_item');
itemBlock.initSvg();
itemBlock.setFieldValue(this.arguments_[i], 'NAME');//add
connection.connect(itemBlock.previousConnection);
connection = itemBlock.nextConnection;
}
return containerBlock;
},
compose: function (containerBlock) {
//console.log('compose');
this.arguments_ = [];//add
var itemBlock = containerBlock.getInputTargetBlock('STACK');
// Count number of inputs.
var connections = [];
var i = 0;
while (itemBlock) {
this.arguments_.push(itemBlock.getFieldValue('NAME'));//add
connections[i] = itemBlock.valueConnection_;
itemBlock = itemBlock.nextConnection &&
itemBlock.nextConnection.targetBlock();
i++;
}
this.itemCount_ = i;
this.updateShape_();
// Reconnect any child blocks.
for (var i = 0; i < this.itemCount_; i++) {
if (connections[i]) {
this.getInput('ADD' + i)
.connection.connect(connections[i]);
}
}
},
saveConnections: function (containerBlock) {
//console.log('saveConnections');
var itemBlock = containerBlock.getInputTargetBlock('STACK');
var i = 0;
while (itemBlock) {
var input = this.getInput('ADD' + i);
itemBlock.valueConnection_ = input && input.connection.targetConnection;
i++;
itemBlock = itemBlock.nextConnection &&
itemBlock.nextConnection.targetBlock();
}
},
updateShape_: function () {
//console.log('updateShape_');
// Delete everything.
if (this.getInput('EMPTY')) {
this.removeInput('EMPTY');
} else {
var i = 0;
while (this.getInput('ADD' + i)) {
this.removeInput('ADD' + i);
i++;
}
}
// Rebuild block.
for (var i = 0; i < this.itemCount_; i++) {
this.appendValueInput('ADD' + i)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(this.arguments_[i]);
}
}
};
export const factory_create_with_container = {
init: function () {
this.setColour(FACTORY_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_PARAMS);
this.appendStatementInput('STACK');
this.contextMenu = false;
}
};
export const factory_create_with_item = {
init: function () {
this.setColour(FACTORY_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.LISTS_CREATE_WITH_ITEM_TITLE + ':')
.appendField(new Blockly.FieldTextInput('x'), 'NAME');
this.setPreviousStatement(true);
this.setNextStatement(true);
this.contextMenu = false;
}
};
export const factory_function_return = {
init: function () {
this.setColour(FACTORY_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldTextInput('my_function'), 'NAME');
this.itemCount_ = 1;
this.arguments_ = ['x'];//add
this.updateShape_();
this.setOutput(true);
this.setMutator(new Blockly.icons.MutatorIcon(['factory_create_with_item'], this));
},
mutationToDom: factory_function_noreturn.mutationToDom,
domToMutation: factory_function_noreturn.domToMutation,
decompose: factory_function_noreturn.decompose,
compose: factory_function_noreturn.compose,
saveConnections: factory_function_noreturn.saveConnections,
updateShape_: factory_function_noreturn.updateShape_
};
export const factory_declare = {
init: function () {
this.setColour(FACTORY_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldTextInput('test'), 'NAME')
.appendField("=")
.appendField(new Blockly.FieldTextInput('Test'), 'TYPE')
.appendField("()");
this.setPreviousStatement(true);
this.setNextStatement(true);
}
}
export const factory_callMethod_noreturn = {
init: function () {
this.setColour(FACTORY_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldTextInput('test'), 'NAME')
.appendField('.')
.appendField(new Blockly.FieldTextInput('callMethod'), 'METHOD');
this.itemCount_ = 1;
this.arguments_ = ['x'];//add
this.updateShape_();
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setMutator(new Blockly.icons.MutatorIcon(['factory_create_with_item'], this));
},
mutationToDom: factory_function_noreturn.mutationToDom,
domToMutation: factory_function_noreturn.domToMutation,
decompose: factory_function_noreturn.decompose,
compose: factory_function_noreturn.compose,
saveConnections: factory_function_noreturn.saveConnections,
updateShape_: factory_function_noreturn.updateShape_
};
export const factory_callMethod_return = {
init: function () {
this.setColour(FACTORY_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldTextInput('test'), 'NAME')
.appendField('.')
.appendField(new Blockly.FieldTextInput('callMethod'), 'METHOD');
this.itemCount_ = 1;
this.arguments_ = ['x'];//add
this.updateShape_();
this.setOutput(true);
this.setMutator(new Blockly.icons.MutatorIcon(['factory_create_with_item'], this));
},
mutationToDom: factory_function_noreturn.mutationToDom,
domToMutation: factory_function_noreturn.domToMutation,
decompose: factory_function_noreturn.decompose,
compose: factory_function_noreturn.compose,
saveConnections: factory_function_noreturn.saveConnections,
updateShape_: factory_function_noreturn.updateShape_
};
export const factory_block = {
init: function () {
this.setColour(FACTORY_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldTextInput('display.scroll("Hello World!")'), 'VALUE');
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const factory_block_return = {
init: function () {
this.setColour(FACTORY_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldTextInput('test'), 'VALUE');
this.setOutput(true);
}
};
export const factory_block_with_textarea = {
init: function () {
this.setColour(FACTORY_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldMultilineInput('display.scroll("Hello World!")\ndisplay.scroll("Hello Mixly!")'), 'VALUE');
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const factory_block_return_with_textarea = {
init: function () {
this.setColour(FACTORY_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldMultilineInput('Hello\nMixly'), 'VALUE');
this.setOutput(true);
}
};

View File

@@ -0,0 +1,104 @@
import * as Blockly from 'blockly/core';
const HARDWARE_HUE = 40;
export const hardware_arduino_start = {
init: function () {
this.setColour(HARDWARE_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_HARDWARE)
this.appendValueInput('SUB')
.setCheck("var");
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_HARDWARE_START)
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const inout_highlow = {
init: function () {
this.setColour(HARDWARE_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_HIGH, "HIGH"], [Blockly.Msg.MIXLY_LOW, "LOW"]]), 'BOOL')
this.setOutput(true, Boolean);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);
}
};
export const hardware_arduino_digital_write = {
init: function () {
this.setColour(HARDWARE_HUE);
this.appendValueInput('SUB')
.appendField(Blockly.Msg.MIXLY_HARDWARE)
.setCheck("var");
this.appendValueInput("PIN", Number)
.appendField(Blockly.Msg.MIXLY_Digital_PINMODEOUT)
.appendField(Blockly.Msg.MIXLY_PIN)
.setCheck(Number);
this.appendValueInput("STAT")
.appendField(Blockly.Msg.MIXLY_STAT)
.setCheck([Number, Boolean]);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.LANG_INOUT_DIGITAL_WRITE_TOOLTIP);
}
};
export const hardware_arduino_digital_read = {
init: function () {
this.setColour(HARDWARE_HUE);
this.appendValueInput('SUB')
.appendField(Blockly.Msg.MIXLY_HARDWARE)
.setCheck("var");
this.appendValueInput("PIN", Number)
.appendField(Blockly.Msg.MIXLY_Digital_PINMODEIN)
.appendField(Blockly.Msg.MIXLY_PIN)
.setCheck(Number);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_ESP32_MACHINE_VALUE)
this.setInputsInline(true);
this.setOutput(true, [Boolean, Number]);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_DIGITAL_READ);
}
};
export const hardware_arduino_analog_write = {
init: function () {
this.setColour(HARDWARE_HUE);
this.appendValueInput('SUB')
.appendField(Blockly.Msg.MIXLY_HARDWARE)
.setCheck("var");
this.appendValueInput("PIN", Number)
.appendField(Blockly.Msg.MIXLY_Analog_PINMODEOUT)
.appendField(Blockly.Msg.MIXLY_PIN)
.setCheck(Number);
this.appendValueInput("NUM", Number)
.appendField(Blockly.Msg.MIXLY_VALUE2)
.setCheck(Number);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_ANALOG_WRITE);
}
};
export const hardware_arduino_analog_read = {
init: function () {
this.setColour(HARDWARE_HUE);
this.appendValueInput('SUB')
.appendField(Blockly.Msg.MIXLY_HARDWARE)
.setCheck("var");
this.appendValueInput("PIN", Number)
.appendField(Blockly.Msg.MIXLY_Analog_PINMODEIN)
.appendField(Blockly.Msg.MIXLY_PIN)
.setCheck(Number);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_ESP32_MACHINE_VALUE)
this.setInputsInline(true);
this.setOutput(true, [Boolean, Number]);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_ANALOG_READ);
}
};

View File

@@ -0,0 +1,229 @@
import * as Blockly from 'blockly/core';
export const inout_input = {
init: function () {
this.setColour(20);
this.appendValueInput("VAR")
.appendField(Blockly.Msg.blockpy_inout_raw_input)
.setCheck(String);
this.setOutput(true);
this.setTooltip(Blockly.Msg.INOUT_input_TOOLTIP);
}
};
export const inout_print = {
init: function () {
this.setColour(20);
this.appendValueInput("VAR")
.appendField(Blockly.Msg.MIXLY_SERIAL_PRINTLN);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip(Blockly.Msg.BLOCKPY_PRINT_TOOLTIP);
}
};
export const inout_print_inline = {
init: function () {
this.setColour(20);
this.appendValueInput("VAR")
.appendField(Blockly.Msg.MIXLY_SERIAL_PRINT);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip(Blockly.Msg.TEXT_PRINT_TOOLTIP);
}
};
export const inout_print_end = {
init: function () {
this.setColour(20);
this.appendValueInput("VAR")
.appendField(Blockly.Msg.MIXLY_SERIAL_PRINT);
this.appendValueInput("END")
.appendField(Blockly.Msg.MIXLY_ENDSWITH);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_PYTHON_INOUT_PRINT_END_TOOLTIP);
}
};
export const inout_type_input = {
init: function () {
var input_type =
[[Blockly.Msg.LANG_MATH_STRING, 'str'], [Blockly.Msg.LANG_MATH_INT, 'int']
, [Blockly.Msg.LANG_MATH_FLOAT, 'float']];
this.setColour(20);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
.appendField(new Blockly.FieldDropdown(input_type), 'DIR')
this.appendValueInput("VAR")
.appendField(Blockly.Msg.PROCEDURES_MUTATORCONTAINER_TITLE)
.setCheck(String);
this.setInputsInline(true);
this.setOutput(true);
var thisBlock = this;
this.setTooltip(function () {
var mode = thisBlock.getFieldValue('DIR');
var TOOLTIPS = {
'str': Blockly.Msg.MIXLY_MIXPY_INOUT_STR_INPUT_TOOLTIP,
'int': Blockly.Msg.MIXLY_MIXPY_INOUT_INT_INPUT_TOOLTIP,
'float': Blockly.Msg.MIXLY_MIXPY_INOUT_FLOAT_INPUT_TOOLTIP
};
return TOOLTIPS[mode];
});
}
};
export const pyinout_type_input = {
init: function () {
var input_type =
[[Blockly.Msg.LANG_MATH_STRING, 'str'], [Blockly.Msg.LANG_MATH_INT, 'int']
, [Blockly.Msg.LANG_MATH_FLOAT, 'float']];
this.setColour(20);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
.appendField(new Blockly.FieldDropdown(input_type), 'DIR')
this.appendValueInput("VAR")
.appendField(Blockly.Msg.PROCEDURES_MUTATORCONTAINER_TITLE)
.setCheck(String);
this.setInputsInline(true);
this.setOutput(true);
var thisBlock = this;
this.setTooltip(function () {
var mode = thisBlock.getFieldValue('DIR');
var TOOLTIPS = {
'str': Blockly.Msg.MIXLY_MIXPY_INOUT_STR_INPUT_TOOLTIP,
'int': Blockly.Msg.MIXLY_MIXPY_INOUT_INT_INPUT_TOOLTIP,
'float': Blockly.Msg.MIXLY_MIXPY_INOUT_FLOAT_INPUT_TOOLTIP
};
return TOOLTIPS[mode];
});
}
};
export const inout_print_many = {
init: function () {
this.setColour(20);
this.itemCount_ = 2;
this.updateShape_();
this.setPreviousStatement(false);
this.setNextStatement(false);
this.setInputsInline(true);
this.setMutator(new Blockly.icons.MutatorIcon(['inout_print_item'], this));
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.MIXLY_MIXPY_INOUT_PRINT_MANY_TOOLTIP);
},
mutationToDom: function () {
var container = document.createElement('mutation');
container.setAttribute('items', this.itemCount_);
return container;
},
domToMutation: function (xmlElement) {
this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);
this.updateShape_();
},
decompose: function (workspace) {
var containerBlock =
workspace.newBlock('inout_print_container');
containerBlock.initSvg();
var connection = containerBlock.getInput('STACK').connection;
for (var i = 0; i < this.itemCount_; i++) {
var itemBlock = workspace.newBlock('inout_print_item');
itemBlock.initSvg();
connection.connect(itemBlock.previousConnection);
connection = itemBlock.nextConnection;
}
return containerBlock;
},
compose: function (containerBlock) {
var itemBlock = containerBlock.getInputTargetBlock('STACK');
// Count number of inputs.
var connections = [];
var i = 0;
while (itemBlock) {
connections[i] = itemBlock.valueConnection_;
itemBlock = itemBlock.nextConnection &&
itemBlock.nextConnection.targetBlock();
i++;
}
this.itemCount_ = i;
this.updateShape_();
// Reconnect any child blocks.
for (var i = 0; i < this.itemCount_; i++) {
if (connections[i]) {
this.getInput('ADD' + i)
.connection.connect(connections[i]);
}
}
},
saveConnections: function (containerBlock) {
var itemBlock = containerBlock.getInputTargetBlock('STACK');
var i = 0;
while (itemBlock) {
var input = this.getInput('ADD' + i);
itemBlock.valueConnection_ = input && input.connection.targetConnection;
i++;
itemBlock = itemBlock.nextConnection &&
itemBlock.nextConnection.targetBlock();
}
},
updateShape_: function () {
// Delete everything.
if (this.getInput('EMPTY')) {
this.removeInput('EMPTY');
} else {
var i = 0;
while (this.getInput('ADD' + i)) {
this.removeInput('ADD' + i);
i++;
}
}
// Rebuild block.
if (this.itemCount_ == 0) {
this.appendDummyInput('EMPTY')
.appendField(Blockly.Msg.MIXLY_MIXPY_INOUT_PRINT_EMPTY);
} else {
for (var i = 0; i < this.itemCount_; i++) {
var input = this.appendValueInput('ADD' + i);
if (i == 0) {
input.appendField(Blockly.Msg.MIXLY_SERIAL_PRINTLN);
}
}
}
}
};
export const inout_print_container = {
init: function () {
this.setColour(20);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_SERIAL_PRINTLN);
this.appendStatementInput('STACK');
this.setTooltip(Blockly.Msg.MIXLY_MIXPY_INOUT_PRINT_MANY_CONTAINER_TOOLTIP);
this.contextMenu = false;
}
};
export const inout_print_item = {
init: function () {
this.setColour(20);
this.appendDummyInput()
.appendField(Blockly.Msg.LISTS_CREATE_WITH_ITEM_TITLE);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.MIXLY_MIXPY_INOUT_PRINT_MANY_ITEM_TOOLTIP);
this.contextMenu = false;
}
};

View File

@@ -0,0 +1,670 @@
import * as Blockly from 'blockly/core';
import * as Mixly from 'mixly';
const IOT_HUE = '#526FC3';
//'#2FAD7A';
export const iot_onenet_connect = {
init: function () {
this.setColour("#78AAE0");
this.appendValueInput('VAR')
.setCheck("var")
.appendField("OneNET" + Blockly.Msg.TUPLE_JOIN);
this.appendValueInput('CLIENT')
.setCheck(String)
.appendField(Blockly.Msg.MIXLY_ESP32_ONENET_CLIENT);
this.appendValueInput('SERVER')
.setCheck(String)
.appendField(Blockly.Msg.MIXLY_ESP32_ONENET_SERVER);
this.appendValueInput('USERNAME')
.setCheck(String)
.appendField(Blockly.Msg.MIXLY_ESP32_ONENET_USERNAME);
this.appendValueInput('PASSWORD')
.setCheck(String)
.appendField(Blockly.Msg.MIXLY_ESP32_ONENET_PASSWORD);
this.appendValueInput('TOPIC')
.setCheck(String)
.appendField(Blockly.Msg.MIXLY_ESP32_ONENET_TOPIC);
this.appendValueInput('SUB')
.appendField(Blockly.Msg.MIXLY_ESP32_ONENET_SUB);
//this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_CONNECT_TOOLTIP);
}
};
export const iot_onenet_disconnect = {
init: function () {
this.setColour("#78AAE0");
this.appendValueInput('VAR')
.setCheck("var")
.appendField("OneNET")
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_ESP32_DISCONNECT_ONENET);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_DISCONNECT_TOOLTIP);
}
};
export const iot_onenet_check = {
init: function () {
this.setColour("#78AAE0");
this.appendValueInput('VAR')
.setCheck("var")
.appendField("OneNET")
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_ESP32_CHECK_ONENET);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_CHECK_TOOLTIP);
}
};
export const iot_onenet_publish_dict = {
init: function () {
this.setColour("#78AAE0");
this.appendValueInput('VAR')
.setCheck("var")
.appendField("OneNET")
this.appendValueInput('DICT')
.appendField(Blockly.Msg.MIXLY_ESP32_PUBLISH_ONENET);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_PRINT_DATA)
.appendField(new Blockly.FieldCheckbox('TRUE'), 'is_print');
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_PUBLISH_DICT_TOOLTIP);
}
};
export const iot_onenet_publish = {
/**
* Block for creating a list with any number of elements of any type.
* @this Blockly.Block
*/
init: function () {
this.setColour("#78AAE0");
this.appendValueInput('VAR')
.setCheck("var")
.appendField("OneNET")
.setAlign(Blockly.inputs.Align.RIGHT)
this.appendDummyInput()
.appendField(new Blockly.FieldLabel(Blockly.Msg.MIXLY_ESP32_PUBLISH_ONENET), 'TIP')
.setAlign(Blockly.inputs.Align.RIGHT)
this.itemCount_ = 2;
this.updateShape_();
this.setInputsInline(false);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setMutator(new Blockly.Mutator(['iot_publish_item']));
this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_PUBLISH_TOOLTIP);
},
/**
* Create XML to represent list inputs.
* @return {Element} XML storage element.
* @this Blockly.Block
*/
mutationToDom: function () {
var container = document.createElement('mutation');
container.setAttribute('items', this.itemCount_);
return container;
},
/**
* Parse XML to restore the list inputs.
* @param {!Element} xmlElement XML storage element.
* @this Blockly.Block
*/
domToMutation: function (xmlElement) {
this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);
this.updateShape_();
},
/**
* Populate the mutator's dialog with this block's components.
* @param {!Blockly.Workspace} workspace Mutator's workspace.
* @return {!Blockly.Block} Root block in mutator.
* @this Blockly.Block
*/
decompose: function (workspace) {
var containerBlock =
workspace.newBlock('iot_publish_container');
containerBlock.initSvg();
var connection = containerBlock.getInput('STACK').connection;
for (var i = 0; i < this.itemCount_; i++) {
var itemBlock = workspace.newBlock('iot_create_with_item');
itemBlock.initSvg();
connection.connect(itemBlock.previousConnection);
connection = itemBlock.nextConnection;
}
return containerBlock;
},
/**
* Reconfigure this block based on the mutator dialog's components.
* @param {!Blockly.Block} containerBlock Root block in mutator.
* @this Blockly.Block
*/
compose: function (containerBlock) {
var itemBlock = containerBlock.getInputTargetBlock('STACK');
// Count number of inputs.
var connections = [];
var i = 0;
while (itemBlock) {
connections[i] = itemBlock.valueConnection_;
itemBlock = itemBlock.nextConnection &&
itemBlock.nextConnection.targetBlock();
i++;
}
this.itemCount_ = i;
this.updateShape_();
// Reconnect any child blocks.
for (var i = 0; i < this.itemCount_; i++) {
if (connections[i]) {
this.getInput('ADD' + i).connection.connect(connections[i]);
}
}
},
/**
* Store pointers to any connected child blocks.
* @param {!Blockly.Block} containerBlock Root block in mutator.
* @this Blockly.Block
*/
saveConnections: function (containerBlock) {
var itemBlock = containerBlock.getInputTargetBlock('STACK');
var i = 0;
while (itemBlock) {
var input = this.getInput('ADD' + i);
itemBlock.valueConnection_ = input && input.connection.targetConnection;
i++;
itemBlock = itemBlock.nextConnection &&
itemBlock.nextConnection.targetBlock();
}
},
/**
* Modify this block to have the correct number of inputs.
* @private
* @this Blockly.Block
*/
updateShape_: function () {
// Delete everything.
if (this.getInput('EMPTY')) {
this.removeInput('EMPTY');
}
var keyNames = [];
for (var i = 0; this.getInput('ADD' + i); i++) {
//this.getInput('VALUE' + i).removeField("KEY"+i);
keyNames.push(this.getFieldValue("KEY" + i))
this.removeInput('ADD' + i);
}
// Rebuild block.
if (this.itemCount_ == 0) {
//this.getField('TIP')
//.setText(Blockly.Msg.MIXLY_ESP32_PUBLISH_ONENET_EMPTY);
this.setFieldValue(Blockly.Msg.MIXLY_ESP32_PUBLISH_ONENET_EMPTY, 'TIP');
} else {
//this.getField('TIP')
//.setText(Blockly.Msg.MIXLY_ESP32_PUBLISH_ONENET);
this.setFieldValue(Blockly.Msg.MIXLY_ESP32_PUBLISH_ONENET, 'TIP');
for (var i = 0; i < this.itemCount_; i++) {
this.appendValueInput('ADD' + i)
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(
new Blockly.FieldTextInput(
keyNames.length > i
? keyNames[i]
: '"key' + (i + 1) + '"'),
'KEY' + i)
.appendField(":")
}
}
}, getVars: function () {
return [this.getFieldValue('VAR')];
},
renameVar: function (oldName, newName) {
if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {
this.setTitleValue(newName, 'VAR');
}
}
};
export const iot_publish_container = {
/**
* Mutator block for list container.
* @this Blockly.Block
*/
init: function () {
this.setColour(IOT_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MICROBIT_TYPE_DICT);
this.appendStatementInput('STACK');
this.setTooltip(Blockly.Msg.DICTS_CREATE_WITH_CONTAINER_TOOLTIP);
this.contextMenu = false;
}
};
export const iot_publish_item = {
/**
* Mutator bolck for adding items.
* @this Blockly.Block
*/
init: function () {
this.setColour(IOT_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.DICTS_CREATE_WITH_ITEM_TITLE);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.DICTS_CREATE_WITH_ITEM_TOOLTIP);
this.contextMenu = false;
}
};
export const iot_create_with_item = {
/**
* Mutator bolck for adding items.
* @this Blockly.Block
*/
init: function () {
this.setColour(IOT_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.DICTS_CREATE_WITH_ITEM_TITLE);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.DICTS_CREATE_WITH_ITEM_TOOLTIP);
this.contextMenu = false;
}
};
export const iot_mixio_connect = {
init: function () {
this.setColour(IOT_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_CREATE_MQTT_CLIENT_AND_CONNECT);
this.appendValueInput('SERVER')
.setCheck(String)
.appendField(Blockly.Msg.MIXLY_EMQX_SERVER)
.setAlign(Blockly.inputs.Align.RIGHT)
this.appendValueInput('USERNAME')
.setCheck(String)
.appendField(Blockly.Msg.MIXLY_WIFI_USERNAME)
.setAlign(Blockly.inputs.Align.RIGHT)
this.appendValueInput('PASSWORD')
.setCheck(String)
.appendField(Blockly.Msg.MIXLY_IOT_PASSWORD)
.setAlign(Blockly.inputs.Align.RIGHT)
this.appendValueInput('PROJECT')
.setCheck(String)
.appendField(Blockly.Msg.MIXLY_EMQX_PROJECT)
.setAlign(Blockly.inputs.Align.RIGHT)
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const IOT_MIXIO_PUBLISH = {
init: function () {
this.setColour(IOT_HUE);
this.appendDummyInput()
.appendField("MixIO")
this.appendValueInput('TOPIC')
.appendField(Blockly.Msg.MIXLY_EMQX_PUBLISH_NEW)
.appendField(Blockly.Msg.MIXLY_EMQX_PUBLISH_TOPIC);
this.appendValueInput('MSG')
.appendField(Blockly.Msg.HTML_BODY);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_EMQX_PUBLISH_TOOLTIP);
}
};
export const IOT_MIXIO_PUBLISHEX = {
init: function () {
this.setColour(IOT_HUE);
this.appendDummyInput()
.appendField("MixIO")
this.appendValueInput('TOPIC')
.appendField(Blockly.Msg.MIXLY_EMQX_PUBLISH_NEW)
.appendField(Blockly.Msg.MIXLY_EMQX_PUBLISH_TOPIC);
this.appendValueInput('MSG')
.appendField(Blockly.Msg.HTML_BODY);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_Service_quality_display)
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.MIXLY_AT_MOST_ONCE,"0"],
[Blockly.Msg.MIXLY_AT_LEAST_ONCE,"1"]
]),"quality")
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_EMQX_PUBLISH_TOOLTIP);
}
};
export const IOT_MIXIO_SUBSCRIBE = {
init: function () {
this.setColour(IOT_HUE);
this.appendDummyInput()
.appendField("MixIO")
this.appendValueInput('TOPIC')
.appendField(Blockly.Msg.MIXLY_EMQX_SUBSCRIBE + Blockly.Msg.MIXLY_MICROBIT_MSG)
.appendField(Blockly.Msg.MIXLY_EMQX_PUBLISH_TOPIC);
this.appendValueInput('METHOD')
.appendField(Blockly.Msg.MIXLY_EMQX_SET_METHOD);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_EMQX_SUBSCRIBE_TOOLTIP);
}
};
export const IOT_MIXIO_UNSUBSCRIBE = {
init: function () {
this.setColour(IOT_HUE);
this.appendDummyInput()
.appendField("MixIO")
this.appendValueInput('TOPIC')
.appendField(Blockly.Msg.MSG.stop + Blockly.Msg.MIXLY_EMQX_SUBSCRIBE)
.appendField(Blockly.Msg.MIXLY_EMQX_PUBLISH_TOPIC);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_EMQX_SUBSCRIBE_TOOLTIP);
}
};
export const iot_mixio_disconnect = {
init: function () {
this.setColour(IOT_HUE);
this.appendDummyInput()
.appendField("MixIO")
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_ESP32_DISCONNECT_ONENET);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
// this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_DISCONNECT_TOOLTIP);
}
};
export const iot_mixio_connect_only = {
init: function () {
this.setColour(IOT_HUE);
this.appendDummyInput()
.appendField("MixIO")
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_EMQX_CONNECT);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
// this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_DISCONNECT_TOOLTIP);
}
};
export const iot_mixio_check = {
init: function () {
this.setColour(IOT_HUE);
this.appendDummyInput()
.appendField("MixIO")
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_ESP32_CHECK_ONENET);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
// this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_CHECK_TOOLTIP);
}
};
export const iot_mixio_format_topic = {
init: function () {
this.setColour(IOT_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_FORMAT)
.appendField(Blockly.MQTT_Topic);
this.setInputsInline(true);
this.setOutput(true);
}
};
export const iot_mixio_format_msg = {
init: function () {
this.setColour(IOT_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_FORMAT)
.appendField(Blockly.Msg.MIXLY_EMQX_PUBLISH_MSG);
this.setInputsInline(true);
this.setOutput(true);
}
};
export const IOT_FORMATTING = {
init: function () {
this.setColour(IOT_HUE);
this.appendValueInput('VAR')
.appendField(Blockly.Msg.MIXLY_ESP32_IOT_MAP_FORMATING);
this.setOutput(true);
// this.setTooltip();
}
};
export const IOT_FORMAT_STRING = {
init: function () {
this.setColour(IOT_HUE);
this.appendValueInput('VAR')
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_FORMAT + '(Json)');
this.setOutput(true);
// this.setTooltip();
}
};
export const IOT_EMQX_PING = {
init: function () {
this.setColour(IOT_HUE);
// this.appendValueInput('VAR')
// .setCheck("var")
this.appendDummyInput()
.appendField("MixIO")
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_EMQX_PING);
this.setInputsInline(true);
this.setOutput(true);
this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_EMQX_PING_TOOLTIP);
}
};
export const IOT_MIXIO_NTP = {
init: function () {
this.setColour(IOT_HUE);
// this.appendValueInput('VAR')
// .setCheck("var")
this.appendDummyInput()
.appendField("MixIO")
.appendField(Blockly.Msg.MIXLY_GET_NTP)
this.appendValueInput('addr')
.appendField(Blockly.blynk_SERVER_ADD);
this.setInputsInline(true);
this.setOutput(true);
}
};
export const IOT_EMQX_INIT_AND_CONNECT_BY_SHARE_CODE = {
init: function () {
this.setColour(IOT_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_CREATE_MQTT_CLIENT_AND_CONNECT);
this.appendValueInput('SERVER')
.appendField(Blockly.Msg.MIXLY_EMQX_SERVER)
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput('KEY')
.appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + Blockly.Msg.MIXLY_MIXIO_SHARE_KEY)
.setAlign(Blockly.inputs.Align.RIGHT);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const IOT_EMQX_INIT_AND_CONNECT_BY_MIXLY_CODE = {
init: function () {
this.setColour(IOT_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_CREATE_MQTT_CLIENT_AND_CONNECT);
this.appendValueInput('SERVER')
.appendField(Blockly.Msg.MIXLY_EMQX_SERVER)
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput('KEY')
.appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + "Mixly Key")
.setAlign(Blockly.inputs.Align.RIGHT);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const iot_mixly_key_py = {
init: function () {
this.VISITOR_ID = Mixly.Config.BOARD.visitorId.str32.substring(0, 8).toUpperCase();
this.setColour(IOT_HUE);
this.appendDummyInput("")
.appendField(this.newQuote_(true))
.appendField(new Blockly.FieldTextInput(this.visitorId), 'VISITOR_ID')
.appendField(this.newQuote_(false));
this.setOutput(true, null);
},
onchange: function () {
const nowVisitorId = this.getFieldValue('VISITOR_ID');
if (this.VISITOR_ID !== nowVisitorId)
this.setFieldValue(this.VISITOR_ID, 'VISITOR_ID');
},
newQuote_: function (open) {
if (open == this.RTL) {
var file = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAqUlEQVQI1z3KvUpCcRiA8ef9E4JNHhI0aFEacm1o0BsI0Slx8wa8gLauoDnoBhq7DcfWhggONDmJJgqCPA7neJ7p934EOOKOnM8Q7PDElo/4x4lFb2DmuUjcUzS3URnGib9qaPNbuXvBO3sGPHJDRG6fGVdMSeWDP2q99FQdFrz26Gu5Tq7dFMzUvbXy8KXeAj57cOklgA+u1B5AoslLtGIHQMaCVnwDnADZIFIrXsoXrgAAAABJRU5ErkJggg==';
} else {
var file = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAn0lEQVQI1z3OMa5BURSF4f/cQhAKjUQhuQmFNwGJEUi0RKN5rU7FHKhpjEH3TEMtkdBSCY1EIv8r7nFX9e29V7EBAOvu7RPjwmWGH/VuF8CyN9/OAdvqIXYLvtRaNjx9mMTDyo+NjAN1HNcl9ZQ5oQMM3dgDUqDo1l8DzvwmtZN7mnD+PkmLa+4mhrxVA9fRowBWmVBhFy5gYEjKMfz9AylsaRRgGzvZAAAAAElFTkSuQmCC';
}
return new Blockly.FieldImage(file, 12, 12, '"');
}
};
export const iot_mixly_key = {
init: function () {
this.VISITOR_ID = Mixly.Config.BOARD.visitorId.str32.substring(0, 8).toUpperCase();
this.setColour(IOT_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldTextInput(this.visitorId), 'VISITOR_ID');
this.setOutput(true, null);
},
onchange: function () {
const nowVisitorId = this.getFieldValue('VISITOR_ID');
if (this.VISITOR_ID !== nowVisitorId)
this.setFieldValue(this.VISITOR_ID, 'VISITOR_ID');
}
};
export const iot_client_onboard = {
init: function () {
this.setColour(IOT_HUE);
this.appendDummyInput()
.appendField('MixIO')
.appendField(Blockly.Msg.MSG.catEthernet_clinet);
this.setOutput(true);
this.setInputsInline(true);
}
};
export const iot_http_client = {
init: function () {
this.setColour(IOT_HUE);
// this.appendValueInput('VAR')
// .setCheck("var")
this.appendDummyInput()
.appendField("HTTP" + Blockly.Msg.MIXLY_Client)
this.appendValueInput('addr')
.appendField(Blockly.Msg.DISPLAY_IMAGE_LET2);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_REQUESTS_GET)
.appendField(Blockly.Msg.MIXLY_GET_CURRENT_TIME)
.appendField(Blockly.Msg.MIXLY_OPEN_DEBUG)
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE, "True"],
[Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE, "False"]
]), "key");
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const iot_http_data = {
init: function () {
this.setColour(IOT_HUE);
this.appendDummyInput()
.appendField("HTTP" + Blockly.Msg.MIXLY_Client)
.appendField(Blockly.Msg.MIXLY_GET)
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.MIXLY_REQUESTS_LEN, "client_len"],
[Blockly.Msg.MIXLY_REQUESTS_GET_LEN, "server_len"],
[Blockly.Msg.MIXLY_REQUESTS_MESSAGE, "text"]
]), "key");
this.setOutput(true);
this.setInputsInline(true);
}
};
export const iot_mqtt_client = {
init: function () {
this.setColour(IOT_HUE);
// this.appendValueInput('VAR')
// .setCheck("var")
this.appendDummyInput()
.appendField("MQTT" + Blockly.Msg.MIXLY_Client)
this.appendValueInput('addr')
.appendField(Blockly.Msg.MIXLY_CONNECTTO);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_INIT_SUBSCRIBE)
.appendField(Blockly.MQTT_Topic)
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.MIXLY_GET_CURRENT_TIME, ""],
]), "key")
.appendField(Blockly.Msg.MIXLY_OPEN_DEBUG)
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE, "True"],
[Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE, "False"]
]), "key2");
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const iot_mqtt_data = {
init: function () {
this.setColour(IOT_HUE);
this.appendDummyInput()
.appendField("MQTT" + Blockly.Msg.MIXLY_Client)
.appendField(Blockly.Msg.MIXLY_GET)
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.MIXLY_REQUESTS_LEN, "client_len"],
[Blockly.Msg.MIXLY_REQUESTS_GET_LEN, "server_len"],
[Blockly.Msg.MIXLY_REQUESTS_MESSAGE, "time_msg()"]
]), "key");
this.setOutput(true);
this.setInputsInline(true);
}
};
// export const iot_wificonnect = iot_wifi_connect;
export const iot_onenetconnect = iot_onenet_connect;
export const iot_onenetdisconnect = iot_onenet_disconnect;
export const iot_checkonenet = iot_onenet_check;
export const iot_publish = iot_onenet_publish;

View File

@@ -0,0 +1,40 @@
import * as Blockly from 'blockly/core';
import { Profile } from 'mixly';
const PINS_HUE = 230;
export const pins_digital_write = {
init: function () {
this.setColour(PINS_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.digital_write), 'PIN');
this.setOutput(true);
}
};
export const pins_digital_read = {
init: function () {
this.setColour(PINS_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.digital_read), 'PIN');
this.setOutput(true);
}
};
export const pins_analog_write = {
init: function () {
this.setColour(PINS_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.analog_write), 'PIN');
this.setOutput(true);
}
};
export const pins_analog_read = {
init: function () {
this.setColour(PINS_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.analog_read), 'PIN');
this.setOutput(true);
}
};

View File

@@ -0,0 +1,65 @@
import * as Blockly from 'blockly/core';
const SERIAL_HUE = 40;
export const serial_open = {
init: function () {
var bps = [
["115200", '115200'], ["256000", '256000'], ["128000", '128000'], ["57600", '57600'], ["56000", '56000'],
["43000", '43000'], ["38400", '38400'], ["28800", '28800'], ["19200", '19200'], ["9600", '9600'],
["4800", '4800'], ["2400", '2400'], ["1200", '1200'], ["600", '600'], ["300", '300'], ["110", '110']
];
this.setColour(SERIAL_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldLabel(Blockly.Msg.MIXPY_SERIAL_OPEN))
.appendField(new Blockly.FieldTextInput('ser'), 'SER')
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_SERIAL_BEGIN)
.appendField(new Blockly.FieldDropdown(bps), 'BPS')
this.appendValueInput('VAR')
.appendField(Blockly.Msg.MIXPY_SERIAL_OPEN_TIMEOUT);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip(Blockly.Msg.MIXPY_SERIAL_OPEN_TOOLTIP);
}
};
export const serial_write = {
init: function () {
this.setColour(SERIAL_HUE);
this.appendValueInput('SER')
this.appendValueInput('VAR')
.appendField(Blockly.Msg.MIXPY_SERIAL_WRITE);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip(Blockly.Msg.MIXPY_SERIAL_WRITE_TOOLTIP);
}
};
export const serial_read_b = {
init: function () {
this.setColour(SERIAL_HUE);
this.appendValueInput('SER')
this.appendValueInput('VAR')
.setCheck(Number)
.appendField(Blockly.Msg.MIXPY_SERIAL_READ);
this.setInputsInline(true);
this.setOutput(true, String);
this.setTooltip(Blockly.Msg.MIXPY_SERIAL_READ_TOOLTIP);
}
};
export const serial_close = {
init: function () {
this.setColour(SERIAL_HUE);
this.appendValueInput('SER')
this.appendDummyInput()
.appendField(Blockly.Msg.MIXPY_SERIAL_CLOSE);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip(Blockly.Msg.MIXPY_SERIAL_CLOSE_TOOLTIP);
}
};

View File

@@ -0,0 +1,702 @@
import * as Blockly from 'blockly/core';
const SKLEARN_HUE = 80;
export const sklearn_make_classification = {
init: function () {
this.appendDummyInput()
.appendField(Blockly.Msg.SKLEARN_CLASSIFICATION_GENERATION);
this.appendValueInput("n_samples")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.NUMBER_OF_SAMPLES);
this.appendValueInput("n_features")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.NUMBER_OF_FEATURES);
this.appendValueInput("n_informative")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.NUMBER_OF_EFFECTIVE_FEATURES);
this.appendValueInput("n_redundant")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.NUMBER_OF_REDUNDANT_FEATURES);
this.appendValueInput("n_repeated")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.NUMBER_OF_REPEATED_FEATURES);
this.appendValueInput("n_classes")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.NUMBER_OF_CLASSES);
this.appendValueInput("n_clusters_per_class")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.NUMBER_OF_CLUSTERS_PER_CLASSES);
this.appendValueInput("random_state")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.RANDOM_SEED);
this.setInputsInline(false);
this.setOutput(true, null);
this.setColour(SKLEARN_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
//sklearn 生成回归样本
export const sklearn_make_regression = {
init: function () {
this.appendDummyInput()
.appendField(Blockly.Msg.SKLEARN_REGRESSION_GENERATION);
this.appendValueInput("n_samples")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.NUMBER_OF_SAMPLES);
this.appendValueInput("n_features")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.NUMBER_OF_FEATURES);
this.appendValueInput("n_informative")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.NUMBER_OF_EFFECTIVE_FEATURES);
this.appendValueInput("n_targets")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.NUMBER_OF_LABELS);
this.appendValueInput("bias")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.DEVIATION);
this.appendValueInput("noise")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.NOISE);
this.appendValueInput("random_state")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.RANDOM_SEED);
this.setInputsInline(false);
this.setOutput(true, null);
this.setColour(SKLEARN_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
//sklearn 生成聚类样本
export const sklearn_make_blobs = {
init: function () {
this.appendDummyInput()
.appendField(Blockly.Msg.SKLEARN_CLUSTERING_GENERATION);
this.appendValueInput("n_samples")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.NUMBER_OF_SAMPLES);
this.appendValueInput("n_features")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.NUMBER_OF_FEATURES);
this.appendValueInput("centers")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.NUMBER_OF_CLUSTERS);
this.appendValueInput("cluster_std")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.STANDARD_DEVIATION_OF_CLUSTER);
this.appendValueInput("center_box")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.CLUSTER_BOUNDING_BOX);
this.appendValueInput("shuffle")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.SHUFFLE_SAMPLES);
this.appendValueInput("random_state")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.RANDOM_SEED);
this.setInputsInline(false);
this.setOutput(true, null);
this.setColour(SKLEARN_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
//sklearn 加载数据集
export const sklearn_load = {
init: function () {
var data = [
[Blockly.Msg.SKLEARN_LOAD_IRIS, "load_iris"],
[Blockly.Msg.SKLEARN_LOAD_BOSTON, "load_boston"],
[Blockly.Msg.SKLEARN_LOAD_DIABETES, "load_diabetes"],
[Blockly.Msg.SKLEARN_LOAD_BREAST_CANCER, "load_breast_cancer"],
[Blockly.Msg.SKLEARN_LOAD_LINNERUD, "load_linnerud"],
[Blockly.Msg.SKLEARN_LOAD_DIGITS, "load_digits"]
];
this.appendDummyInput()
.appendField("sklearn " + Blockly.Msg.LOAD)
.appendField(new Blockly.FieldDropdown(data), "type")
.appendField(new Blockly.FieldTextInput("iris"), "name");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(SKLEARN_HUE);
this.setTooltip("");
this.setHelpUrl("");
},
getVars: function () {
return [this.getFieldValue('name')];
},
renameVar: function (oldName, newName) {
if (Blockly.Names.equals(oldName, this.getFieldValue('name'))) {
this.setTitleValue(newName, 'name');
}
}
};
//sklearn 获取特征值/标签值/标签/特征
export const sklearn_data_target = {
init: function () {
this.appendValueInput("name")
.setCheck(null)
.appendField("sklearn " + Blockly.Msg.DATA_SET);
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_GET)
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.EIGENVALUES, "data"],
[Blockly.Msg.LABEL_VALUE, "target"],
[Blockly.Msg.FEATURE, "feature_names"],
[Blockly.Msg.mixpy_PYLAB_TICKS_TAG, "target_names"]
]), "type");
this.setOutput(true, null);
this.setColour(SKLEARN_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
//sklearn 数据集分割
export const sklearn_train_test_split = {
init: function () {
this.appendDummyInput()
.appendField("sklearn " + Blockly.Msg.DATA_SEGMENTATION);
this.appendValueInput("train_data")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.EIGENVALUES);
this.appendValueInput("train_target")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.LABEL_VALUE);
this.appendValueInput("test_size")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.TEST_SET_PROPORTION);
this.appendValueInput("rondom_state")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.RANDOM_SEED);
this.setInputsInline(false);
this.setOutput(true, null);
this.setColour(SKLEARN_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
//sklearn 数据集分割-无标签值
export const sklearn_train_test_split_no_target = {
init: function () {
this.appendDummyInput()
.appendField("sklearn " + Blockly.Msg.DATA_SEGMENTATION);
this.appendValueInput("train_data")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.EIGENVALUES);
this.appendValueInput("test_size")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.TEST_SET_PROPORTION);
this.appendValueInput("rondom_state")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.RANDOM_SEED);
this.setInputsInline(false);
this.setOutput(true, null);
this.setColour(SKLEARN_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
//sklearn 初始化线性回归
export const sklearn_LinearRegression = {
init: function () {
this.appendDummyInput()
.appendField("sklearn " + Blockly.Msg.SKLEARN_LINEARREGRESSION_INIT);
this.appendValueInput("model_name")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MODEL_NAME);
this.appendValueInput("fit_intercept")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.SKLEARN_CALCULATE_MODEL_INTERRUPT);
this.appendValueInput("normalize")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.SKLEARN_REGRESSION_NORMIALIZATION);
this.appendValueInput("n_jobs")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.SKLEARN_THREADS);
this.setInputsInline(false);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(SKLEARN_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
//sklearn 初始化岭回归
export const sklearn_Ridge = {
init: function () {
this.appendDummyInput()
.appendField("sklearn " + Blockly.Msg.SKLEARN_RIDGE_INIT);
this.appendValueInput("model_name")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MODEL_NAME);
this.appendValueInput("alpha")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.SKLEARN_REGULA_INTENSITY);
this.appendValueInput("fit_intercept")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.SKLEARN_CALCULATE_MODEL_INTERRUPT);
this.appendValueInput("normalize")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.SKLEARN_REGRESSION_NORMIALIZATION);
this.appendValueInput("max_iter")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.SKLEARN_MAX_ITER);
this.appendValueInput("random_state")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.RANDOM_SEED);
this.setInputsInline(false);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(SKLEARN_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
//sklearn 初始化决策树 分类/回归算法
export const sklearn_DecisionTreeClassifier_Regressor = {
init: function () {
this.appendDummyInput()
.appendField("sklearn " + Blockly.Msg.SKLEARN_DECISIONTREE_INIT)
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.SKLEARN_CLASSIFICATION_ALGORITHM, "DecisionTreeClassifier"],
[Blockly.Msg.SKLEARN_REGRESSION_ALGORITHM, "DecisionTreeRegressor"]
]), "type");
this.appendValueInput("model_name")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MODEL_NAME);
this.appendValueInput("max_depth")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.SKLEARN_MAXIMUM_TREE_DEPTH);
this.appendValueInput("random_state")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.RANDOM_SEED);
this.setInputsInline(false);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(SKLEARN_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
//sklearn 初始化随机森林 分类/回归算法
export const sklearn_RandomForestClassifier_Regressor = {
init: function () {
this.appendDummyInput()
.appendField("sklearn " + Blockly.Msg.SKLEARN_RANDOMFOREST_INIT)
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.SKLEARN_CLASSIFICATION_ALGORITHM, "RandomForestClassifier"],
[Blockly.Msg.SKLEARN_REGRESSION_ALGORITHM, "RandomForestRegressor"]
]), "type");
this.appendValueInput("model_name")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MODEL_NAME);
this.appendValueInput("n_estimators")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.NUMBER_OF_TREES);
this.appendValueInput("max_depth")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.SKLEARN_MAXIMUM_TREE_DEPTH);
this.appendValueInput("n_jobs")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.SKLEARN_THREADS);
this.appendValueInput("random_state")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.RANDOM_SEED);
this.setInputsInline(false);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(SKLEARN_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
//sklearn 初始化K近邻 分类/回归算法
export const sklearn_KNeighborsClassifier_Regressor = {
init: function () {
this.appendDummyInput()
.appendField("sklearn " + Blockly.Msg.SKLEARN_KNN_INIT)
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.SKLEARN_CLASSIFICATION_ALGORITHM, "KNeighborsClassifier"],
[Blockly.Msg.SKLEARN_REGRESSION_ALGORITHM, "KNeighborsRegressor"]
]), "type");
this.appendValueInput("model_name")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MODEL_NAME);
this.appendValueInput("K")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField("K");
this.appendValueInput("n_jobs")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.SKLEARN_THREADS);
this.setInputsInline(false);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(SKLEARN_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
//sklearn 初始化高斯贝叶斯分类算法
export const sklearn_GaussianNB = {
init: function () {
this.appendDummyInput()
.appendField("sklearn " + Blockly.Msg.SKLEARN_GAUSSINNB_INIT);
this.appendValueInput("model_name")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MODEL_NAME);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(SKLEARN_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
//sklearn 初始化PCA降维
export const sklearn_pca = {
init: function () {
this.appendDummyInput()
.appendField("sklearn 初始化 PCA 算法");
this.appendValueInput("model_name")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MODEL_NAME);
this.appendValueInput("n_components")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.SKLEARN_PCA_N_COMPONENTS);
this.setInputsInline(false);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(SKLEARN_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
//sklearn PCA拟合并转换数据
export const sklearn_pca_fit_transform = {
init: function () {
this.appendDummyInput()
.appendField("sklearn PCA 降维");
this.appendValueInput("model_name")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MODEL_NAME);
this.appendValueInput("train_data")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.EIGENVALUES);
this.setInputsInline(true);
this.setOutput(true, null);
this.setColour(SKLEARN_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
//sklearn 初始化K-均值聚类
export const sklearn_KMeans = {
init: function () {
this.appendDummyInput()
.appendField("sklearn " + Blockly.Msg.SKLEARN_KMEANS_INIT);
this.appendValueInput("model_name")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MODEL_NAME);
this.appendValueInput("n_clusters")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.NUMBER_OF_CLUSTERS_JUST);
this.appendValueInput("max_iter")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.SKLEARN_MAX_ITER);
this.appendValueInput("random_state")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.RANDOM_SEED);
this.setInputsInline(false);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(SKLEARN_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
//sklearn KMeans拟合数据
export const sklearn_KMeans_fit = {
init: function () {
this.appendDummyInput()
.appendField("sklearn K-均值聚类");
this.appendValueInput("model_name")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MODEL_NAME);
this.appendValueInput("train_data")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.EIGENVALUES);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(SKLEARN_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
//sklearn 训练模型
export const sklearn_fit = {
init: function () {
this.appendDummyInput()
.appendField("sklearn " + Blockly.Msg.TRAINING_MODEL);
this.appendValueInput("model_name")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MODEL_NAME);
this.appendValueInput("train_data")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.EIGENVALUES);
this.appendValueInput("train_target")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.LABEL_VALUE);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(SKLEARN_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
//sklearn 训练模型-无标签值
export const sklearn_fit_no_target = {
init: function () {
this.appendDummyInput()
.appendField("sklearn " + Blockly.Msg.TRAINING_MODEL);
this.appendValueInput("model_name")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MODEL_NAME);
this.appendValueInput("train_data")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.EIGENVALUES);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(SKLEARN_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
//sklearn 模型预测
export const sklearn_predict = {
init: function () {
this.appendDummyInput()
.appendField("sklearn " + Blockly.Msg.MODEL_PRODICTION);
this.appendValueInput("model_name")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MODEL_NAME);
this.appendValueInput("train_data")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.EIGENVALUES);
this.setInputsInline(true);
this.setOutput(true, null);
this.setColour(SKLEARN_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
//sklearn 计算模型得分
export const sklearn_score = {
init: function () {
this.appendDummyInput()
.appendField("sklearn " + Blockly.Msg.CALCULATE_THE_SCORE);
this.appendValueInput("model_name")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MODEL_NAME);
this.appendValueInput("train_data")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.EIGENVALUES);
this.appendValueInput("train_target")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.LABEL_VALUE);
this.setInputsInline(true);
this.setOutput(true, null);
this.setColour(SKLEARN_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
//sklearn 计算模型得分 - 无标签值
export const sklearn_score_no_target = {
init: function () {
this.appendDummyInput()
.appendField("sklearn " + Blockly.Msg.CALCULATE_THE_SCORE);
this.appendValueInput("model_name")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MODEL_NAME);
this.appendValueInput("train_data")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.EIGENVALUES);
this.setInputsInline(true);
this.setOutput(true, null);
this.setColour(SKLEARN_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
//sklearn 线性回归 模型获取 斜率/截距
export const sklearn_coef_intercept = {
init: function () {
this.appendDummyInput()
.appendField("sklearn " + Blockly.Msg.SKLEARN_GENERALIZED_LINEAR_REGRESSION);
this.appendValueInput("model_name")
.setAlign(Blockly.inputs.Align.RIGHT)
.setCheck(null)
.appendField(Blockly.Msg.MODEL_NAME);
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_GET)
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.SKLEARN_COEF, "coef_"],
[Blockly.Msg.SKLEARN_INTERCEPT, "intercept_"]
]), "type");
this.setOutput(true, null);
this.setColour(SKLEARN_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
//sklearn K-均值聚类 模型获取 簇中心坐标/聚类后的标签/所有点到对应簇中心的距离平方和
export const sklearn_cluster_centers_labels_inertia = {
init: function () {
this.appendDummyInput()
.appendField("sklearn " + Blockly.Msg.SKLEARN_CLUSTERING);
this.appendValueInput("model_name")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MODEL_NAME);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_GET)
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.SKLEARN_CLUSTER_CENTER, "cluster_centers_"],
[Blockly.Msg.SKLEARN_LABELS_AFTER_CLUSTERING, "labels_"],
[Blockly.Msg.SKLEARN_CLUSTERING_SUM_OF_SQUARED_DISTANCES, "inertia_"]
]), "type");
this.setInputsInline(true);
this.setOutput(true, null);
this.setColour(SKLEARN_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
//sklearn 保存/加载模型
export const sklearn_save_load_model = {
init: function () {
this.appendValueInput("model_name")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField("sklearn")
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.SKLEARN_SAVE_MODEL, "dump"],
[Blockly.Msg.SKLEARN_LOAD_MODEL, "load"]
]), "type")
.appendField(" " + Blockly.Msg.MODEL_NAME);
this.appendValueInput("address")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_THE_PATH);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(SKLEARN_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};

View File

@@ -0,0 +1,126 @@
import * as Blockly from 'blockly/core';
const SYSTEM_HUE = 120;
export const base_delay = {
init: function () {
this.setColour(SYSTEM_HUE);
this.appendValueInput("DELAY_TIME", Number)
.appendField(Blockly.Msg.MIXLY_DELAY + '(' + Blockly.Msg.MIXLY_MILLIS + ')')
.setCheck(Number);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_CONTROL_DELAY);
}
};
export const controls_millis = {
init: function () {
this.setColour(SYSTEM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.blockpy_time_time);
this.setOutput(true, Number);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_CONTROL_MILLIS);
}
};
export const time_localtime = {
init: function () {
this.setColour(SYSTEM_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_SYSTEM_TIME_LOCALTIME)
this.appendDummyInput()
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.MIXLY_SYSTEM_TIME_LOCALTIME_ALL, "all"],
[Blockly.Msg.MIXLY_SYSTEM_TIME_LOCALTIME_YEAR, "0"],
[Blockly.Msg.MIXLY_SYSTEM_TIME_LOCALTIME_MONTH, "1"],
[Blockly.Msg.MIXLY_SYSTEM_TIME_LOCALTIME_DATE, "2"],
[Blockly.Msg.MIXLY_SYSTEM_TIME_LOCALTIME_HOUR, "3"],
[Blockly.Msg.MIXLY_SYSTEM_TIME_LOCALTIME_MINUTE, "4"],
[Blockly.Msg.MIXLY_SYSTEM_TIME_LOCALTIME_SECOND, "5"],
[Blockly.Msg.MIXLY_SYSTEM_TIME_LOCALTIME_INWEEK, "6"],
[Blockly.Msg.MIXLY_SYSTEM_TIME_LOCALTIME_INYEAR, "7"],
[Blockly.Msg.MIXLY_SYSTEM_TIME_LOCALTIME_DST, "8"]
]), "op");
this.setOutput(true);
this.setInputsInline(true);
}
};
export const Panic_with_status_code = {
init: function () {
this.setColour(SYSTEM_HUE);
this.appendValueInput("STATUS_CODE", Number)
.appendField(Blockly.Msg.MIXLY_MICROBIT_Panic_with_status_code)
.setCheck(Number);
this.setPreviousStatement(true, null);
// this.setNextStatement(true, null);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_CONTROL_DELAY);
}
};
export const reset = {
init: function () {
this.setColour(SYSTEM_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MICROBIT_Reset_micro);
this.setPreviousStatement(true);
// this.setNextStatement(true);
}
};
export const controls_mstimer2 = {
init: function () {
this.setColour(SYSTEM_HUE);
this.appendValueInput('TIME')
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField('MsTimer2')
.appendField(Blockly.Msg.MIXLY_MSTIMER2_EVERY);
this.appendDummyInput()
.appendField('ms');
this.appendStatementInput('DO')
.appendField(Blockly.Msg.MIXLY_MSTIMER2_DO);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const controls_mstimer2_start = {
init: function () {
this.setColour(SYSTEM_HUE);
this.appendDummyInput()
.appendField('MsTimer2')
.appendField(Blockly.Msg.MIXLY_MSTIMER2_START);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const controls_mstimer2_stop = {
init: function () {
this.setColour(SYSTEM_HUE);
this.appendDummyInput()
.appendField('MsTimer2')
.appendField(Blockly.Msg.MIXLY_STOP);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const time_sleep = {
init: function () {
this.setColour(SYSTEM_HUE);
this.appendValueInput("DELAY_TIME", Number)
.appendField(Blockly.Msg.MIXLY_DELAY)
.setCheck(Number);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_SECOND)
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_CONTROL_DELAY);
}
};

View File

@@ -0,0 +1,945 @@
import * as Blockly from 'blockly/core';
const TURTLE_HUE = 180;
export const turtle_create = {
init: function () {
this.setColour(TURTLE_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.blockpy_turtle_create)
.appendField(new Blockly.FieldTextInput('tina'), 'VAR')
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.blockpy_turtle_create_TOOLTIP);
},
getVars: function () {
return [this.getFieldValue('VAR')];
},
renameVar: function (oldName, newName) {
if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {
this.setTitleValue(newName, 'VAR');
}
}
};
export const turtle_done = {
init: function () {
this.setColour(TURTLE_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.blockpy_TURTLE_DONE);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const turtle_exitonclick = {
init: function () {
this.setColour(TURTLE_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_PYTHON_TURTLE_EXITONCLICK);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const turtle_move = {
init: function () {
this.appendValueInput('TUR')
.setCheck('Turtle')
var front_back =
[[Blockly.Msg.blockpy_forward, 'forward'], [Blockly.Msg.blockpy_backward, 'backward']];
this.setColour(TURTLE_HUE);
this.appendValueInput('VAR')
// .setCheck(String)
.appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MOVE_BY)
.appendField(new Blockly.FieldDropdown(front_back), 'DIR')
.appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MOVE_BY_num);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
var thisBlock = this;
this.setTooltip(function () {
var mode = thisBlock.getFieldValue('DIR');
var TOOLTIPS = {
'forward': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_FORWARD,
'backward': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_BACKWARD
};
return TOOLTIPS[mode];
});
}
};
export const turtle_rotate = {
init: function () {
this.appendValueInput('TUR')
.setCheck('Turtle')
var front_back =
[[Blockly.Msg.blockpy_left, 'left'], [Blockly.Msg.blockpy_right, 'right']];
this.setColour(TURTLE_HUE);
this.appendValueInput('VAR')
// .setCheck(String)
.appendField(Blockly.Msg.blockpy_turtle_rotate)
.appendField(new Blockly.FieldDropdown(front_back), 'DIR')
.appendField(Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
var thisBlock = this;
this.setTooltip(function () {
var mode = thisBlock.getFieldValue('DIR');
var TOOLTIPS = {
'left': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_LEFT,
'right': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_RIGHT
};
return TOOLTIPS[mode];
});
}
};
export const turtle_setheading = {
init: function () {
this.setColour(TURTLE_HUE);
this.appendValueInput('TUR')
.setCheck('Turtle')
this.appendValueInput('data')
.setCheck(Number)
.appendField(Blockly.Msg.blockpy_setheading);
this.appendDummyInput()
.appendField(Blockly.Msg.blockpy_setheading_degree);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const turtle_screen_delay = {
init: function () {
this.setColour(TURTLE_HUE);
this.appendValueInput('TUR')
.setCheck('Turtle')
this.appendValueInput('data')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_TURTLE_SCREEN_DELAY);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MILLIS);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_TURTEL_SCREEN_DELAY);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const turtle_goto = {
init: function () {
this.setColour(TURTLE_HUE);
this.appendValueInput('TUR')
.setCheck('Turtle')
this.appendValueInput('data')
.setCheck(Number)
.appendField(Blockly.Msg.blockpy_turtle_goto);
this.appendValueInput('val')
.setCheck(Number)
.appendField(Blockly.Msg.blockpy_turtle_goto_y);
this.appendDummyInput()
.appendField(Blockly.Msg.blockpy_turtle_goto_position);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const turtle_setxy = {
init: function () {
this.appendValueInput('TUR')
.setCheck('Turtle')
var set_xy =
[[Blockly.Msg.PYLAB_LABEL_X, 'x'], [Blockly.Msg.PYLAB_LABEL_Y, 'y']];
this.setColour(TURTLE_HUE);
this.appendValueInput('VAR')
.appendField(new Blockly.FieldDropdown(set_xy), 'DIR')
.appendField(Blockly.Msg.MIXLY_MIXPY_TURTLE_SETXY);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.MIXLY_MIXPY_TURTLE_SETXY_TOOLTIP);
}
};
export const turtle_pos_shape = {
init: function () {
this.setColour(TURTLE_HUE);
var pos_shape =
[[Blockly.Msg.TURTLE_POS, 'pos'], [Blockly.Msg.TURTLE_SHAPE, 'shape'], [Blockly.Msg.TURTLE_HEADING, 'heading'], [Blockly.Msg.MIXLY_MIXPY_TURTLE_WIDTH, 'width'], [Blockly.Msg.MIXLY_TURTEL_GET_SHAPESIZE, 'shapesize'], [Blockly.Msg.MIXLY_SPEED, 'speed']];
this.appendValueInput('TUR')
.setCheck('Turtle')
this.appendDummyInput("")
.appendField(Blockly.Msg.TURTLE_POS_SHAPE)
.appendField(new Blockly.FieldDropdown(pos_shape), 'DIR')
var thisBlock = this;
this.setTooltip(function () {
var mode = thisBlock.getFieldValue('DIR');
var TOOLTIPS = {
'pos': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_POS,
'shape': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_SHAPE,
'heading': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_HEADING,
'width': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_WIDTH,
'speed': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_GET_SPEED,
'shapesize': Blockly.Msg.MIXLY_TURTEL_GET_SHAPESIZE_TOOLTIP
};
return TOOLTIPS[mode];
});
this.setOutput(true);
this.setInputsInline(true);
}
};
export const turtle_stamp = {
init: function () {
this.setColour(TURTLE_HUE);
this.appendValueInput('TUR')
.setCheck('Turtle')
this.appendDummyInput()
.appendField(Blockly.Msg.TURTLE_STAMP);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const turtle_clear = {
init: function () {
this.appendValueInput('TUR')
.setCheck('Turtle')
var clear_reset =
[[Blockly.Msg.MIXLY_LCD_STAT_CLEAR, 'clear'], [Blockly.Msg.blockpy_turtle_reset, 'reset']
, [Blockly.Msg.blockpy_turtle_home, 'home']];
this.setColour(TURTLE_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(clear_reset), 'DIR')
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
var thisBlock = this;
this.setTooltip(function () {
var mode = thisBlock.getFieldValue('DIR');
var TOOLTIPS = {
'clear': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_CLEAR,
'reset': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_RESET,
'home': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_HOME
};
return TOOLTIPS[mode];
});
}
};
export const turtle_penup = {
init: function () {
this.appendValueInput('TUR')
.setCheck('Turtle')
var penup_down =
[[Blockly.Msg.blockpy_turtle_penup, 'penup'], [Blockly.Msg.blockpy_turtle_pendown, 'pendown']];
this.setColour(TURTLE_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(penup_down), 'DIR')
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
var thisBlock = this;
this.setTooltip(function () {
var mode = thisBlock.getFieldValue('DIR');
var TOOLTIPS = {
'penup': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_PENUP,
'pendown': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_PENDOWN
};
return TOOLTIPS[mode];
});
}
};
export const turtle_fill = {
init: function () {
this.appendValueInput('TUR')
.setCheck('Turtle')
var fill =
[[Blockly.Msg.blockpy_turtle_beginfill, 'begin'], [Blockly.Msg.blockpy_turtle_endfill, 'end']];
this.setColour(TURTLE_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(fill), 'DIR')
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
var thisBlock = this;
this.setTooltip(function () {
var mode = thisBlock.getFieldValue('DIR');
var TOOLTIPS = {
'begin': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_BEGINFILL,
'end': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_ENDFILL
};
return TOOLTIPS[mode];
});
}
};
export const turtle_size_speed = {
init: function () {
this.appendDummyInput("")
.appendField(new Blockly.FieldTextInput('tina'), 'TUR')
var size_speed =
[[Blockly.Msg.blockpy_turtle_size, 'pensize'], [Blockly.Msg.MIXLY_SPEED, 'speed']];
this.setColour(TURTLE_HUE);
this.appendValueInput('VAR')
// .setCheck(String)
.appendField(Blockly.Msg.blockpy_turtle_set)
.appendField(new Blockly.FieldDropdown(size_speed), 'DIR')
.appendField(Blockly.Msg.blockpy_turtle_set_num);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
var thisBlock = this;
this.setTooltip(function () {
var mode = thisBlock.getFieldValue('DIR');
var TOOLTIPS = {
'pensize': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_SIZE,
'speed': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_SPEED
};
return TOOLTIPS[mode];
});
}
};
export const turtle_size = {
init: function () {
this.setColour(TURTLE_HUE);
this.appendValueInput('TUR')
.setCheck('Turtle')
this.appendValueInput('data')
.setCheck(Number)
.appendField(Blockly.Msg.blockpy_turtle_set_size);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_TURTEL_SIZE);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const turtle_speed = {
init: function () {
this.setColour(TURTLE_HUE);
this.appendValueInput('TUR')
.setCheck('Turtle')
this.appendValueInput('data')
.setCheck(Number)
.appendField(Blockly.Msg.blockpy_turtle_set_speed);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_TURTEL_SPEED);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const turtle_circle = {
init: function () {
this.appendValueInput('TUR')
.setCheck('Turtle')
var circle_dot =
[[Blockly.Msg.blockpy_turtle_circle, 'circle'], [Blockly.Msg.blockpy_turtle_dot, 'dot']];
this.setColour(TURTLE_HUE);
this.appendValueInput('VAR')
// .setCheck(String)
.appendField(Blockly.Msg.blockpy_turtle_draw)
.appendField(new Blockly.FieldDropdown(circle_dot), 'DIR')
.appendField(Blockly.Msg.blockpy_turtle_radius);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
var thisBlock = this;
this.setTooltip(function () {
var mode = thisBlock.getFieldValue('DIR');
var TOOLTIPS = {
'circle': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_CIRCLE,
'dot': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_DOT
};
return TOOLTIPS[mode];
});
}
};
export const turtle_circle_advanced = {
init: function () {
this.appendValueInput('TUR')
.setCheck('Turtle')
this.setColour(TURTLE_HUE);
this.appendValueInput('VAR')
// .setCheck(String)
.appendField(Blockly.Msg.MIXLY_MIXPY_TURTLE_DRAW_CIRCLE)
.appendField(Blockly.Msg.blockpy_turtle_radius);
this.appendValueInput('data')
.setCheck(Number)
.appendField(Blockly.Msg.blockpy_turtle_angle);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_TURTEL_CIRCLE);
}
};
export const turtle_visible = {
init: function () {
this.appendValueInput('TUR')
.setCheck('Turtle')
var visible =
[[Blockly.Msg.blockpy_turtle_hide, 'hideturtle'], [Blockly.Msg.blockpy_turtle_show, 'showturtle']];
this.setColour(TURTLE_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(visible), 'DIR')
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
var thisBlock = this;
this.setTooltip(function () {
var mode = thisBlock.getFieldValue('DIR');
var TOOLTIPS = {
'hideturtle': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_HIDE,
'showturtle': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_SHOW
};
return TOOLTIPS[mode];
});
}
};
export const turtle_bgcolor = {
init: function () {
this.setColour(TURTLE_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.blockpy_turtle_bgcolor)
.appendField(new Blockly.FieldColour('#ff0000'), 'FIELDNAME');
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const turtle_title = {
init: function () {
this.setColour(TURTLE_HUE);
this.appendValueInput('TITLE')
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_TURTLE_TITLE_SET);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const turtle_setup = {
init: function () {
this.setColour(TURTLE_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_TURTLE_SETUP_SET);
this.appendValueInput('WIDTH')
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_WIDTH);
this.appendValueInput('HEIGHT')
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_HEIGHT);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const turtle_tracer = {
init: function () {
this.setColour(TURTLE_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_TURTLE_TRACER);
this.appendValueInput('STEP')
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_TURTLE_TRACER_STEP);
this.appendValueInput('DELAY')
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_TURTLE_TRACER_DELAY_MS);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const turtle_pencolor = {
init: function () {
this.appendValueInput('TUR')
.setCheck('Turtle')
this.setColour(TURTLE_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.blockpy_turtle_pencolor)
.appendField(new Blockly.FieldColour('#ff0000'), 'FIELDNAME');
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const turtle_fillcolor = {
init: function () {
this.appendValueInput('TUR')
.setCheck('Turtle')
this.setColour(TURTLE_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.blockpy_turtle_fillcolor)
.appendField(new Blockly.FieldColour('#ff0000'), 'FIELDNAME');
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const turtle_clone = {
init: function () {
this.setColour(TURTLE_HUE);
this.appendValueInput('TUR')
.setCheck('Turtle')
this.appendDummyInput("")
.appendField(Blockly.Msg.TURTLE_CLONE);
this.setTooltip(Blockly.Msg.TURTLE_CLONE_TOOLTIP);
this.setOutput(true);
}
};
export const turtle_bgcolor_hex_new = {
init: function () {
this.setColour(TURTLE_HUE);
this.appendValueInput('VAR')
.setCheck(String)
.appendField(Blockly.Msg.blockpy_turtle_bgcolor);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const turtle_pencolor_hex_new = {
init: function () {
this.appendValueInput('TUR')
.setCheck('Turtle')
this.setColour(TURTLE_HUE);
this.appendValueInput('VAR')
.setCheck(String)
.appendField(Blockly.Msg.blockpy_turtle_pencolor);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const turtle_fillcolor_hex_new = {
init: function () {
this.appendValueInput('TUR')
.setCheck('Turtle')
this.setColour(TURTLE_HUE);
this.appendValueInput('VAR')
.setCheck(String)
.appendField(Blockly.Msg.blockpy_turtle_fillcolor);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const turtle_color = {
init: function () {
this.appendValueInput('TUR')
.setCheck('Turtle')
this.setColour(TURTLE_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.blockpy_turtle_pencolor)
.appendField(new Blockly.FieldColour('#ff0000'), 'FIELDNAME');
this.appendDummyInput()
.appendField(Blockly.Msg.blockpy_turtle_fillcolor)
.appendField(new Blockly.FieldColour('#ff0000'), 'FIELDNAME2');
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const turtle_color_hex = {
init: function () {
this.appendValueInput('TUR')
.setCheck('Turtle')
this.setColour(TURTLE_HUE);
this.appendValueInput('VAR1')
.setCheck(String)
.appendField(Blockly.Msg.blockpy_turtle_pencolor);
this.appendValueInput('VAR2')
.setCheck(String)
.appendField(Blockly.Msg.blockpy_turtle_fillcolor);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const turtle_bgcolor_hex = {
init: function () {
this.setColour(TURTLE_HUE);
this.appendValueInput('VAR')
.setCheck(String)
.appendField(Blockly.Msg.blockpy_turtle_bgcolor_hex);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const turtle_pencolor_hex = {
init: function () {
this.appendValueInput('TUR')
.setCheck('Turtle')
this.setColour(TURTLE_HUE);
this.appendValueInput('VAR')
.setCheck(String)
.appendField(Blockly.Msg.blockpy_turtle_pencolor_hex);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const turtle_fillcolor_hex = {
init: function () {
this.appendValueInput('TUR')
.setCheck('Turtle')
this.setColour(TURTLE_HUE);
this.appendValueInput('VAR')
.setCheck(String)
.appendField(Blockly.Msg.blockpy_turtle_fillcolor_hex);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const turtle_shape = {
init: function () {
this.appendValueInput('TUR')
.setCheck('Turtle')
var shape = [
[Blockly.Msg.blockpy_turtle_shape_arrow, 'arrow'], [Blockly.Msg.blockpy_turtle_shape_turtle, 'turtle'],
[Blockly.Msg.blockpy_turtle_shape_circle, 'circle'], [Blockly.Msg.blockpy_turtle_shape_square, 'square'],
[Blockly.Msg.blockpy_turtle_shape_triangle, 'triangle'], [Blockly.Msg.blockpy_turtle_shape_classic, 'classic']
];
this.setColour(TURTLE_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.blockpy_turtle_shape)
.appendField(new Blockly.FieldDropdown(shape), 'DIR');
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.TURTLE_SHAPE_TOOLTIP);
}
};
export const turtle_shapesize = {
init: function () {
this.appendValueInput('TUR')
.setCheck('Turtle')
this.setColour(TURTLE_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_TURTEL_SHAPESIZE);
this.appendValueInput('WID')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_TURTEL_SHAPESIZE_WID);
this.appendValueInput('LEN')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_TURTEL_SHAPESIZE_LEN);
this.appendValueInput('OUTLINE')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_TURTEL_SHAPESIZE_OUTLINE);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_SHAPESIZE);
}
};
export const turtle_numinput = {
init: function () {
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_MIXPY_TURTLE_NUMINPUT)
this.setColour(TURTLE_HUE);
this.appendValueInput('TITLE')
.setCheck(String)
.appendField(Blockly.Msg.MIXLY_MIXPY_TURTLE_TEXTINPUT_TITLE);
this.appendValueInput('PROMPT')
.setCheck(String)
.appendField(Blockly.Msg.MIXLY_MIXPY_TURTLE_TEXTINPUT_PROMPT);
this.appendValueInput('DEFAULT')
.setCheck(Number)
.appendField(Blockly.Msg.DICTS_DEFAULT_VALUE);
this.appendValueInput('MIN')
.setCheck(Number)
.appendField(Blockly.Msg.MATH_ONLIST_OPERATOR_MIN);
this.appendValueInput('MAX')
.setCheck(Number)
.appendField(Blockly.Msg.MATH_ONLIST_OPERATOR_MAX);
this.setInputsInline(true);
this.setOutput(true, Number);
this.setTooltip(Blockly.Msg.TURTLE_NUMINPUT_TOOLTIP);
}
};
export const turtle_textinput = {
init: function () {
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_MIXPY_TURTLE_TEXTINPUT)
this.setColour(TURTLE_HUE);
this.appendValueInput('TITLE')
.setCheck(String)
.appendField(Blockly.Msg.MIXLY_MIXPY_TURTLE_TEXTINPUT_TITLE);
this.appendValueInput('PROMPT')
.setCheck(String)
.appendField(Blockly.Msg.MIXLY_MIXPY_TURTLE_TEXTINPUT_PROMPT);
this.setInputsInline(true);
this.setOutput(true, String);
this.setTooltip(Blockly.Msg.TURTLE_TEXTINPUT_TOOLTIP);
}
};
export const turtle_write = {
init: function () {
this.appendValueInput('TUR')
.setCheck('Turtle')
this.setColour(TURTLE_HUE);
this.appendValueInput('VAR')
.setCheck(String)
.appendField(Blockly.Msg.blockpy_turtle_write);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.TURTLE_WRITE_TOOLTIP);
}
};
export const turtle_write_format = {
init: function () {
var move =
[[Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE, 'False'], [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE, 'True']];
var align =
[[Blockly.Msg.MIXLY_TURTLE_WRITE_ALIGN_LEFT, 'left'], [Blockly.Msg.MIXLY_TURTLE_WRITE_ALIGN_CENTER, 'center'], [Blockly.Msg.MIXLY_TURTLE_WRITE_ALIGN_RIGHT, 'right']];
var fonttype =
[[Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_TYPE_NORMAL, 'normal'], [Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_TYPE_BOLD, 'bold'], [Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_TYPE_ITALIC, 'italic'], [Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_TYPE_BOLD_ITALIC, 'bold","italic']];
this.appendValueInput('TUR')
.setCheck('Turtle')
this.setColour(TURTLE_HUE);
this.appendValueInput('VAR')
.setCheck(String)
.appendField(Blockly.Msg.blockpy_turtle_write);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE)
.appendField(new Blockly.FieldDropdown(move), 'MOVE');
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_TURTLE_WRITE_ALIGN)
.appendField(new Blockly.FieldDropdown(align), 'ALIGN');
this.appendValueInput('FONTNAME')
.setCheck(String)
.appendField(Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_NAME);
this.appendValueInput('FONTNUM')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_NUM);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_TYPE)
.appendField(new Blockly.FieldDropdown(fonttype), 'FONTTYPE');
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.TURTLE_WRITE_TOOLTIP);
}
};
export const turtle_write_format_skulpt = {
init: function () {
var move =
[[Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE, 'False'], [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE, 'True']];
var align =
[[Blockly.Msg.MIXLY_TURTLE_WRITE_ALIGN_LEFT, 'left'], [Blockly.Msg.MIXLY_TURTLE_WRITE_ALIGN_CENTER, 'center'], [Blockly.Msg.MIXLY_TURTLE_WRITE_ALIGN_RIGHT, 'right']];
var fonttype =
[[Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_TYPE_NORMAL, 'normal'], [Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_TYPE_BOLD, 'bold'], [Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_TYPE_ITALIC, 'italic']];
this.appendValueInput('TUR')
.setCheck('Turtle')
this.setColour(TURTLE_HUE);
this.appendValueInput('VAR')
.setCheck(String)
.appendField(Blockly.Msg.blockpy_turtle_write);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE)
.appendField(new Blockly.FieldDropdown(move), 'MOVE');
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_TURTLE_WRITE_ALIGN)
.appendField(new Blockly.FieldDropdown(align), 'ALIGN');
this.appendValueInput('FONTNAME')
.setCheck(String)
.appendField(Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_NAME);
this.appendValueInput('FONTNUM')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_NUM);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_TYPE)
.appendField(new Blockly.FieldDropdown(fonttype), 'FONTTYPE');
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.TURTLE_WRITE_TOOLTIP);
}
};
export const turtle_color_seclet = {
init: function () {
this.setColour(TURTLE_HUE);
this.appendDummyInput("")
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(new Blockly.FieldColour("ff0000"), "COLOR");
this.setInputsInline(true);
this.setOutput(true, String);
}
};
export const turtle_getscreen = {
init: function () {
this.setColour(TURTLE_HUE);
this.appendValueInput('TUR')
.setCheck('Turtle')
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_TURTEL_GETSCREEN)
.appendField(new Blockly.FieldTextInput('screen'), 'VAR')
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.MIXLY_TURTEL_GETSCREEN_TOOLTIP);
},
getVars: function () {
return [this.getFieldValue('VAR')];
},
renameVar: function (oldName, newName) {
if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {
this.setTitleValue(newName, 'VAR');
}
}
}
export const turtle_update = {
init: function () {
this.setColour(TURTLE_HUE);
this.appendValueInput('TUR');
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_TURTLE_UPDATE);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_TURTEL_EVENT_ONKEY_TOOLTIP);
}
};
export const turtle_onkey = {
init: function () {
this.setColour(TURTLE_HUE);
this.appendValueInput('TUR')
this.appendValueInput('VAR')
.appendField(Blockly.Msg.MIXLY_TURTEL_EVENT_ONKEY);
this.appendValueInput('callback')
.appendField(Blockly.Msg.MIXLY_PYTHON_CONTROLS_THREAD_USE)
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_TURTEL_EVENT_ONKEY_TOOLTIP);
}
};
export const turtle_onclick = {
init: function () {
this.setColour(TURTLE_HUE);
this.appendValueInput('TUR')
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_TURTEL_EVENT_ONCLICK);
this.appendValueInput('callback')
.appendField(Blockly.Msg.MIXLY_PYTHON_CONTROLS_THREAD_USE)
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_TURTEL_EVENT_ONCLICK_TOOLTIP);
}
};
export const turtle_ontimer = {
init: function () {
this.setColour(TURTLE_HUE);
this.appendValueInput('TUR')
this.appendValueInput('VAR')
.appendField(Blockly.Msg.MIXLY_TURTEL_EVENT_ONTIMER);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_mSecond);
this.appendValueInput('callback')
.appendField(Blockly.Msg.MIXLY_PYTHON_CONTROLS_THREAD_USE)
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_TURTEL_EVENT_ONTIMER_TOOLTIP);
}
};
export const turtle_listen = {
init: function () {
this.setColour(TURTLE_HUE);
this.appendValueInput('TUR')
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_TURTEL_SCREEN_LISTEN);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const turtle_screen_savefig = {
init: function () {
this.setColour(TURTLE_HUE);
this.appendValueInput('TUR')
this.appendValueInput("FILE")
.setCheck(String)
.appendField(Blockly.Msg.mixpy_PL_SAVEFIG);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setOutput(false);
this.setTooltip(Blockly.Msg.mixpy_TURTLE_SAVEFIG_TOOLTIP);
}
};

View File

@@ -0,0 +1,412 @@
'use strict';
pbc.assignD.get('AipImageClassify')['check_assign'] = function(py2block, node, targets, value) {
if(value._astname != "Call" || value.func._astname != "Attribute" || value.func.value._astname != "Name"){
return false;
}
var funcName = py2block.identifier(value.func.attr);
var moduleName = py2block.Name_str(value.func.value);
if(moduleName === "aip" && funcName === "AipImageClassify" && value.args.length === 2)
return true;
return false;
}
pbc.assignD.get('AipImageClassify')['create_block'] = function(py2block, node, targets, value){
//var mode = py2block.Str_value(value.args[1]);
return block("AI_client", node.lineno, {
"CTYPE":"AipImageClassify"
}, {
//"APP_ID":py2block.convert(value.args[0]),
"API_KEY":py2block.convert(value.args[0]),
"SECRET_KEY":py2block.convert(value.args[1]),
"SUB":py2block.convert(targets[0])
});
}
pbc.assignD.get('AipSpeech')['check_assign'] = function(py2block, node, targets, value) {
if(value._astname != "Call" || value.func._astname != "Attribute" || value.func.value._astname != "Name"){
return false;
}
var funcName = py2block.identifier(value.func.attr);
var moduleName = py2block.Name_str(value.func.value);
if(moduleName === "aip" && funcName === "AipSpeech" && value.args.length === 2)
return true;
return false;
}
pbc.assignD.get('AipSpeech')['create_block'] = function(py2block, node, targets, value){
//var mode = py2block.Str_value(value.args[1]);
return block("AI_client", node.lineno, {
"CTYPE":"AipSpeech"
}, {
//"APP_ID":py2block.convert(value.args[0]),
"API_KEY":py2block.convert(value.args[0]),
"SECRET_KEY":py2block.convert(value.args[1]),
"SUB":py2block.convert(targets[0])
});
}
pbc.assignD.get('AipImageCensor')['check_assign'] = function(py2block, node, targets, value) {
if(value._astname != "Call" || value.func._astname != "Attribute" || value.func.value._astname != "Name"){
return false;
}
var funcName = py2block.identifier(value.func.attr);
var moduleName = py2block.Name_str(value.func.value);
if(moduleName === "aip" && funcName === "AipImageCensor" && value.args.length === 2)
return true;
return false;
}
pbc.assignD.get('AipImageCensor')['create_block'] = function(py2block, node, targets, value){
//var mode = py2block.Str_value(value.args[1]);
return block("AI_client", node.lineno, {
"CTYPE":"AipImageCensor"
}, {
//"APP_ID":py2block.convert(value.args[0]),
"API_KEY":py2block.convert(value.args[0]),
"SECRET_KEY":py2block.convert(value.args[1]),
"SUB":py2block.convert(targets[0])
});
}
pbc.assignD.get('AipOcr')['check_assign'] = function(py2block, node, targets, value) {
if(value._astname != "Call" || value.func._astname != "Attribute" || value.func.value._astname != "Name"){
return false;
}
var funcName = py2block.identifier(value.func.attr);
var moduleName = py2block.Name_str(value.func.value);
if(moduleName === "aip" && funcName === "AipOcr" && value.args.length === 2)
return true;
return false;
}
pbc.assignD.get('AipOcr')['create_block'] = function(py2block, node, targets, value){
//var mode = py2block.Str_value(value.args[1]);
return block("AI_client", node.lineno, {
"CTYPE":"AipOcr"
}, {
//"APP_ID":py2block.convert(value.args[0]),
"API_KEY":py2block.convert(value.args[0]),
"SECRET_KEY":py2block.convert(value.args[1]),
"SUB":py2block.convert(targets[0])
});
}
pbc.assignD.get('AipNlp')['check_assign'] = function(py2block, node, targets, value) {
if(value._astname != "Call" || value.func._astname != "Attribute" || value.func.value._astname != "Name"){
return false;
}
var funcName = py2block.identifier(value.func.attr);
var moduleName = py2block.Name_str(value.func.value);
if(moduleName === "aip" && funcName === "AipNlp" && value.args.length === 2)
return true;
return false;
}
pbc.assignD.get('AipNlp')['create_block'] = function(py2block, node, targets, value){
//var mode = py2block.Str_value(value.args[1]);
return block("AI_client", node.lineno, {
"CTYPE":"AipNlp"
}, {
//"APP_ID":py2block.convert(value.args[0]),
"API_KEY":py2block.convert(value.args[0]),
"SECRET_KEY":py2block.convert(value.args[1]),
"SUB":py2block.convert(targets[0])
});
}
pbc.assignD.get('AipFace')['check_assign'] = function(py2block, node, targets, value) {
if(value._astname != "Call" || value.func._astname != "Attribute" || value.func.value._astname != "Name"){
return false;
}
var funcName = py2block.identifier(value.func.attr);
var moduleName = py2block.Name_str(value.func.value);
if(moduleName === "aip" && funcName === "AipFace" && value.args.length === 2)
return true;
return false;
}
pbc.assignD.get('AipFace')['create_block'] = function(py2block, node, targets, value){
//var mode = py2block.Str_value(value.args[1]);
return block("AI_client", node.lineno, {
"CTYPE":"AipFace"
}, {
//"APP_ID":py2block.convert(value.args[0]),
"API_KEY":py2block.convert(value.args[0]),
"SECRET_KEY":py2block.convert(value.args[1]),
"SUB":py2block.convert(targets[0])
});
}
function AIChooseAndGet(mode){
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length !== 0) {
throw new Error("Incorrect number of arguments");
}
return block("AI_ChooseAndGet", func.lineno, {"TYPE":mode}, {}, {
"inline": "true"
});
}
return converter;
}
pbc.moduleFunctionD.get('FileDialog')['getOneFile'] = AIChooseAndGet('getOneFile');
pbc.moduleFunctionD.get('FileDialog')['getManyFiles'] = AIChooseAndGet('getManyFiles');
pbc.moduleFunctionD.get('FileDialog')['getDirectory'] = AIChooseAndGet('getDirectory');
pbc.objectFunctionD.get('synthesis')['Dict'] = function(py2block, func, args, keywords, starargs, kwargs, node){
if (args.length !== 1) {
throw new Error("Incorrect number of arguments");
}
var objblock = py2block.convert(func.value);
var argument = py2block.convert(args[0]);
return block("AI_Speech_synthesis", func.lineno, {}, {
"SUB": objblock,
"STR": argument,
'ATTR':py2block.convert(keywords[0].value)
}, {
"inline": "false"
});
};
pbc.objectFunctionD.get('asr')['Dict'] = function(py2block, func, args, keywords, starargs, kwargs, node){
if (args.length !== 1) {
throw new Error("Incorrect number of arguments");
}
var objblock = py2block.convert(func.value);
var argument = py2block.convert(args[0]);
return block("AI_Speech_asr", func.lineno, {}, {
"SUB": objblock,
"FILE": argument,
'ATTR':py2block.convert(keywords[0].value)
}, {
"inline": "false"
});
};
pbc.objectFunctionD.get('advancedGeneral')['Dict'] = function(py2block, func, args, keywords, starargs, kwargs, node){
if (args.length !== 1) {
throw new Error("Incorrect number of arguments");
}
var objblock = py2block.convert(func.value);
var argument = py2block.convert(args[0]);
return block("AI_ImageClassify", func.lineno, {}, {
"SUB": objblock,
"FUNC": block("AI_ImageClassify_Func", func.lineno, {"TYPE":"advancedGeneral"}, {}),
"ADDR": argument,
'ATTR':py2block.convert(keywords[0].value)
}, {
"inline": "false"
});
};
pbc.objectFunctionD.get('match')['Dict'] = function(py2block, func, args, keywords, starargs, kwargs, node){
if (args.length !== 2) {
throw new Error("Incorrect number of arguments");
}
var objblock = py2block.convert(func.value);
var argument = py2block.convert(args[0]);
var argument1 = py2block.convert(args[1]);
return block("AI_Face_match", func.lineno, {}, {
"SUB": objblock,
"VAR": argument,
"VAR2": argument1,
'ATTR':py2block.convert(keywords[0].value)
}, {
"inline": "false"
});
};
function AIImageClassify(mode){
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length !== 1) {
throw new Error("Incorrect number of arguments");
}
var objblock = py2block.convert(func.value);
var argument = py2block.convert(args[0]);
return block("AI_ImageClassify", func.lineno, {}, {
"SUB": objblock,
"FUNC": block("AI_ImageClassify_Func", func.lineno, {"TYPE":mode}, {}),
"ADDR": argument,
'ATTR':py2block.convert(keywords[0].value)
}, {
"inline": "false"
});
}
return converter;
}
pbc.objectFunctionD.get('advancedGeneral')['Dict'] = AIImageClassify('advancedGeneral');
pbc.objectFunctionD.get('dishDetect')['Dict'] = AIImageClassify('dishDetect');
pbc.objectFunctionD.get('carDetect')['Dict'] = AIImageClassify('carDetect');
pbc.objectFunctionD.get('animalDetect')['Dict'] = AIImageClassify('animalDetect');
pbc.objectFunctionD.get('plantDetect')['Dict'] = AIImageClassify('plantDetect');
pbc.objectFunctionD.get('logoSearch')['Dict'] = AIImageClassify('logoSearch');
function AIORC(mode){
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length !== 1) {
throw new Error("Incorrect number of arguments");
}
var objblock = py2block.convert(func.value);
var argument = py2block.convert(args[0]);
return block("AI_Ocr", func.lineno, {}, {
"SUB": objblock,
"FUNC": block("AI_Ocr_Func", func.lineno, {"TYPE":mode}, {}),
"ADDR": argument,
'ATTR':py2block.convert(keywords[0].value)
}, {
"inline": "false"
});
}
return converter;
}
pbc.objectFunctionD.get('basicGeneral')['Dict'] = AIORC('basicGeneral');
pbc.objectFunctionD.get('webImage')['Dict'] = AIORC('webImage');
pbc.objectFunctionD.get('idcard')['Dict'] = AIORC('idcard');
pbc.objectFunctionD.get('bankcard')['Dict'] = AIORC('bankcard');
pbc.objectFunctionD.get('drivingLicense')['Dict'] = AIORC('drivingLicense');
pbc.objectFunctionD.get('vehicleLicense')['Dict'] = AIORC('vehicleLicense');
pbc.objectFunctionD.get('licensePlate')['Dict'] = AIORC('licensePlate');
pbc.objectFunctionD.get('businessLicense')['Dict'] = AIORC('businessLicense');
pbc.objectFunctionD.get('receipt')['Dict'] = AIORC('receipt');
pbc.objectFunctionD.get('trainTicket')['Dict'] = AIORC('trainTicket');
pbc.objectFunctionD.get('taxiReceipt')['Dict'] = AIORC('taxiReceipt');
pbc.objectFunctionD.get('tableRecognition')['Dict'] = AIORC('tableRecognition');
pbc.objectFunctionD.get('vatInvoice')['Dict'] = AIORC('vatInvoice');
pbc.objectFunctionD.get('passport')['Dict'] = AIORC('passport');
pbc.objectFunctionD.get('handwriting')['Dict'] = AIORC('handwriting');
function AINLP(mode){
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length !== 1) {
throw new Error("Incorrect number of arguments");
}
var objblock = py2block.convert(func.value);
var argument = py2block.convert(args[0]);
return block("AI_Nlp", func.lineno, {}, {
"SUB": objblock,
"FUNC": block("AI_Nlp_Func", func.lineno, {"TYPE":mode}, {}),
"STR": argument,
'ATTR':py2block.convert(keywords[0].value)
}, {
"inline": "false"
});
}
return converter;
}
pbc.objectFunctionD.get('lexer')['Dict'] = AINLP('lexer');
pbc.objectFunctionD.get('depParser')['Dict'] = AINLP('depParser');
pbc.objectFunctionD.get('wordEmbedding')['Dict'] = AINLP('wordEmbedding');
pbc.objectFunctionD.get('dnnlm')['Dict'] = AINLP('dnnlm');
pbc.objectFunctionD.get('commentTag')['Dict'] = AINLP('commentTag');
pbc.objectFunctionD.get('sentimentClassify')['Dict'] = AINLP('sentimentClassify');
pbc.objectFunctionD.get('keyword')['Dict'] = AINLP('keyword');
//pbc.objectFunctionD.get('topic')['Dict'] = AINLP('topic');
pbc.objectFunctionD.get('ecnet')['Dict'] = AINLP('ecnet');
pbc.objectFunctionD.get('emotion')['Dict'] = AINLP('emotion');
function AISIMILARITY(mode){
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length !== 2) {
throw new Error("Incorrect number of arguments");
}
var objblock = py2block.convert(func.value);
var argument = py2block.convert(args[0]);
var argument1 = py2block.convert(args[1]);
var a;
return block("AI_Nlp_Sim", func.lineno, {}, {
"SUB": objblock,
"FUNC": block("AI_Nlp_Func_sim", func.lineno, {"TYPE":mode}, {}),
"STR1": argument,
"STR2": argument1,
'ATTR':py2block.convert(keywords[0].value)
}, {
"inline": "false"
});
}
return converter;
}
pbc.objectFunctionD.get('wordSimEmbedding')['Dict'] = AISIMILARITY('wordSimEmbedding');
pbc.objectFunctionD.get('simnet')['Dict'] = AISIMILARITY('simnet');
pbc.objectFunctionD.get('newsSummary')['Dict'] = function(py2block, func, args, keywords, starargs, kwargs, node){
if (args.length !== 2) {
throw new Error("Incorrect number of arguments");
}
var objblock = py2block.convert(func.value);
var argument = py2block.convert(args[0]);
var argument1 = py2block.convert(args[1]);
return block("AI_Nlp_newsSummary", func.lineno, {}, {
"SUB": objblock,
"STR": argument,
"LEN": argument1,
'ATTR':py2block.convert(keywords[0].value)
}, {
"inline": "false"
});
};
pbc.objectFunctionD.get('topic')['Dict'] = function(py2block, func, args, keywords, starargs, kwargs, node){
if (keywords.length > 1) {
throw new Error("Incorrect number of arguments");
}
if (keywords.length == 0){
var objblock = py2block.convert(func.value);
var argument = py2block.convert(args[0]);
var argument1 = py2block.convert(args[1]);
return block("AI_Nlp_Topic", func.lineno, {}, {
"SUB": objblock,
"STR1": argument,
"STR2": argument1,
}, {
"inline": "false"
});
}
if (keywords.length == 1){
var objblock = py2block.convert(func.value);
var argument = py2block.convert(args[0]);
return block("AI_Nlp", func.lineno, {}, {
"SUB": objblock,
"FUNC": block("AI_Nlp_Func", func.lineno, {"TYPE":"topic"}, {}),
"STR": argument,
'ATTR':py2block.convert(keywords[0].value)
}, {
"inline": "false"
});
}
};
pbc.moduleFunctionD.get('audio')['audio_record'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length !== 2) {
throw new Error("Incorrect number of arguments");
}
var varblock = py2block.convert(args[0]);
var numblock = py2block.convert(args[1]);
return [block("AI_audio", func.lineno, {}, {
'VAR': varblock,
'TIME': numblock
}, {
"inline": "true"
})];
}
pbc.moduleFunctionD.get('cam')['photo_capture'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length !== 2) {
throw new Error("Incorrect number of arguments");
}
var varblock = py2block.convert(args[0]);
var numblock = py2block.convert(args[1]);
return [block("AI_photo", func.lineno, {}, {
'VAR': varblock,
'BUT': numblock
}, {
"inline": "true"
})];
}

View File

@@ -0,0 +1,86 @@
'use strict';
// pbc.assignD.get('Response')['check_assign'] = function (py2block, node, targets, value) {
// if(value.func._astname != "Attribute" || value.func.value._astname != "Name"){
// return false;
// }
// var moduleName = py2block.Name_str(value.func.value);
// var funcName = py2block.identifier(value.func.attr);
// if (value._astname === "Call" && moduleName === "requests"
// && funcName === "get" && value.args.length === 1)
// return true;
// return false;
// }
// pbc.assignD.get('Response')['create_block'] = function (py2block, node, targets, value) {
// var nameblock = py2block.Name_str(node.targets[0]);
// var argblock = py2block.convert(value.args[0]);
// return block('requests_get', node.lineno, {
// 'VAR': nameblock
// }, {
// 'DOMAIN':argblock
// });
// }
function communicateRequestmethod(mode) {
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length != 1) {
throw new Error("Incorrect number of arguments");
}
var argblock = py2block.convert(args[0]);
return block("requests_get", func.lineno, {
'TYPE': mode,
}, {
'URL': argblock
}, {
"inline": "true"
});
}
return converter;
}
pbc.moduleFunctionD.get('requests')['get'] = communicateRequestmethod('get');
pbc.moduleFunctionD.get('requests')['head'] = communicateRequestmethod('head');
pbc.moduleFunctionD.get('requests')['delete'] = communicateRequestmethod('delete');
function communicatePostmethod(mode) {
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length != 1) {
throw new Error("Incorrect number of arguments");
}
var argblock = py2block.convert(args[0]);
var keyblock = py2block.convert(keywords[0].value)
return block("requests_post", func.lineno, {
'TYPE': mode,
}, {
'URL': argblock,
'data':keyblock
}, {
"inline": "true"
});
}
return converter;
}
pbc.moduleFunctionD.get('requests')['post'] = communicatePostmethod('post');
pbc.moduleFunctionD.get('requests')['put'] = communicatePostmethod('put');
pbc.moduleFunctionD.get('requests')['patch'] = communicatePostmethod('patch');
function modelsResponse(py2block, node, value, attr) {
return block('requests_attribute', node.lineno, {
'ATTR': py2block.identifier(attr)
}, {
'VAL': py2block.convert(value)
});
}
pbc.objectAttrD.get('status_code')['Response'] = modelsResponse;
pbc.objectAttrD.get('text')['Response'] = modelsResponse;
pbc.objectAttrD.get('cookies')['Response'] = modelsResponse;
pbc.objectAttrD.get('content')['Response'] = modelsResponse;
pbc.objectAttrD.get('encoding')['Response'] = modelsResponse;

View File

@@ -0,0 +1,244 @@
'use strict';
pbc.moduleFunctionD.get('cv2')['imread'] = function(py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length != 1) {
throw new Error("Incorrect number of arguments");
}
var arg1block = py2block.convert(args[0]);
return block("cv_read_image", func.lineno, {}, {
'FILE': arg1block
}, {
"inline": "true"
});
}
pbc.moduleFunctionD.get('cv2')['CascadeClassifier'] = function(py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length != 1) {
throw new Error("Incorrect number of arguments");
}
var arg1block = py2block.convert(args[0]);
return block("cv_face_classifier", func.lineno, {}, {
'FILE': arg1block
}, {
"inline": "true"
});
}
pbc.moduleFunctionD.get('cv2')['imshow'] = function(py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length != 2) {
throw new Error("Incorrect number of arguments");
}
var arg1block = py2block.convert(args[0]);
var arg2block = py2block.convert(args[1]);
return [block("cv_show_image", func.lineno, {}, {
'data': arg1block,
'FILE':arg2block
}, {
"inline": "true"
})];
}
pbc.moduleFunctionD.get('cv2')['imwrite'] = function(py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length != 2) {
throw new Error("Incorrect number of arguments");
}
var arg1block = py2block.convert(args[0]);
var arg2block = py2block.convert(args[1]);
return [block("cv_write_image", func.lineno, {}, {
'data': arg1block,
'FILE':arg2block
}, {
"inline": "true"
})];
}
pbc.moduleFunctionD.get('cv2')['waitKey'] = function(py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length != 1) {
throw new Error("Incorrect number of arguments");
}
var arg1block = py2block.convert(args[0]);
return [block("cv_waitkey", func.lineno, {}, {
'data': arg1block
}, {
"inline": "true"
})];
}
pbc.moduleFunctionD.get('cv2')['destroyAllWindows'] = function(py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length != 0) {
throw new Error("Incorrect number of arguments");
}
return [block("cv_destroy_all", func.lineno, {}, {}, {
"inline": "true"
})];
}
function cvRectLine(mode){
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length != 5) {
throw new Error("Incorrect number of arguments");
}
var arg1block = py2block.convert(args[0]);
var x1 = args[1].elts[0]
var y1 = args[1].elts[1]
var x2 = args[2].elts[0]
var y2 = args[2].elts[1]
var colorv='#'
if(args[3].elts[2].n.v.toString(16).length==1){
colorv+='0'
}
colorv+=args[3].elts[2].n.v.toString(16)
if(args[3].elts[1].n.v.toString(16).length==1){
colorv+='0'
}
colorv+=args[3].elts[1].n.v.toString(16)
if(args[3].elts[0].n.v.toString(16).length==1){
colorv+='0'
}
colorv+=args[3].elts[0].n.v.toString(16)
var color = {
_astname: "Str",
s: {
'v': colorv
}
}
var x1block = py2block.convert(x1);
var x2block = py2block.convert(x2);
var y1block = py2block.convert(y1);
var y2block = py2block.convert(y2);
var colorblock = py2block.Str_value(color);
var arg5block = py2block.convert(args[4]);
return [block("cv_line_rect", func.lineno, {
'DIR':mode,
'FIELDNAME':colorblock
}, {
'FILE': arg1block,
'x1':x1block,
'y1':y1block,
'x2':x2block,
'y2':y2block,
'thick':arg5block,
}, {
"inline": "true"
})];
}
return converter;
}
pbc.moduleFunctionD.get('cv2')['rectangle'] = cvRectLine('rectangle')
pbc.moduleFunctionD.get('cv2')['line'] = cvRectLine('line')
pbc.moduleFunctionD.get('cv2')['putText'] = function(py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length != 7) {
throw new Error("Incorrect number of arguments");
}
var arg1block = py2block.convert(args[0]);
var arg2block = py2block.convert(args[1]);
var x1 = args[2].elts[0]
var y1 = args[2].elts[1]
var colorv='#'
if(args[5].elts[2].n.v.toString(16).length==1){
colorv+='0'
}
colorv+=args[5].elts[2].n.v.toString(16)
if(args[5].elts[1].n.v.toString(16).length==1){
colorv+='0'
}
colorv+=args[5].elts[1].n.v.toString(16)
if(args[5].elts[0].n.v.toString(16).length==1){
colorv+='0'
}
colorv+=args[5].elts[0].n.v.toString(16)
var color = {
_astname: "Str",
s: {
'v': colorv
}
}
var x1block = py2block.convert(x1);
var y1block = py2block.convert(y1);
var colorblock = py2block.Str_value(color);
var arg5block = py2block.convert(args[4]);
var arg7block = py2block.convert(args[6]);
var font = args[3].attr.v.slice(13)
return [block("cv_text", func.lineno, {
'font':font,
'FIELDNAME':colorblock
}, {
'FILE': arg1block,
'data':arg2block,
'x1':x1block,
'y1':y1block,
'size':arg5block,
'thick':arg7block,
}, {
"inline": "true"
})];
}
pbc.objectFunctionD.get('detectMultiScale')['face'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length !== 1 || keywords.length < 2) {
throw new Error("Incorrect number of arguments");
}
var arg1block = py2block.convert(args[0]);
var faceblock = py2block.convert(func.value);
if(keywords.length == 2){
var keylist = new Array(2)
for(var i=0;i<keywords.length;i++){
var tag = py2block.identifier(keywords[i].arg)
if (tag=='scaleFactor'){
keylist[0]=py2block.convert(keywords[i].value);
}
else if(tag=='minNeighbors'){
keylist[1]=py2block.convert(keywords[i].value);
}
}
return block("cv_face_detect", func.lineno, {},{
'FILE': arg1block,
"FACE":faceblock,
'SCALE':keylist[0],
'NEIGHBOR':keylist[1]
},{
"inline": "true"
});}
if(keywords.length == 4){
var keylist = new Array(6)
for(var i=0;i<keywords.length;i++){
var tag = py2block.identifier(keywords[i].arg)
if (tag=='scaleFactor'){
keylist[0]=py2block.convert(keywords[i].value);
}
else if(tag=='minNeighbors'){
keylist[1]=py2block.convert(keywords[i].value);
}
else if(tag=='minSize'){
keylist[2]=py2block.convert(keywords[i].value.elts[0]);
keylist[3]=py2block.convert(keywords[i].value.elts[1]);
}
else if(tag=='maxSize'){
keylist[4]=py2block.convert(keywords[i].value.elts[0]);
keylist[5]=py2block.convert(keywords[i].value.elts[1]);
}
}
return block("cv_face_detect_all", func.lineno, {},{
'FILE': arg1block,
"FACE":faceblock,
'SCALE':keylist[0],
'NEIGHBOR':keylist[1],
'x1':keylist[2],
'y1':keylist[3],
'x2':keylist[4],
'y2':keylist[5]
},{
"inline": "true"
});}
};

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,342 @@
'use strict';
pbc.assignD.get('Series')['check_assign'] = function (py2block, node, targets, value) {
if(value.func._astname != "Attribute" || value.func.value._astname != "Name"){
return false;
}
var moduleName = py2block.Name_str(value.func.value);
var funcName = py2block.identifier(value.func.attr);
if (value._astname === "Call" && moduleName === "pandas"
&& funcName === "Series" && value.args.length === 1)
return true;
return false;
}
pbc.assignD.get('Series')['create_block'] = function (py2block, node, targets, value) {
var series = py2block.Name_str(node.targets[0]);
var argblock = py2block.convert(value.args[0]);
var param = value.keywords[0];
if (value.keywords.length == 0){
return block('series_create', node.lineno, {
'VAR': series
}, {
'SER': argblock
});
}
else if(value.keywords.length == 1&&param.arg.v =="index"){
var listblock = py2block.convert(value.keywords[0].value);
return block('series_create_from_index', node.lineno, {
'VAR': series
}, {
'SER': argblock,
'INDEX': listblock
});
}
}
pbc.moduleFunctionD.get('pylab')['show'] = function(py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length != 0) {
throw new Error("Incorrect number of arguments");
}
return [block("pl_show", func.lineno, {}, {}, {
"inline": "true"
})];
}
pbc.moduleFunctionD.get('pylab')['legend'] = function(py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length != 0) {
throw new Error("Incorrect number of arguments");
}
return [block("pl_legend", func.lineno, {}, {}, {
"inline": "true"
})];
}
pbc.moduleFunctionD.get('pylab')['title'] = function(py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length != 1) {
throw new Error("Incorrect number of arguments");
}
var argblock = py2block.convert(args[0]);
return [block("pl_title", func.lineno, {}, {
'TITLE': argblock
}, {
"inline": "true"
})];
}
function dataxylabel(mode){
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length !== 1) {
throw new Error("Incorrect number of arguments");
}
var argblock = py2block.convert(args[0]);
return [block("pl_label", func.lineno, {
"DIR":mode
}, {
'LABEL': argblock
}, {
"inline": "true"
})];
}
return converter;
}
pbc.moduleFunctionD.get('pylab')['xlabel'] = dataxylabel('x');
pbc.moduleFunctionD.get('pylab')['ylabel'] = dataxylabel('y');
pbc.assignD.get('DataFrame')['check_assign'] = function (py2block, node, targets, value) {
if(value.func._astname != "Attribute" || value.func.value._astname != "Name"){
return false;
}
var moduleName = py2block.Name_str(value.func.value);
var funcName = py2block.identifier(value.func.attr);
if (value._astname === "Call" && moduleName === "pandas"
&& funcName === "DataFrame" && value.args.length === 1)
return true;
return false;
}
pbc.assignD.get('DataFrame')['create_block'] = function (py2block, node, targets, value) {
var series = py2block.Name_str(node.targets[0]);
var argblock = py2block.convert(value.args[0]);
var param = value.keywords[0];
if (value.keywords.length == 0){
return block('dataframe_create', node.lineno, {
'VAR': series
}, {
'SER': argblock
});
}
else if(value.keywords.length == 1&&value.keywords[0].arg.v =="index"){
var listblock = py2block.convert(value.keywords[0].value);
return block('dataframe_create_from_one_index', node.lineno, {
'VAR': series,
'COLUMN_RAW':"index"
}, {
'SER': argblock,
'INDEX': listblock
});
}
else if(value.keywords.length == 1&&value.keywords[0].arg.v =="columns"){
var listblock = py2block.convert(value.keywords[0].value);
return block('dataframe_create_from_one_index', node.lineno, {
'VAR': series,
'COLUMN_RAW':"columns"
}, {
'SER': argblock,
'INDEX': listblock
});
}
else if(value.keywords.length == 2&&((value.keywords[0].arg.v =="columns"&&value.keywords[1].arg.v =="index")||(value.keywords[1].arg.v =="columns"&&value.keywords[0].arg.v =="index"))){
var listblock0 = py2block.convert(value.keywords[0].value);
var listblock1 = py2block.convert(value.keywords[1].value);
if(value.keywords[0].arg.v =="columns"&&value.keywords[1].arg.v =="index"){
return block('dataframe_create_from_index', node.lineno, {
'VAR': series
}, {
'SER': argblock,
'INDEX_COLUMN': listblock0,
'INDEX_RAW': listblock1
});
}
if(value.keywords[1].arg.v =="columns"&&value.keywords[0].arg.v =="index"){
return block('dataframe_create_from_index', node.lineno, {
'VAR': series
}, {
'SER': argblock,
'INDEX_COLUMN': listblock1,
'INDEX_RAW': listblock0
});
}
}
}
pbc.moduleFunctionD.get('pylab')['plot'] = function(py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length != 1&&args.length != 2) {
throw new Error("Incorrect number of arguments");
}
var argblock = py2block.convert(args[0]);
if (args.length == 1){
return [block("pl_plot", func.lineno, {
'DOT':',',
'LINE':'-',
'COLOR':'b'
}, {
'SER': argblock
}, {
"inline": "true"
})];
}
else if(args.length == 2){
var lineblock = args[1].s.v;
if (lineblock.length>4) {
throw new Error("Incorrect number of arguments");
}
var dottype = ',';
var linetype = '-';
var colortype = 'b';
for(var i=0;i<lineblock.length;i++){
if(lineblock[i]=='-'&&(lineblock[i+1]=='-'||lineblock[i+1]=='.')){
linetype=lineblock[i]+lineblock[i+1];
i++;
break;
}
else{
var operate=lineblock[i];
}
switch(operate){
case '-':
linetype=operate;
break;
case ':':
linetype=operate;
break;
case 'b':
colortype=operate;
break;
case 'g':
colortype=operate;
break;
case 'r':
colortype=operate;
break;
case 'c':
colortype=operate;
break;
case 'm':
colortype=operate;
break;
case 'y':
colortype=operate;
break;
case 'k':
colortype=operate;
break;
case 'w':
colortype=operate;
break;
case '.':
dottype=operate;
break;
case '^':
dottype=operate;
break;
case '2':
dottype=operate;
break;
case 'p':
dottype=operate;
break;
case '+':
dottype=operate;
break;
case '|':
dottype=operate;
break;
case ',':
dottype=operate;
break;
case '<':
dottype=operate;
break;
case '3':
dottype=operate;
break;
case '*':
dottype=operate;
break;
case 'x':
dottype=operate;
break;
case '_':
dottype=operate;
break;
case 'o':
dottype=operate;
break;
case '>':
dottype=operate;
break;
case '4':
dottype=operate;
break;
case 'h':
dottype=operate;
break;
case 'D':
dottype=operate;
break;
case 'v':
dottype=operate;
break;
case '1':
dottype=operate;
break;
case 's':
dottype=operate;
break;
case 'd':
dottype=operate;
break;
case 'H':
dottype=operate;
break;
}
}
return [block("pl_plot", func.lineno, {
'DOT':dottype,
'LINE':linetype,
'COLOR':colortype
}, {
'SER': argblock
}, {
"inline": "true"
})];
}
}
function series_index_value(py2block, node, value, attr) {
return block('series_index_value', node.lineno, {
'INDEX_VALUE': py2block.identifier(attr)
}, {
'SERIES': py2block.convert(value)
});
}
pbc.objectAttrD.get('index')['Series'] = series_index_value;
pbc.objectAttrD.get('value')['Series'] = series_index_value;

View File

@@ -0,0 +1,93 @@
'use strict';
pbc.assignD.get('hardware')['check_assign'] = function(py2block, node, targets, value) {
if(value._astname != "Call" || value.func._astname != "Attribute" || value.func.value._astname != "Name"){
return false;
}
var moduleName = py2block.Name_str(value.func.value);
var funcName = py2block.identifier(value.func.attr);
if(value._astname === "Call" && moduleName === "s4alib"
&& funcName === "s4a_start" && value.args.length === 1)
return true;
return false;
}
pbc.assignD.get('hardware')['create_block'] = function(py2block, node, targets, value){
var argblock = py2block.convert(value.args[0]);
return block("hardware_arduino_start", node.lineno, {
}, {
// "PIN":argblock,
"SUB":py2block.convert(targets[0]),
});
}
pbc.objectFunctionD.get('digital_write')['s4a'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length !== 2) {
throw new Error("Incorrect number of arguments");
}
pbc.pinType = "pins_digital_write";
var pinblock = py2block.convert(args[0]);
pbc.pinType = "pins_digital";
var argblock = py2block.convert(args[1]);
pbc.pinType = null;
var s4ablock=py2block.convert(func.value);
return [block("hardware_arduino_digital_write", func.lineno, {}, {
'SUB':s4ablock,
"PIN": pinblock,
"STAT": argblock
}, {
"inline": "true"
})];
}
pbc.objectFunctionD.get('digital_read')['s4a'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length !== 1) {
throw new Error("Incorrect number of arguments");
}
pbc.pinType = "pins_digital_read";
var pinblock = py2block.convert(args[0]);
pbc.pinType = null;
var s4ablock=py2block.convert(func.value);
return block("hardware_arduino_digital_read", func.lineno, {}, {
'SUB':s4ablock,
"PIN": pinblock,
}, {
"inline": "true"
});
}
pbc.objectFunctionD.get('analog_write')['s4a'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length !== 2) {
throw new Error("Incorrect number of arguments");
}
pbc.pinType = "pins_analog_write";
var pinblock = py2block.convert(args[0]);
pbc.pinType = null;
var argblock = py2block.convert(args[1]);
var s4ablock=py2block.convert(func.value);
return [block("hardware_arduino_analog_write", func.lineno, {}, {
'SUB':s4ablock,
"PIN": pinblock,
"NUM": argblock
}, {
"inline": "true"
})];
}
pbc.objectFunctionD.get('analog_read')['s4a'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length !== 1) {
throw new Error("Incorrect number of arguments");
}
pbc.pinType = "pins_analog_read";
var pinblock = py2block.convert(args[0]);
pbc.pinType = null;
var s4ablock=py2block.convert(func.value);
return block("hardware_arduino_analog_read", func.lineno, {}, {
'SUB':s4ablock,
"PIN": pinblock,
}, {
"inline": "true"
});
}

View File

@@ -0,0 +1,98 @@
'use strict';
pbc.globalFunctionD['input'] = function(py2block, func, args, keywords, starargs, kwargs, node){
if (args.length !== 1 && args.length !== 0) {
throw new Error("Incorrect number of arguments");
}
if (args.length == 1){
var argblock = py2block.convert(args[0]);
return block("inout_type_input", func.lineno, {
"DIR":"str"
}, {
'VAR':argblock
}, {
"inline": "true"
});}
if (args.length == 0){
return block("inout_type_input", func.lineno, {
"DIR":"str"
}, {
//'VAR':argblock
}, {
"inline": "true"
});}
}
pbc.moduleFunctionD.get('pyinput')['input'] = function(py2block, func, args, keywords, starargs, kwargs, node){
if (args.length !== 1 && args.length !== 0) {
throw new Error("Incorrect number of arguments");
}
if (args.length == 1){
var argblock = py2block.convert(args[0]);
return block("inout_type_input", func.lineno, {
"DIR":"str"
}, {
'VAR':argblock
}, {
"inline": "true"
});}
if (args.length == 0){
return block("inout_type_input", func.lineno, {
"DIR":"str"
}, {
//'VAR':argblock
}, {
"inline": "true"
});}
}
//int(input('prompt'))在math.js中实现
//float(input('prompt'))在lists.js中实现
pbc.globalFunctionD['print'] = function(py2block, func, args, keywords, starargs, kwargs, node){
if (args.length === 1 && keywords.length === 1
&& py2block.identifier(keywords[0].arg) === "end"
&& keywords[0].value._astname === "Str"
//&& py2block.Str_value(keywords[0].value) === ""
) { if(py2block.Str_value(keywords[0].value) === ""){//print('Hello',end ="")
var argblock = py2block.convert(args[0]);
return [block("inout_print_inline", func.lineno, {}, {
'VAR':argblock
}, {
"inline": "false"
})];
}
else{
var argblock = py2block.convert(args[0]);
return [block("inout_print_end", func.lineno, {
}, {
'VAR':argblock,
'END':py2block.convert(keywords[0].value)
}, {
"inline": "true"
})];
}
}else if (args.length === 1 && keywords.length === 0) { //print('Hello')
var argblock = py2block.convert(args[0]);
return [block("inout_print", func.lineno, {}, {
'VAR':argblock
}, {
"inline": "false"
})];
}else if (args.length != 1 && keywords.length === 0) { //print()
var d = py2block.convertElements("ADD", args);
return [block("inout_print_many", node.lineno, {
}, d, {
"inline": "true",
}, {
"@items":args.length
})];
}else{
throw new Error("Incorrect number of arguments");
}
}

View File

@@ -0,0 +1,162 @@
'use strict';
var mqtt_client = 'mixiot.MixIO';
pbc.assignD.get('from_mixly_key')['check_assign'] = function(py2block, node, targets, value) {
if(value._astname != "Call" || value.func._astname != "Attribute" || value.func.value._astname != "Attribute"){
return false;
}
var funcName = py2block.identifier(value.func.attr);
var moduleName = py2block.identifier(value.func.value.attr);
if(moduleName === "MixIO" && funcName === "from_mixly_key" && value.args.length === 4)
return true;
return false;
}
pbc.assignD.get('from_mixly_key')['create_block'] = function(py2block, node, targets, value){
var arg0block = py2block.convert(value.args[0]);
var arg2block = py2block.convert(value.args[2]);
return block("IOT_EMQX_INIT_AND_CONNECT_BY_MIXLY_CODE", node.lineno, {}, {
'SERVER': arg0block,
'KEY':arg2block,
});
}
pbc.assignD.get('from_share_key')['check_assign'] = function(py2block, node, targets, value) {
if(value._astname != "Call" || value.func._astname != "Attribute" || value.func.value._astname != "Attribute"){
return false;
}
var funcName = py2block.identifier(value.func.attr);
var moduleName = py2block.identifier(value.func.value.attr);
if(moduleName === "MixIO" && funcName === "from_share_key" && value.args.length === 4)
return true;
return false;
}
pbc.assignD.get('from_share_key')['create_block'] = function(py2block, node, targets, value){
var arg0block = py2block.convert(value.args[0]);
var arg2block = py2block.convert(value.args[2]);
return block("IOT_EMQX_INIT_AND_CONNECT_BY_SHARE_CODE", node.lineno, {}, {
'SERVER': arg0block,
'KEY':arg2block,
});
}
pbc.assignD.get('MixIO')['check_assign'] = function(py2block, node, targets, value) {
if(value._astname != "Call" || value.func._astname != "Attribute" || value.func.value._astname != "Name"){
return false;
}
var funcName = py2block.identifier(value.func.attr);
var moduleName = py2block.Name_str(value.func.value);
if(moduleName === "mixiot" && funcName === "MixIO" && value.args.length === 6)
return true;
return false;
}
pbc.assignD.get('MixIO')['create_block'] = function(py2block, node, targets, value){
var arg0block = py2block.convert(value.args[0]);
var arg2block = py2block.convert(value.args[2]);
var arg3block = py2block.convert(value.args[3]);
var arg4block = py2block.convert(value.args[4]);
return block("iot_mixio_connect", node.lineno, {}, {
'SERVER': arg0block,
'USERNAME':arg2block,
'PASSWORD': arg3block,
'PROJECT':arg4block
});
}
pbc.objectFunctionD.get('publish')[mqtt_client] = function (py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length != 2) {
throw new Error("Incorrect number of arguments");
}
var argblock = py2block.convert(args[0]);
var arg1block = py2block.convert(args[1]);
return [block('IOT_MIXIO_PUBLISH', func.lineno, {}, {
'TOPIC': argblock,
'MSG': arg1block
}, {
"inline": "true"
})];
}
pbc.objectFunctionD.get('unsubscribe')[mqtt_client] = function (py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length != 1) {
throw new Error("Incorrect number of arguments");
}
var argblock = py2block.convert(args[0]);
return [block('IOT_MIXIO_UNSUBSCRIBE', func.lineno, {}, {
'TOPIC': argblock
}, {
"inline": "true"
})];
}
pbc.objectFunctionD.get('subscribe_and_set_callback')[mqtt_client] = function (py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length != 2) {
throw new Error("Incorrect number of arguments");
}
var argblock = py2block.convert(args[0]);
var arg1block = py2block.convert(args[1]);
return [block('IOT_MIXIO_SUBSCRIBE', func.lineno, {}, {
'TOPIC': argblock,
'METHOD': arg1block
}, {
"inline": "true"
})];
}
pbc.objectFunctionD.get('check_msg')[mqtt_client] = function (py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length != 0) {
throw new Error("Incorrect number of arguments");
}
return [block('iot_mixio_check', func.lineno, {}, {}, {
"inline": "true"
})];
}
pbc.objectFunctionD.get('connect')[mqtt_client] = function (py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length != 0) {
throw new Error("Incorrect number of arguments");
}
return [block('iot_mixio_connect_only', func.lineno, {}, {}, {
"inline": "true"
})];
}
pbc.objectFunctionD.get('disconnect')[mqtt_client] = function (py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length != 0) {
throw new Error("Incorrect number of arguments");
}
return [block('iot_mixio_disconnect', func.lineno, {}, {}, {
"inline": "true"
})];
}
pbc.moduleFunctionD.get('mixpy')['format_content'] = function(py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length != 2) {
throw new Error("Incorrect number of arguments");
}
var argblock = py2block.convert(args[0]);
return block('IOT_FORMATTING', func.lineno, {}, {
'VAR': argblock,
}, {
"inline": "true"
});
}
pbc.moduleFunctionD.get('mixpy')['format_str'] = function(py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length != 1) {
throw new Error("Incorrect number of arguments");
}
var argblock = py2block.convert(args[0]);
return block('IOT_FORMAT_STRING', func.lineno, {}, {
'VAR': argblock,
}, {
"inline": "true"
});
}

View File

@@ -0,0 +1,82 @@
function defDict(type) {
var dict = {};
return {
get: function (key) {
if (!dict[key]) {
dict[key] = type.constructor();
}
return dict[key];
},
dict: dict
};
}
function Py2blockConfig (){
this.initIgnoreS();
this.initModuleAttrD();
this.initKnownModuleS();
this.initObjectTypeD();
}
var pbc = Py2blockConfig.prototype;
pbc.MIXPY = "MIXPY";
pbc.board = pbc.MIXPY;
pbc.objectFunctionD = defDict({});
pbc.moduleFunctionD = defDict({});
pbc.moduleAttrD = defDict({});
pbc.objectAttrD = defDict({});
pbc.globalFunctionD = {};
pbc.assignD = defDict({});
pbc.ifStatementD= defDict({});
pbc.whileStatementD= defDict({});
pbc.forStatementD= defDict({});
pbc.reservedNameD= {};
pbc.knownModuleS = new Set();
pbc.objectTypeD = {}; //key变量名value变量类型如{'a':'List'}
pbc.ignoreS = new Set();
pbc.pinType = null;
pbc.inScope = null;
pbc.formatModuleKeyL = [];
pbc.formatModuleL = [];
//忽略某些方法、类、赋值
pbc.initIgnoreS = function(){
var pythonIgnoreL = [
];
var boardIgnoreL = [];
var ignoreL = pythonIgnoreL.concat(boardIgnoreL);
for (var i = 0; i < ignoreL.length; i++) {
this.ignoreS.add(ignoreL[i]);
}
}
pbc.initModuleAttrD = function(){
}
pbc.initKnownModuleS = function(){
var pythonModuleL = [
'math', 'random'
];
var boardModuleL = [];
var moduleL = pythonModuleL.concat(boardModuleL);
for (var i = 0; i < moduleL.length; i++) {
this.knownModuleS.add(moduleL[i]);
}
}
pbc.initObjectTypeD = function () {
this.objectTypeD = {
'tina': 'turtle.Turtle',
'f': 'open'
}
}
pbc.reset = function(){
this.initObjectTypeD();
}
var py2block_config = new Py2blockConfig();

View File

@@ -0,0 +1,75 @@
'use strict';
var serialClass = 'serial.Serial';
pbc.assignD.get('Serial')['check_assign'] = function (py2block, node, targets, value) {
if(value.func._astname != "Attribute" || value.func.value._astname != "Name"){
return false;
}
var moduleName = py2block.Name_str(value.func.value);
var funcName = py2block.identifier(value.func.attr);
if (value._astname === "Call" && moduleName === "serial"
&& funcName === "Serial" && value.args.length === 2 && value.keywords.length === 1)
return true;
return false;
}
pbc.assignD.get('Serial')['create_block'] = function (py2block, node, targets, value) {
var ser = py2block.Name_str(node.targets[0]);
if(value.keywords[0].arg.v == 'timeout')
{return block('serial_open', node.lineno, {
'SER': ser,
'BPS':value.args[1].n.v.toString()
}, {
"VAR":py2block.convert(value.keywords[0].value)
});}
}
pbc.objectFunctionD.get('close')[serialClass] = function(py2block, func, args, keywords, starargs, kwargs, node){
if (args.length !== 0) {
throw new Error("Incorrect number of arguments");
}
var fileblock = py2block.convert(func.value);
return [block("serial_close", func.lineno, {}, {
"SER" : fileblock
}, {
"inline": "true"
})];
}
pbc.objectFunctionD.get('write')[serialClass] = function(py2block, func, args, keywords, starargs, kwargs, node){
if (args.length !== 1) {
throw new Error("Incorrect number of arguments");
}
var fileblock = py2block.convert(func.value);
return [block("serial_write", func.lineno, {}, {
"SER" : fileblock,
'VAR' : py2block.convert(args[0])
}, {
"inline": "true"
})];
}
pbc.objectFunctionD.get('read')[serialClass] = function(py2block, func, args, keywords, starargs, kwargs, node){
if (args.length !== 1) {
throw new Error("Incorrect number of arguments");
}
var fileblock = py2block.convert(func.value);
return block("serial_read_b", func.lineno, {}, {
"SER" : fileblock,
'VAR' : py2block.convert(args[0])
}, {
"inline": "true"
});
}
pbc.objectFunctionD.get('decode')['List'] = function(py2block, func, args, keywords, starargs, kwargs, node){
if (args.length !== 0) {
throw new Error("Incorrect number of arguments");
}
return [block("lists_insert_value", func.lineno, {}, {
}, {
"inline": "true"
})];
};

View File

@@ -0,0 +1,598 @@
'use strict';
//sklearn 生成分类样本
pbc.globalFunctionD['make_classification'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length === 0 && keywords.length === 8) {
var key1block = py2block.convert(keywords[0].value);
var key2block = py2block.convert(keywords[1].value);
var key3block = py2block.convert(keywords[2].value);
var key4block = py2block.convert(keywords[3].value);
var key5block = py2block.convert(keywords[4].value);
var key6block = py2block.convert(keywords[5].value);
var key7block = py2block.convert(keywords[6].value);
var key8block = py2block.convert(keywords[7].value);
return block("sklearn_make_classification", func.lineno, {}, {
"n_samples": key1block,
"n_features": key2block,
"n_informative": key3block,
"n_redundant": key4block,
"n_repeated": key5block,
"n_classes": key6block,
"n_clusters_per_class": key7block,
"random_state": key8block
}, {
"inline": "false"
});
}
else
{
throw new Error("Incorrect number of arguments");
}
}
//sklearn 生成回归样本
pbc.globalFunctionD['make_regression'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length === 0 && keywords.length === 7) {
var key1block = py2block.convert(keywords[0].value);
var key2block = py2block.convert(keywords[1].value);
var key3block = py2block.convert(keywords[2].value);
var key4block = py2block.convert(keywords[3].value);
var key5block = py2block.convert(keywords[4].value);
var key6block = py2block.convert(keywords[5].value);
var key7block = py2block.convert(keywords[6].value);
return block("sklearn_make_regression", func.lineno, {}, {
"n_samples": key1block,
"n_features": key2block,
"n_informative": key3block,
"n_targets": key4block,
"bias": key5block,
"noise": key6block,
"random_state": key7block
}, {
"inline": "false"
});
}
else
{
throw new Error("Incorrect number of arguments");
}
}
//sklearn 生成聚类样本
pbc.globalFunctionD['make_blobs'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length === 0 && keywords.length === 7) {
var key1block = py2block.convert(keywords[0].value);
var key2block = py2block.convert(keywords[1].value);
var key3block = py2block.convert(keywords[2].value);
var key4block = py2block.convert(keywords[3].value);
var key5block = py2block.convert(keywords[4].value);
var key6block = py2block.convert(keywords[5].value);
var key7block = py2block.convert(keywords[6].value);
return block("sklearn_make_blobs", func.lineno, {}, {
"n_samples": key1block,
"n_features": key2block,
"centers": key3block,
"cluster_std": key4block,
"center_box": key5block,
"shuffle": key6block,
"random_state": key7block
}, {
"inline": "false"
});
}
else
{
throw new Error("Incorrect number of arguments");
}
}
//sklearn 加载数据集
function sklearn_load_check_assign(mode){
function converter(py2block, node, targets, value) {
if(value.func._astname != "Attribute" || value.func.value._astname != "Name"){
return false;
}
var moduleName = py2block.Name_str(value.func.value);
var funcName = py2block.identifier(value.func.attr);
value.args = value.args || [];
if (value._astname === "Call" && moduleName === "datasets"
&& funcName === mode && !value.args.length)
return true;
return false;
}
return converter;
}
function sklearn_load_create_block(){
function converter(py2block, node, targets, value) {
var name = py2block.Name_str(node.targets[0]);
var type = py2block.identifier(value.func.attr);
//注意:赋值语句里,即使图形块上下可接,也不需要加[]
return block('sklearn_load', node.lineno, {
"name": name,
"type": type
}, {});
}
return converter;
}
pbc.assignD.get('load_iris')['check_assign'] = sklearn_load_check_assign('load_iris');
pbc.assignD.get('load_boston')['check_assign'] = sklearn_load_check_assign('load_boston');
pbc.assignD.get('load_diabetes')['check_assign'] = sklearn_load_check_assign('load_diabetes');
pbc.assignD.get('load_breast_cancer')['check_assign'] = sklearn_load_check_assign('load_breast_cancer');
pbc.assignD.get('load_linnerud')['check_assign'] = sklearn_load_check_assign('load_linnerud');
pbc.assignD.get('load_digits')['check_assign'] = sklearn_load_check_assign('load_digits');
pbc.assignD.get('load_iris')['create_block'] = sklearn_load_create_block();
pbc.assignD.get('load_boston')['create_block'] = sklearn_load_create_block();
pbc.assignD.get('load_diabetes')['create_block'] = sklearn_load_create_block();
pbc.assignD.get('load_breast_cancer')['create_block'] = sklearn_load_create_block();
pbc.assignD.get('load_linnerud')['create_block'] = sklearn_load_create_block();
pbc.assignD.get('load_digits')['create_block'] = sklearn_load_create_block();
//sklearn 获取特征值/标签值/标签/特征
function sklearn_data_target(py2block, node, value, attr) {
return block('sklearn_data_target', node.lineno, {
"type": py2block.identifier(attr)
}, {
"name": py2block.convert(value)
});
}
pbc.objectAttrD.get('data')['sklearn.datasets'] = sklearn_data_target;
pbc.objectAttrD.get('target')['sklearn.datasets'] = sklearn_data_target;
pbc.objectAttrD.get('target_names')['sklearn.datasets'] = sklearn_data_target;
pbc.objectAttrD.get('feature_names')['sklearn.datasets'] = sklearn_data_target;
//sklearn 数据集分割
pbc.globalFunctionD['train_test_split'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length === 2) {
var arg1block = py2block.convert(args[0]);
var arg2block = py2block.convert(args[1]);
var key1block = py2block.convert(keywords[0].value);
var key2block = py2block.convert(keywords[1].value);
return block("sklearn_train_test_split", func.lineno, {}, {
"train_data": arg1block,
"train_target": arg2block,
"test_size": key1block,
"rondom_state": key2block,
}, {
"inline": "false"
});
}
else if(args.length === 1)
{
var arg1block = py2block.convert(args[0]);
var key1block = py2block.convert(keywords[0].value);
var key2block = py2block.convert(keywords[1].value);
return block("sklearn_train_test_split_no_target", func.lineno, {}, {
"train_data": arg1block,
"test_size": key1block,
"rondom_state": key2block,
}, {
"inline": "false"
});
}
else
{
throw new Error("Incorrect number of arguments");
}
}
//sklearn 初始化线性回归
pbc.assignD.get('LinearRegression')['check_assign'] = function(py2block, node, targets, value) {
if(value._astname != "Call" || value.func._astname != "Name"){
return false;
}
var funcName = value.func.id.v;
value.args = value.args || [];
if(funcName === "LinearRegression" && !value.args.length)
return true;
return false;
}
pbc.assignD.get('LinearRegression')['create_block'] = function(py2block, node, targets, value){
var name = py2block.convert(node.targets[0]);
var key1block = py2block.convert(value.keywords[0].value);
var key2block = py2block.convert(value.keywords[1].value);
var key3block = py2block.convert(value.keywords[2].value);
return block("sklearn_LinearRegression", node.lineno, {}, {
"model_name": name,
"fit_intercept": key1block,
"normalize": key2block,
"n_jobs": key3block
});
}
//sklearn 初始化岭回归
pbc.assignD.get('Ridge')['check_assign'] = function(py2block, node, targets, value) {
if(value._astname != "Call" || value.func._astname != "Name"){
return false;
}
var funcName = value.func.id.v;
value.args = value.args || [];
if(funcName === "Ridge" && !value.args.length)
return true;
return false;
}
pbc.assignD.get('Ridge')['create_block'] = function(py2block, node, targets, value){
var name = py2block.convert(node.targets[0]);
var key1block = py2block.convert(value.keywords[0].value);
var key2block = py2block.convert(value.keywords[1].value);
var key3block = py2block.convert(value.keywords[2].value);
var key4block = py2block.convert(value.keywords[3].value);
var key5block = py2block.convert(value.keywords[4].value);
return block("sklearn_Ridge", node.lineno, {}, {
"model_name": name,
"alpha": key1block,
"fit_intercept": key2block,
"normalize": key3block,
"max_iter": key4block,
"random_state": key5block
});
}
//sklearn 初始化决策树 分类算法
pbc.assignD.get('DecisionTreeClassifier')['check_assign'] = function(py2block, node, targets, value) {
if(value._astname != "Call" || value.func._astname != "Name"){
return false;
}
var funcName = value.func.id.v;
value.args = value.args || [];
if(funcName === "DecisionTreeClassifier" && !value.args.length)
return true;
return false;
}
pbc.assignD.get('DecisionTreeClassifier')['create_block'] = function(py2block, node, targets, value){
var name = py2block.convert(node.targets[0]);
var key1block = py2block.convert(value.keywords[0].value);
var key2block = py2block.convert(value.keywords[1].value);
return block("sklearn_DecisionTreeClassifier_Regressor", node.lineno, {
"type": "DecisionTreeClassifier"
}, {
"model_name": name,
"max_depth": key1block,
"random_state": key2block
});
}
//sklearn 初始化决策树 回归算法
pbc.assignD.get('DecisionTreeRegressor')['check_assign'] = function(py2block, node, targets, value) {
if(value._astname != "Call" || value.func._astname != "Name"){
return false;
}
var funcName = value.func.id.v;
value.args = value.args || [];
if(funcName === "DecisionTreeRegressor" && !value.args.length)
return true;
return false;
}
pbc.assignD.get('DecisionTreeRegressor')['create_block'] = function(py2block, node, targets, value){
var name = py2block.convert(node.targets[0]);
var key1block = py2block.convert(value.keywords[0].value);
var key2block = py2block.convert(value.keywords[1].value);
return block("sklearn_DecisionTreeClassifier_Regressor", node.lineno, {
"type": "DecisionTreeRegressor"
}, {
"model_name": name,
"max_depth": key1block,
"random_state": key2block
});
}
//sklearn 初始化随机森林 分类算法
pbc.assignD.get('RandomForestClassifier')['check_assign'] = function(py2block, node, targets, value) {
if(value._astname != "Call" || value.func._astname != "Name"){
return false;
}
var funcName = value.func.id.v;
value.args = value.args || [];
if(funcName === "RandomForestClassifier" && !value.args.length)
return true;
return false;
}
pbc.assignD.get('RandomForestClassifier')['create_block'] = function(py2block, node, targets, value){
var name = py2block.convert(node.targets[0]);
var key1block = py2block.convert(value.keywords[0].value);
var key2block = py2block.convert(value.keywords[1].value);
var key3block = py2block.convert(value.keywords[2].value);
var key4block = py2block.convert(value.keywords[3].value);
return block("sklearn_RandomForestClassifier_Regressor", node.lineno, {
"type": "RandomForestClassifier"
}, {
"model_name": name,
"n_estimators": key1block,
"max_depth": key2block,
"n_jobs": key3block,
"random_state": key4block
});
}
//sklearn 初始化随机森林 回归算法
pbc.assignD.get('RandomForestRegressor')['check_assign'] = function(py2block, node, targets, value) {
if(value._astname != "Call" || value.func._astname != "Name"){
return false;
}
var funcName = value.func.id.v;
value.args = value.args || [];
if(funcName === "RandomForestRegressor" && !value.args.length)
return true;
return false;
}
pbc.assignD.get('RandomForestRegressor')['create_block'] = function(py2block, node, targets, value){
var name = py2block.convert(node.targets[0]);
var key1block = py2block.convert(value.keywords[0].value);
var key2block = py2block.convert(value.keywords[1].value);
var key3block = py2block.convert(value.keywords[2].value);
var key4block = py2block.convert(value.keywords[3].value);
return block("sklearn_RandomForestClassifier_Regressor", node.lineno, {
"type": "RandomForestRegressor"
}, {
"model_name": name,
"n_estimators": key1block,
"max_depth": key2block,
"n_jobs": key3block,
"random_state": key4block
});
}
//sklearn 初始化K近邻 分类算法
pbc.assignD.get('KNeighborsClassifier')['check_assign'] = function(py2block, node, targets, value) {
if(value._astname != "Call" || value.func._astname != "Name"){
return false;
}
var funcName = value.func.id.v;
value.args = value.args || [];
if(funcName === "KNeighborsClassifier" && !value.args.length)
return true;
return false;
}
pbc.assignD.get('KNeighborsClassifier')['create_block'] = function(py2block, node, targets, value){
var name = py2block.convert(node.targets[0]);
var key1block = py2block.convert(value.keywords[0].value);
var key2block = py2block.convert(value.keywords[1].value);
return block("sklearn_KNeighborsClassifier_Regressor", node.lineno, {
"type": "KNeighborsClassifier"
}, {
"model_name": name,
"K": key1block,
"n_jobs": key2block
});
}
//sklearn 初始化K近邻 回归算法
pbc.assignD.get('KNeighborsRegressor')['check_assign'] = function(py2block, node, targets, value) {
if(value._astname != "Call" || value.func._astname != "Name"){
return false;
}
var funcName = value.func.id.v;
value.args = value.args || [];
if(funcName === "KNeighborsRegressor" && !value.args.length)
return true;
return false;
}
pbc.assignD.get('KNeighborsRegressor')['create_block'] = function(py2block, node, targets, value){
var name = py2block.convert(node.targets[0]);
var key1block = py2block.convert(value.keywords[0].value);
var key2block = py2block.convert(value.keywords[1].value);
return block("sklearn_KNeighborsClassifier_Regressor", node.lineno, {
"type": "KNeighborsRegressor"
}, {
"model_name": name,
"K": key1block,
"n_jobs": key2block
});
}
//sklearn 初始化高斯贝叶斯分类算法
pbc.assignD.get('GaussianNB')['check_assign'] = function(py2block, node, targets, value) {
if(value._astname != "Call" || value.func._astname != "Name"){
return false;
}
var funcName = value.func.id.v;
value.args = value.args || [];
if(funcName === "GaussianNB" && !value.args.length)
return true;
return false;
}
pbc.assignD.get('GaussianNB')['create_block'] = function(py2block, node, targets, value){
var name = py2block.convert(node.targets[0]);
return block("sklearn_GaussianNB", node.lineno, {}, {
"model_name": name
});
}
//sklearn 初始K-均值聚类
pbc.assignD.get('KMeans')['check_assign'] = function(py2block, node, targets, value) {
if(value._astname != "Call" || value.func._astname != "Name"){
return false;
}
var funcName = value.func.id.v;
value.args = value.args || [];
if(funcName === "KMeans" && !value.args.length)
return true;
return false;
}
pbc.assignD.get('KMeans')['create_block'] = function(py2block, node, targets, value){
var name = py2block.convert(node.targets[0]);
var key1block = py2block.convert(value.keywords[0].value);
var key2block = py2block.convert(value.keywords[1].value);
var key3block = py2block.convert(value.keywords[2].value);
var key4block = py2block.convert(value.keywords[3].value);
return block("sklearn_KMeans", node.lineno, {}, {
"model_name": name,
"n_clusters": key1block,
"max_iter": key2block,
"random_state": key3block,
"n_jobs": key4block
});
}
//sklearn 训练模型
function sklearn_fit(){
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
if(args.length === 1) {
var objblock = py2block.convert(func.value);
var argblock1 = py2block.convert(args[0]);
return [block("sklearn_fit_no_target", func.lineno, {}, {
"model_name": objblock,
"train_data": argblock1
}, {
"inline": "true"
})];
}
else if(args.length === 2) {
var objblock = py2block.convert(func.value);
var argblock1 = py2block.convert(args[0]);
var argblock2 = py2block.convert(args[1]);
return [block("sklearn_fit", func.lineno, {
}, {
"model_name": objblock,
"train_data": argblock1,
"train_target": argblock2
}, {
"inline": "true"
})];
}
else
{
throw new Error("Incorrect number of arguments");
}
}
return converter;
}
pbc.objectFunctionD.get('fit')['sklearn.fit'] = sklearn_fit();
//sklearn 模型预测
function sklearn_predict(){
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
if(args.length === 1)
{
var objblock = py2block.convert(func.value);
var argblock1 = py2block.convert(args[0]);
return block("sklearn_predict", func.lineno, {
}, {
"model_name": objblock,
"train_data": argblock1
}, {
"inline": "true"
});
}
else
{
throw new Error("Incorrect number of arguments");
}
}
return converter;
}
pbc.objectFunctionD.get('predict')['sklearn'] = sklearn_predict();
//sklearn 计算模型得分
function sklearn_score(){
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length === 2) {
var objblock = py2block.convert(func.value);
var argblock1 = py2block.convert(args[0]);
var argblock2 = py2block.convert(args[1]);
return block("sklearn_score", func.lineno, {}, {
"model_name": objblock,
"train_data": argblock1,
"train_target": argblock2
}, {
"inline": "true"
});
}
else if(args.length === 1)
{
var objblock = py2block.convert(func.value);
var argblock1 = py2block.convert(args[0]);
return block("sklearn_score_no_target", func.lineno, {}, {
"model_name": objblock,
"train_data": argblock1
}, {
"inline": "true"
});
}
else
{
throw new Error("Incorrect number of arguments");
}
}
return converter;
}
pbc.objectFunctionD.get('score')['sklearn'] = sklearn_score();
//sklearn 线性回归 模型获取 斜率/截距
function sklearn_coef_intercept(py2block, node, value, attr) {
return block('sklearn_coef_intercept', node.lineno, {
"type": py2block.identifier(attr)
}, {
"model_name": py2block.convert(value)
});
}
pbc.objectAttrD.get('coef_')['sklearn.linear_model'] = sklearn_coef_intercept;
pbc.objectAttrD.get('intercept_')['sklearn.linear_model'] = sklearn_coef_intercept;
//sklearn K-均值聚类 模型获取 簇中心坐标/聚类后的标签/所有点到对应簇中心的距离平方和
function sklearn_cluster_centers_labels_inertia(py2block, node, value, attr) {
return block('sklearn_cluster_centers_labels_inertia', node.lineno, {
"type": py2block.identifier(attr)
}, {
"model_name": py2block.convert(value)
});
}
pbc.objectAttrD.get('cluster_centers_')['sklearn.cluster'] = sklearn_cluster_centers_labels_inertia;
pbc.objectAttrD.get('labels_')['sklearn.cluster'] = sklearn_cluster_centers_labels_inertia;
pbc.objectAttrD.get('inertia_')['sklearn.cluster'] = sklearn_cluster_centers_labels_inertia;
//sklearn 保存模型
function sklearn_save_model(){
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
if(args.length === 2) {
var argblock1 = py2block.convert(args[0]);
var argblock2 = py2block.convert(args[1]);
var funcName = func.attr.v;
return [block("sklearn_save_load_model", func.lineno, {
"type" : funcName
}, {
"model_name": argblock1,
"address": argblock2
}, {
"inline": "true"
})];
}
else
{
throw new Error("Incorrect number of arguments");
}
}
return converter;
}
pbc.objectFunctionD.get('dump')['sklearn.externals'] = sklearn_save_model();
//sklearn 加载模型
pbc.assignD.get('load')['check_assign'] = function(py2block, node, targets, value) {
if(value._astname != "Call" || value.func._astname != "Attribute"){
return false;
}
var funcName = value.func.attr.v;
if(funcName === "load" && value.args.length === 1)
return true;
return false;
}
pbc.assignD.get('load')['create_block'] = function(py2block, node, targets, value){
var name = py2block.convert(node.targets[0]);
var key1block = py2block.convert(value.args[0]);
var funcName = value.func.attr.v;
return block("sklearn_save_load_model", node.lineno, {
"type" : funcName
}, {
"model_name" : name,
"address" : key1block
});
}

View File

@@ -0,0 +1,45 @@
'use strict';
pbc.globalFunctionD['exit'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length != 0) {
throw new Error("Incorrect number of arguments");
}
return [block("controls_end_program", func.lineno, {}, {}, {
"inline": "true"
})];
}
pbc.moduleFunctionD.get('time')['time'] = function(py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length != 0) {
throw new Error("Incorrect number of arguments");
}
return block("controls_millis", func.lineno, {}, {}, {
"inline": "true"
});
}
pbc.moduleFunctionD.get('time')['localtime'] = function(py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length != 0) {
throw new Error("Incorrect number of arguments");
}
return block("time_localtime", func.lineno, {
"op":'all'
}, {}, {
"inline": "true"
});
}
pbc.moduleFunctionD.get('time')['sleep'] = function(py2block, func, args, keywords, starargs, kwargs, node) {
if (args.length != 1) {
throw new Error("Incorrect number of arguments");
}
var argblock = py2block.convert(args[0]);
return [block("time_sleep", func.lineno, {}, {
"DELAY_TIME":argblock
}, {
"inline": "true"
})];
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,211 @@
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(1)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/inout.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(1)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/inout2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(2)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/ctrl.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(2)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/ctrl2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(3)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/math.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(3)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/math2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(4)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/logic.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(4)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/logic2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(5)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/text.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(5)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/text2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(6)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/list3.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(6)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/list4.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(7)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/tuple.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(7)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/tuple2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(8)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/dict.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(8)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/dict2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(9)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/set.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(9)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/set2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(10)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/var.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(10)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/var2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(11)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/func.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(11)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/func2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(12)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/file.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(12)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/file2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(13)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/requests.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(13)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/requests2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(14)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/mixio.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(14)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/mixio2.png') no-repeat;
background-size: 100% auto;
}
#catMixIO.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/mixio.png') no-repeat;
background-size: 100% auto;
}
#catMixIO.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/mixio2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(15)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/turtle.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(15)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/turtle2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(16)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/ai.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(16)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/ai2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(17)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/data.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(17)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/data2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(18)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/cv.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(18)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/cv2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(19)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/algorithm.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(19)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/algorithm2.png') no-repeat;
background-size: 100% auto;
}
#catFactory.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/factory3.png') no-repeat;
background-size: 100% auto;
}
#catFactory.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/factory4.png') no-repeat;
background-size: 100% auto;
}

View File

@@ -0,0 +1,64 @@
import * as PythonMixpyAIBlocks from './blocks/ai';
import * as PythonMixpyAlgorithmBlocks from './blocks/algorithm';
import * as PythonMixpyCommunicateBlocks from './blocks/communicate';
import * as PythonMixpyCVBlocks from './blocks/cv';
import * as PythonMixpyDataBlocks from './blocks/data';
import * as PythonMixpyDatastructureBlocks from './blocks/datastructure';
import * as PythonMixpyFactoryBlocks from './blocks/factory';
import * as PythonMixpyHardwareBlocks from './blocks/hardware';
import * as PythonMixpyInoutBlocks from './blocks/inout';
import * as PythonMixpyIOTBlocks from './blocks/iot';
import * as PythonMixpyPinsBlocks from './blocks/pins';
import * as PythonMixpySerialBlocks from './blocks/serial';
import * as PythonMixpySKLearnBlocks from './blocks/sklearn';
import * as PythonMixpySystemBlocks from './blocks/system';
import * as PythonMixpyTurtleBlocks from './blocks/turtle';
import * as PythonMixpyAIGenerators from './generators/ai';
import * as PythonMixpyAlgorithmGenerators from './generators/algorithm';
import * as PythonMixpyCommunicateGenerators from './generators/communicate';
import * as PythonMixpyCVGenerators from './generators/cv';
import * as PythonMixpyDataGenerators from './generators/data';
import * as PythonMixpyDatastructureGenerators from './generators/datastructure';
import * as PythonMixpyFactoryGenerators from './generators/factory';
import * as PythonMixpyHardwareGenerators from './generators/hardware';
import * as PythonMixpyInoutGenerators from './generators/inout';
import * as PythonMixpyIOTGenerators from './generators/iot';
import * as PythonMixpyPinsGenerators from './generators/pins';
import * as PythonMixpySerialGenerators from './generators/serial';
import * as PythonMixpySKLearnGenerators from './generators/sklearn';
import * as PythonMixpySystemGenerators from './generators/system';
import * as PythonMixpyTurtleGenerators from './generators/turtle';
export {
PythonMixpyAIBlocks,
PythonMixpyAlgorithmBlocks,
PythonMixpyCommunicateBlocks,
PythonMixpyCVBlocks,
PythonMixpyDataBlocks,
PythonMixpyDatastructureBlocks,
PythonMixpyFactoryBlocks,
PythonMixpyHardwareBlocks,
PythonMixpyInoutBlocks,
PythonMixpyIOTBlocks,
PythonMixpyPinsBlocks,
PythonMixpySerialBlocks,
PythonMixpySKLearnBlocks,
PythonMixpySystemBlocks,
PythonMixpyTurtleBlocks,
PythonMixpyAIGenerators,
PythonMixpyAlgorithmGenerators,
PythonMixpyCommunicateGenerators,
PythonMixpyCVGenerators,
PythonMixpyDataGenerators,
PythonMixpyDatastructureGenerators,
PythonMixpyFactoryGenerators,
PythonMixpyHardwareGenerators,
PythonMixpyInoutGenerators,
PythonMixpyIOTGenerators,
PythonMixpyPinsGenerators,
PythonMixpySerialGenerators,
PythonMixpySKLearnGenerators,
PythonMixpySystemGenerators,
PythonMixpyTurtleGenerators
};

View File

@@ -0,0 +1,163 @@
export const AI_ChooseAndGet = function (_, generator) {
var type = this.getFieldValue('TYPE');
generator.definitions_['import_FileDialog'] = 'import FileDialog';
var code = 'FileDialog.' + type + '()';
return [code, generator.ORDER_ATOMIC];
}
export const AI_client = function (_, generator) {
var ctype = this.getFieldValue('CTYPE');
generator.definitions_['import_aip'] = 'import aip';
//generator.definitions_['import_aip_' + ctype] = 'from aip import '+ ctype;
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var api_key = generator.valueToCode(this, 'API_KEY', generator.ORDER_ATOMIC);
var secret_key = generator.valueToCode(this, 'SECRET_KEY', generator.ORDER_ATOMIC);
var code = v + ' = ' + 'aip.' + ctype + '(' + api_key + ', ' + secret_key + ')\n';
return code;
}
export const AI_Speech_synthesis = function (_, generator) {
generator.definitions_['import_aip'] = 'import aip';
//generator.definitions_['import_aip_AipSpeech'] = 'from aip import AipSpeech';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var s = generator.valueToCode(this, 'STR', generator.ORDER_ATOMIC);
var attr = generator.valueToCode(this, 'ATTR', generator.ORDER_ATOMIC) || '{}';
var code = v + '.synthesis(' + s + ', options=' + attr + ')';
return [code, generator.ORDER_ATOMIC];
}
export const AI_Speech_asr = function (_, generator) {
generator.definitions_['import_aip'] = 'import aip';
//generator.definitions_['import_aip_AipSpeech'] = 'from aip import AipSpeech';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
//var f = generator.valueToCode(this, 'FUNC', generator.ORDER_ATOMIC);
var fn = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC) || '""';
var attr = generator.valueToCode(this, 'ATTR', generator.ORDER_ATOMIC) || '{}';
//var code = v + '.'+ f +'(' + fn + ', options=' + attr + ')';
var code = v + '.asr(' + fn + ', options=' + attr + ')';
return [code, generator.ORDER_ATOMIC];
}
export const AI_ImageClassify = function (_, generator) {
generator.definitions_['import_aip'] = 'import aip';
//generator.definitions_['import_aip_AipImageClassify'] = 'from aip import AipImageClassify';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var addr = generator.valueToCode(this, 'ADDR', generator.ORDER_ATOMIC);
var f = generator.valueToCode(this, 'FUNC', generator.ORDER_ATOMIC);
var attr = generator.valueToCode(this, 'ATTR', generator.ORDER_ATOMIC) || '{}';
var code = v + '.' + f + '(' + addr + ', options=' + attr + ')';
return [code, generator.ORDER_ATOMIC];
}
export const AI_Face_match = function (_, generator) {
generator.definitions_['import_aip'] = 'import aip';
//generator.definitions_['import_aip_AipSpeech'] = 'from aip import AipSpeech';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var s = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var s2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);
var attr = generator.valueToCode(this, 'ATTR', generator.ORDER_ATOMIC) || '{}';
var code = v + '.match(' + s + ',' + s2 + ', options=' + attr + ')';
return [code, generator.ORDER_ATOMIC];
}
export const AI_Ocr = function (_, generator) {
generator.definitions_['import_aip'] = 'import aip';
//generator.definitions_['import_aip_Ocr'] = 'from aip import Ocr';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var addr = generator.valueToCode(this, 'ADDR', generator.ORDER_ATOMIC);
var f = generator.valueToCode(this, 'FUNC', generator.ORDER_ATOMIC);
var attr = generator.valueToCode(this, 'ATTR', generator.ORDER_ATOMIC) || '{}';
var code = v + '.' + f + '(' + addr + ', options=' + attr + ')';
return [code, generator.ORDER_ATOMIC];
}
export const AI_Nlp = function (_, generator) {
generator.definitions_['import_aip'] = 'import aip';
//generator.definitions_['import_aip_Nlp'] = 'from aip import Nlp';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var s = generator.valueToCode(this, 'STR', generator.ORDER_ATOMIC);
var f = generator.valueToCode(this, 'FUNC', generator.ORDER_ATOMIC);
var attr = generator.valueToCode(this, 'ATTR', generator.ORDER_ATOMIC) || '{}';
var code = v + '.' + f + '(' + s + ', options=' + attr + ')';
return [code, generator.ORDER_ATOMIC];
}
export const AI_Nlp_Sim = function (_, generator) {
generator.definitions_['import_aip'] = 'import aip';
//generator.definitions_['import_aip_Nlp'] = 'from aip import Nlp';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var s1 = generator.valueToCode(this, 'STR1', generator.ORDER_ATOMIC);
var s2 = generator.valueToCode(this, 'STR2', generator.ORDER_ATOMIC);
var f = generator.valueToCode(this, 'FUNC', generator.ORDER_ATOMIC);
var attr = generator.valueToCode(this, 'ATTR', generator.ORDER_ATOMIC) || '{}';
var code = v + '.' + f + '(' + s1 + ',' + s2 + ', options=' + attr + ')';
return [code, generator.ORDER_ATOMIC];
}
export const AI_Nlp_Topic = function (_, generator) {
generator.definitions_['import_aip'] = 'import aip';
//generator.definitions_['import_aip_Nlp'] = 'from aip import Nlp';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var s1 = generator.valueToCode(this, 'STR1', generator.ORDER_ATOMIC);
var s2 = generator.valueToCode(this, 'STR2', generator.ORDER_ATOMIC);
var code = v + '.topic(' + s1 + ',' + s2 + ')';
return [code, generator.ORDER_ATOMIC];
}
export const AI_Nlp_newsSummary = function (_, generator) {
generator.definitions_['import_aip'] = 'import aip';
//generator.definitions_['import_aip_Nlp'] = 'from aip import Nlp';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var s = generator.valueToCode(this, 'STR', generator.ORDER_ATOMIC);
var n = generator.valueToCode(this, 'LEN', generator.ORDER_ATOMIC);
var attr = generator.valueToCode(this, 'ATTR', generator.ORDER_ATOMIC) || '{}';
var code = v + '.newsSummary(' + s + ',' + n + ', options=' + attr + ')';
return [code, generator.ORDER_ATOMIC];
}
export const AI_ImageClassify_Func = function (_, generator) {
var code = this.getFieldValue('TYPE');
return [code, generator.ORDER_ATOMIC];
}
export const AI_Ocr_Func = function (_, generator) {
var code = this.getFieldValue('TYPE');
return [code, generator.ORDER_ATOMIC];
}
export const AI_Nlp_Func = function (_, generator) {
var code = this.getFieldValue('TYPE');
return [code, generator.ORDER_ATOMIC];
}
export const AI_Nlp_Func_sim = function (_, generator) {
var code = this.getFieldValue('TYPE');
return [code, generator.ORDER_ATOMIC];
}
export const AI_audio = function (_, generator) {
generator.definitions_['import_audio'] = 'import audio';
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
var num = generator.valueToCode(this, 'TIME', generator.ORDER_ATOMIC) || '0';
var code = "audio.audio_record(" + str + ',' + num + ")\n";
return code;
}
export const AI_photo = function (_, generator) {
generator.definitions_['import_audio'] = 'import cam';
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
var button = generator.valueToCode(this, 'BUT', generator.ORDER_ATOMIC) || '""';
var code = "cam.photo_capture(" + str + ',' + button + ")\n";
return code;
}
export const AI_result = function (_, generator) {
var varName = generator.valueToCode(this, 'AI', generator.ORDER_ASSIGNMENT) || '0';
var ctype = this.getFieldValue('CTYPE');
if (ctype == 'Image') { var code = varName + '["result"][0]["keyword"]' }
if (ctype == 'Speech') { var code = varName + '["result"][0]' }
if (ctype == 'Face' || ctype == 'OcrSimilarity') { var code = varName + '["score"]' }
if (ctype == 'Ocr') { var code = varName + '["words_result"]' }
return [code, generator.ORDER_ATOMIC];
}

View File

@@ -0,0 +1,936 @@
// sub_algorithm_1
export const algorithm_prepare = function (_, generator) {
generator.definitions_.import_sprite = "import sprite";
var line1 = 'g = [[0,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0], [0,0,0,1,0,0,1,0,0,0], [0,1,1,0,1,1,0,0,0,0], [0,0,0,1,0,0,0,1,0,0], [0,0,0,1,0,0,1,1,0,0], [0,0,1,0,0,1,0,1,0,0], [0,0,0,0,1,1,1,0,0,0]]\n';
var line2 = 'mark = [[0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0]]\n';
var code = line1 + line2 + "vis = [0,1,0,0,0,0,0,0,0]\n";
code += `position = [[0, 0], [200, 200], [250, 60], [320, 200], [280, 380], [470, 250], [670, 90], [650, 340]]
sprite.clearAllSprites()
sprite.createBackground('ditu')
mask = sprite.Sprite('white', 96, 354)
mask.hide()
house = [
sprite.Sprite('mark', 150, 380),
sprite.Sprite('xtxn', 96, 170),
sprite.Sprite('xnvijx', 270, 45),
sprite.Sprite('xnxbjx', 310, 182),
sprite.Sprite('xnsijx', 300, 370),
sprite.Sprite('xnkejx', 495, 220),
sprite.Sprite('bwbwjx', 716, 85),
sprite.Sprite('lelejx', 686, 314)
]
for i in house:
i.filterBrighter()
i.hide()\n`;
return code;
}
export const algorithm_add_school = function () {
// var code = "path = [1]\n"
// + "list1 = [0,1,2,3,4,5,6]\n"
// + "list2 = [3,1,0,4,5,6,2]\n";
var code = `path = [1]
mask.show()
car = sprite.Sprite('xnie', position[1][0], position[1][1])\nhouse[1].show()
car.nowPos = 1
def drive(n):
if g[car.nowPos][n]==1:
car.slideTo(position[n][0], position[n][1], 1)
car.nowPos = n
else:
print('移动失败!程序有误!')
exit()\n`;
return code;
}
export const algorithm_find_path = function (_, generator) {
generator.definitions_.import_random = "import random";
// var line1 = 'if random.choice([0,1]) == 0:\n'
// + ' list = list1\n'
// + 'else:\n'
// + ' list = list2\n'
// + 'f = path[(len(path) - 1)]\n'
// + 'flag = 0\n'
// + 'for _my_variable in range(7):\n'
// + ' if vis[_my_variable+1] == 0 and g[f][_my_variable+1] == 1:\n'
// + ' if mark[f][_my_variable+1] == 0:\n'
// + ' flag = 1\n'
// + ' break\n';
var line1 = 'f = path[(len(path) - 1)]\n'
+ 'flag = 0\n'
+ 'for _my_variable in [6,5,4,3,2,1,0]:\n'
+ ' if vis[_my_variable+1] == 0 and g[f][_my_variable+1] == 1:\n'
+ ' if mark[f][_my_variable+1] == 0:\n'
+ ' flag = 1\n'
+ ' break\n';
var code = line1;
return code;
}
export const algorithm_new_path = function (_, generator) {
var code = "flag == 1";
return [code, generator.ORDER_ATOMIC];
}
export const algorithm_set_path = function () {
var code = "mark[f][_my_variable+1] = 1\nvis[_my_variable+1] = 1\n";
return code;
}
export const algorithm_add_path = function () {
var code = "path.append(_my_variable+1)\n";
code += `drive(path[len(path) - 1])\nhouse[_my_variable+1].show()\n`;
return code;
}
export const algorithm_del_path = function (_, generator) {
generator.definitions_.import_time = "import time";
var code = "del path[len(path) - 1]\n";
code += `house[0].show()\ntime.sleep(0.5)\nhouse[0].hide()\n`;
return code;
}
export const algorithm_return_path = function () {
var code = 'for i in range(7):\n' + ' mark[f][i+1] = 0\n' + ' vis[f] = 0\n';
code = `house[f].hide()\ndrive(path[len(path) - 1])\n` + code;
return code;
}
export const algorithm_no_left = function (_, generator) {
var code = "len(path) == 7";
return [code, generator.ORDER_ATOMIC];
}
export const algorithm_print_path = function () {
var code = 'name = ["","学校","小智家","小欣家","小思家","小科家","贝贝家","乐乐家"]\nres = ""\nfor i in path:\n res = res + name[i] + "-"\nprint(res[:-1])\n';
return code;
}
// sub_algorithm_2
export const algorithm_prepare2 = function (_, generator) {
generator.definitions_.import_sprite = "import sprite";
var line1 = 'g = [[0,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0], [0,0,0,1,0,0,1,0,0,0], [0,1,1,0,1,0,0,0,0,0], [0,0,0,1,0,0,0,1,0,0], [0,0,0,1,0,0,0,1,0,0], [0,0,1,0,0,0,0,1,0,0], [0,0,0,0,1,1,1,0,0,0]]\n';
var line2 = 'mark = [[0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0]]\n';
var code = line1 + line2 + "vis = [0,1,0,0,0,0,0,0,0]\n";
code += `position = [[0, 0], [200, 200], [250, 60], [320, 200], [280, 380], [470, 250], [670, 90], [650, 340]]
sprite.clearAllSprites()
sprite.createBackground('ditu')
mask = sprite.Sprite('white', 96, 354)
mask.hide()
house = [
sprite.Sprite('mark', 150, 380),
sprite.Sprite('xtxn', 96, 170),
sprite.Sprite('xnvijx', 270, 45),
sprite.Sprite('xnxbjx', 310, 182),
sprite.Sprite('xnsijx', 300, 370),
sprite.Sprite('xnkejx', 495, 220),
sprite.Sprite('bwbwjx', 716, 85),
sprite.Sprite('lelejx', 686, 314)
]
barricade = sprite.Sprite('barricade', 610, 170)
barricade.enlargeTo(100)
for i in house:
i.filterBrighter()
i.hide()\n`;
return code;
}
export const algorithm_current_school = function (_, generator) {
var code = "f == 1";
return [code, generator.ORDER_ATOMIC];
}
export const algorithm_no_path = function () {
var code = "print('没有符合条件的路线')\n";
return code;
}
// sub_algorithm_3
export const algorithm_prepare_2_1 = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var line1 = 'g = [[10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000],[10000,10000,500,300,10000,10000,10000,10000,10000,10000,10000],[10000,500,10000,10000,100,10000,10000,10000,10000,10000,10000],[10000,300,10000,10000,400,300,10000,10000,10000,10000,10000],[10000,10000,100,400,10000,10000,200,10000,10000,10000,10000],[10000,10000,10000,300,10000,10000,100,200,10000,10000,10000],[10000,10000,10000,10000,200,100,10000,10000,100,10000,10000],[10000,10000,10000,10000,10000,200,10000,10000,100,10000,10000],[10000,10000,10000,10000,10000,10000,100,100,10000,10000,10000]]\n';
var line2 = 'now=1\n';
var code = line1 + line2 + "last=1\npath=[]\npath.append(1)\n";
code += `name = ["","小思家","银行","邮局","餐厅","书店","医院","超市","小科家"]
position = [[0, 0], [60, 320], [510, 390], [240, 200], [750, 330], [410, 90], [540, 190], [550, 30], [720, 120]]
sprite.clearAllSprites()
sprite.createBackground('map_si_ke')
stu = sprite.Sprite('girl', 60, 320)
stu.enlargeTo(100)
time.sleep(1)\n
`
return code;
}
export const algorithm_prepare_2_2 = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var line1 = 'g =[[10000,10000,10000,10000,10000,10000,10000],[10000,10000,300,500,10000,10000,10000],[10000,300,10000,10000,300,700,10000],[10000,500,10000,10000,10000,100,10000],[10000,10000,300,10000,10000,10000,200],[10000,10000,700,100,10000,10000,100],[10000,10000,10000,10000,200,100,10000]]\n';
var line2 = 'now=1\n';
var code = line1 + line2 + "last=1\npath=[]\npath.append(1)\n";
code += `name = ["","小智家","邮局","银行","书店","餐厅","学校"]
position = [[0, 0], [70, 340], [70, 90], [550, 310], [420, 70], [730, 250], [650, 130]]
sprite.clearAllSprites()
sprite.createBackground('map_zhi_xue')
stu = sprite.Sprite('boy', 70, 340)
stu.enlargeTo(100)
time.sleep(1)\n
`
return code;
}
export const algorithm_move_recent = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var line1 = 'tmp=10000\nfor i in range(0, len(g), 1):\n' + ' if g[now][i]<tmp and i!=last:\n' + ' next=i\n' + ' tmp=g[now][i]\n'
+ 'stu.slideTo(position[next][0], position[next][1], 1)\ntime.sleep(0.5)\n'
+ 'path.append(next)\n' + 'last=now\n' + 'now=next\n'
+ 'if len(path)>6:\n print("路线错乱!程序有误!")\n exit()\n';
var code = line1;
return code;
}
export const algorithm_not_home = function (_, generator) {
var code = "name[now] != '小科家'";
return [code, generator.ORDER_ATOMIC];
}
export const algorithm_not_school = function (_, generator) {
var code = "name[now] != '学校'";
return [code, generator.ORDER_ATOMIC];
}
export const algorithm_print_path2 = function () {
var code = `res = ""
for i in path:
res = res + name[i] + "→"
print(res[:-1])\n`;
return code;
}
// sub_algorithm_4 hanoi
export const hanoi_init = function (_, generator) {
// generator.definitions_.import_turtle = "import turtle";
// generator.definitions_.import_time = "import time";
// generator.definitions_.import_math = "import math";
// function randomHexColor() {
// //随机生成十六进制颜色
// var hex = Math.floor(Math.random() * 16777216).toString(16);
// //生成ffffff以内16进制数
// while (hex.length < 6) {
// //while循环判断hex位数少于6位前面加0凑够6位
// hex = '0' + hex;
// }
// return '#' + hex; //返回‘#'开头16进制颜色
// }
// var num = this.getFieldValue('NUM');
// let colorList = [];
// let i = 0;
// while (i < num) {
// i++;
// colorList.push('"' + randomHexColor() + '"');
// }
// generator.setups_['init_Hanoi'] = `
// def init_Hanoi():
// pen = turtle.Turtle()
// pen.hideturtle()
// pen.speed(0)
// for i in range(0, 3, 1):
// pen.penup()
// pen.setheading(0)
// pen.goto(150 * i - 200,-100)
// pen.pendown()
// pen.pensize(5)
// pen.forward(100)
// pen.goto(150 * i - 150,-100)
// pen.setheading(90)
// pen.forward(200)`;
// generator.setups_['begin'] = `
// def begin():
// s = turtle.Turtle()
// s.hideturtle()
// s.penup()
// s.speed(0)
// s.goto(0,-150)
// s.write('3')
// time.sleep(1)
// s.clear()
// s.write('2')
// time.sleep(1)
// s.clear()
// s.write('1')
// time.sleep(1)
// s.clear()
// s.write('Start!')
// time.sleep(1)
// s.clear()\n`;
// generator.setups_['move'] = `
// def move(x, y):
// try:
// t = tower[x].pop(-1)
// a = tower_num[x].pop(-1)
// if tower_num[y]!=[]:
// b = tower_num[y][-1]
// if a<b:
// print('非法移动,不能将大盘放置在小盘上')
// exit()
// t.goto(150 * y - 150,20 * len(tower[y]) - 90)
// tower[y].append(t)
// tower_num[y].append(a)
// except IndexError:
// print('非法移动,未找到可移动的圆盘')
// exit()\n`;
// var code = `num = ${num}
// tower = [[], [], []]
// tower_num = [[], [], []]
// A,B,C=0,1,2
// total_num=[0]
// color= (${colorList.join(', ')})
// init_Hanoi()
// for i in range(0, num, 1):
// tina = turtle.Turtle()
// tina.penup()
// tina.shape('square')
// tina.color("#000000",color[i])
// tina.goto(-150,20 * i - 90)
// tower[0].append(tina)
// tower_num[0].append(i)
// count_turtle=turtle.Turtle()
// count_turtle.hideturtle()
// count_turtle.penup()
// count_turtle.goto(0,150)
// count_turtle.write('总步数0')
// begin()\n`;
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var num = this.getFieldValue('NUM');
if (num >= 7) var code = `print('层数过高不得高于6层')\nexit()\n`;
else {
var code = `sprite.clearAllSprites()
_Hanoicolor = ['blue', 'red', 'yellow', 'green', 'purple', 'black']
_Hanoi = [[], [], []]
A = 0
B = 1
C = 2
_n = `+ num + `
_HanoiColumn = [
sprite.Sprite('HanoiColumn', 200, 320),
sprite.Sprite('HanoiColumn', 400, 320),
sprite.Sprite('HanoiColumn', 600, 320)
]
_HanoiColumnNumber = [
sprite.Text('A', 190, 120),
sprite.Text('B', 390, 120),
sprite.Text('C', 590, 120)
]
_HanoiBlock = []
for i in range(0, _n, 1):
_HanoiBlock.append(sprite.Sprite(_Hanoicolor[i], 200, 400-(_n-i-1)*27))
_HanoiBlock[i].setScale(25, 30*i+30)
_Hanoi[0].insert(0, _HanoiBlock[i])
_steptext = sprite.Text('步数0', 30, 30)
_steps = {'steps' : 0}
time.sleep(1)\n`
}
return code;
}
export const hanoi_move = function (_, generator) {
var fromNum = generator.valueToCode(this, 'FROM_NUM', generator.ORDER_ATOMIC) || '0';
var toNum = generator.valueToCode(this, 'TO_NUM', generator.ORDER_ATOMIC) || '0';
// var code = `move(${fromNum}, ${toNum})\ntotal_num[0]+=1\ncount_turtle.clear()\ncount_turtle.write('总步数:'+str(total_num[0]))\n`;
var code = `if len(_Hanoi[${fromNum}])>0 :
_HanoiBlockMoved = _Hanoi[${fromNum}].pop()
if len(_Hanoi[${toNum}]) > 0 :
_HanoiBlockSuppressed = _Hanoi[${toNum}].pop()
if _HanoiBlock.index(_HanoiBlockMoved) > _HanoiBlock.index(_HanoiBlockSuppressed):
print('非法移动!程序有误!')
exit()
else:
_Hanoi[${toNum}].append(_HanoiBlockSuppressed)
_HanoiBlockMoved.slideTo(${fromNum}*200+200, 180, 0.2)
_HanoiBlockMoved.slideTo(${toNum}*200+200, 180, 0.5)
_HanoiBlockMoved.slideTo(${toNum}*200+200, 400-len(_Hanoi[${toNum}])*27, 0.2)
_Hanoi[${toNum}].append(_HanoiBlockMoved)
_steps['steps'] += 1
_steptext.changeText('步数:'+str(_steps['steps']))
else :
print('非法移动!程序有误!')
exit()
`
return code;
}
// sub_algorithm_5
export const algorithm_all_books_sequence = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = `if 'mode' not in globals() or mode == 0:
sprite.clearAllSprites()
ring=[0,0,0,0,0,0,0,0,0,0]
mode=1
n=5
ring[5]=1
name=['小王子','海底两万里','荷花镇的早市','孔子的故事','夏洛的网','草房子','月下看猫头鹰','会唱歌的咖啡磨','父与子','城南旧事']
Books = []
for i in range(1, 11, 1):
Books.append(sprite.Sprite('books/book'+str(i), (130*i-650) if i>5 else 130*i, 320 if i>5 else 120))
else:
mode=2
n=len(ring)-1\nring[n]=1
time.sleep(1)\n`;
return code;
}
export const algorithm_all_books = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = `if 'mode' not in globals() or mode == 0:
sprite.clearAllSprites()
ring=[0,0,0,0,0,0,0,0,0,0]
mode=2
n=5
name=['小王子','海底两万里','荷花镇的早市','孔子的故事','夏洛的网','草房子','月下看猫头鹰','会唱歌的咖啡磨','父与子','城南旧事']
Books = []
for i in range(1, 11, 1):
Books.append(sprite.Sprite('books/book'+str(i), (130*i-650) if i>5 else 130*i, 320 if i>5 else 120))
else:
mode=1
n=len(ring)-1
ring[n]=n
list=ring
temp=Books
time.sleep(1)\n`;
return code;
}
export const algorithm_first_book = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var line1 = 'res=0\n';
var code = line1 + "flag=ring[res]\n";
code += `Books[res].filterBrighter()\ntime.sleep(0.1)\nBooks[res].filterOrigin()\n`;
return code;
}
// export const algorithm_no_ring = function() {
// var code = "ring[i]==0";
// return [code, generator.ORDER_ATOMIC];
// };
export const algorithm_no_ring2 = function (_, generator) {
var code = "(('mode' not in globals())or(mode==1 and flag==0)or(mode==2 and not any(value > 0 for value in qian))or(mode==0))";
return [code, generator.ORDER_ATOMIC];
}
export const algorithm_yes_ring2 = function (_, generator) {
var code = "(('mode' in globals())and((mode==1 and flag!=0)or(mode==2 and any(value > 0 for value in qian))))";
return [code, generator.ORDER_ATOMIC];
}
export const algorithm_next_book = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = "res+=1\nflag=ring[res]\n";
code += `Books[res].filterBrighter()\ntime.sleep(0.1)\nBooks[res].filterOrigin()\n`;
code = `Books[res].filterGray()\ntime.sleep(0.3)\n` + code;
return code;
}
export const algorithm_two_left = function (_, generator) {
var code = "len(list)>=2";
return [code, generator.ORDER_ATOMIC];
}
export const algorithm_divide_books = function () {
var code = `mid = int(len(list)/2)
qian = list[0:mid]
hou = list[mid:]
qiantemp = temp[0:mid]
houtemp = temp[mid:]\n`;
return code;
}
export const algorithm_get_half_books = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = `quchu = qian
list = hou
quchutemp = qiantemp
temp = houtemp
for i in qiantemp:
i.filterBrighter()
time.sleep(0.5)
for i in qiantemp:
i.filterGray()
time.sleep(0.5)\n`;
return code;
}
// export const algorithm_check_half_books = function() {
// var code = "while ring[i]==0:\n if i==mid:\n flag=0\n break\n i+=1\n";
// return code;
// };
export const algorithm_delete_book = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = `list = quchu
temp = quchutemp
for i in qiantemp:
i.filterBrighter()
time.sleep(0.5)
for i in qiantemp:
i.filterOrigin()
for i in houtemp:
i.filterBrighter()
time.sleep(0.5)
for i in houtemp:
i.filterGray()
time.sleep(0.5)\n`;
return code;
}
// export const algorithm_print_book = function() {
// var code = "print(i)\n";
// return code;
// };
export const algorithm_print_book2 = function () {
var code = `if 'list' in globals():
res = list[0]
Books[res].filterBrighter()
print('未消磁的书籍是第'+str(res+1)+'本《'+name[res%10]+'》。')
if res!=n:
print('答案错误!请检查程序!')
mode=0\n`;
return code;
}
// sub_algorithm_6
export const algorithm_book_scale = function (_, generator) {
var FIELD_NUM = this.getFieldValue("NUM");
const pos = {
5: '130*i, 120',
10: '(130*i-650) if i>5 else 130*i, 320 if i>5 else 120',
20: '(65*i-650)+30 if i>10 else 65*i+30, 320 if i>10 else 120',
50: '(26*i-650)+50 if i>25 else 26*i+50, 320 if i>25 else 120'
}
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = `sprite.clearAllSprites()
ring = []
name = ['小王子','海底两万里','荷花镇的早市','孔子的故事','夏洛的网','草房子','月下看猫头鹰','会唱歌的咖啡磨','父与子','城南旧事']
Books = []
for i in range(${FIELD_NUM}):
ring.append(0)
for i in range(1, ${FIELD_NUM}+1, 1):
Books.append(sprite.Sprite('books/book'+str(i%10 if i%10!=0 else 10), ${pos[FIELD_NUM]}))
time.sleep(1)
mode=3
`
return code;
}
export const algorithm_number_zero = function (_, generator) {
generator.definitions_.import_sprite = "import sprite";
var code = "cnt=0\n";
code += `cntText = sprite.Text('计数器0', 30, 200)\n`
return code;
}
export const algorithm_number_add = function (_, generator) {
generator.definitions_.import_sprite = "import sprite";
var code = "cnt+=1\n";
code += `cntText.changeText('计数器:'+str(cnt))\n`
return code;
}
export const algorithm_print_number = function (_, generator) {
generator.definitions_.import_sprite = "import sprite";
var code = "print('计数器大小:'+str(cnt))\n";
return code;
}
// export const algorithm_get_book_num = function() {
// var code = 'n='+this.getFieldValue('NUM')+'\n';
// return code;
// };
// export const algorithm_print_sequence = function() {
// var code = 'print("顺序法查找次数为:",cnt)';
// return code;
// };
// export const algorithm_print_divide = function() {
// var code = 'print("二分法查找次数为:",cnt)';
// return code;
// };
// sub_algorithm_7
export const algorithm_init_jttl = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = `sprite.clearAllSprites()
_head = 10
_foot = 32
_footText = sprite.Text('脚的数量:', 20, 10)
_sprite = []\n`;
return code;
}
export const algorithm_rabbit_zero = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = `_rabbit = 0\n`;
// code += `_sprite.append(sprite.Sprite('jttl/rabbit', len(_sprite)*130+130 if len(_sprite)<5 else len(_sprite)*130+130-650, 120 if len(_sprite)<5 else 320))\n`;
code += `time.sleep(1)\n`;
return code;
}
export const algorithm_rabbit_number_in_range = function (_, generator) {
var code = `_rabbit < _head`;
return [code, generator.ORDER_ATOMIC];
}
export const algorithm_chick_calculate = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = `_chick = _head - _rabbit\n`;
code += `for i in range(0, _chick, 1):
_sprite.append(sprite.Sprite('jttl/chick', len(_sprite)*130+130 if len(_sprite)<5 else len(_sprite)*130+130-650, 120 if len(_sprite)<5 else 320))\n
time.sleep(0.5)
_footText.changeText('脚的数量:'+str(_rabbit*4 + _chick*2))
time.sleep(1)\n`
return code;
}
export const algorithm_check_feet = function (_, generator) {
var code = `_rabbit*4 + _chick*2 == _foot`;
return [code, generator.ORDER_ATOMIC];
}
export const algorithm_print_jttl_answer = function (_, generator) {
generator.definitions_.import_sprite = "import sprite";
var code = `print('鸡的数量:'+str(_chick)+'只;\\n兔的数量'+str(_rabbit)+'只。')\n`;
return code;
}
export const algorithm_rabbit_add = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = `_rabbit += 1\n`;
code += `sprite.clearAllSprites()
_sprite = []
_footText = sprite.Text('脚的数量:', 20, 10)
for i in range(0, _rabbit, 1):
_sprite.append(sprite.Sprite('jttl/rabbit', len(_sprite)*130+130 if len(_sprite)<5 else len(_sprite)*130+130-650, 120 if len(_sprite)<5 else 320))\n`
code += `time.sleep(0.5)\n`;
return code;
}
// sub_algorithm_8
export const algorithm_init_fzsf = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = ``;
code += `sprite.clearAllSprites()
sprite.createBackground('/fzsf/map_ck_xxjsjs')
_S1 = sprite.Sprite('/fzsf/S1',400,225,'S1')
_S2 = sprite.Sprite('/fzsf/S2',400,225,'S2')
_S3 = sprite.Sprite('/fzsf/S3',400,225,'S3')
_S4 = sprite.Sprite('/fzsf/S4',400,225,'S4')
_S1.hide()
_S2.hide()
_S3.hide()
_S4.hide()
_text_1 = sprite.Text('S1',0,0,'text')
_text_2 = sprite.Text('S2',0,30,'text2')
_text_3 = sprite.Text('S3',0,60,'text3')
_text_4 = sprite.Text('S4',0,90,'text4')
_position = [[60, 270], [240, 50], [260, 380], [440, 190], [730, 60], [700, 400]]
_Llen = [0, 170, 230, 100, 150, 10, 30, 50]
_Slen = [0, 0, 0, 0, 0]
_tag = [0, [0, 1, 3], [0, 2, 3], [3, 4, 5], [3, 5]]
bear = sprite.Sprite('mixbear',60,270,'bear')
bear.enlargeTo(80)
_pos = 0
time.sleep(1)\n`;
return code;
}
export const algorithm_fz_calc = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var FIELD_PATHNAME = this.getFieldValue("PATHNAME");
const calc = [0, [1, 3], [2, 4], [5, 7], [6]]
var code = ``;
code += `_S${FIELD_PATHNAME}.show()
time.sleep(1)\n`;
if (FIELD_PATHNAME != 4) {
code += `_Slen[${FIELD_PATHNAME}] = _Llen[${calc[FIELD_PATHNAME][0]}] + _Llen[${calc[FIELD_PATHNAME][1]}]
_text_${FIELD_PATHNAME}.changeText('S${FIELD_PATHNAME}'+str(_Slen[${FIELD_PATHNAME}])+'m')
time.sleep(1)
_S${FIELD_PATHNAME}.hide()
time.sleep(1)\n`;
} else {
code += `_Slen[4] = _Llen[6]
_text_4.changeText('S4'+str(_Slen[4])+'m')
time.sleep(1)
_S4.hide()
time.sleep(1)\n`;
}
return code;
}
export const algorithm_fz_compare = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var FIELD_PATHNAME = this.getFieldValue("PATHNAME");
var FIELD_PATHNAME2 = this.getFieldValue("PATHNAME2");
var code = ``;
code += `_Slen[${FIELD_PATHNAME}] < _Slen[${FIELD_PATHNAME2}]`;
return [code, generator.ORDER_ATOMIC];
// `if(_Slen[${FIELD_PATHNAME}]==0 or _Slen[${FIELD_PATHNAME2}]==0):
// print('请先计算出长度再比较!程序有误!')
// exit()
// _S${FIELD_PATHNAME}.show()
// time.sleep(0.5)
// _S${FIELD_PATHNAME}.hide()
// time.sleep(0.5)
// _S${FIELD_PATHNAME}.show()
// time.sleep(0.5)
// _S${FIELD_PATHNAME2}.show()
// time.sleep(0.5)
// _S${FIELD_PATHNAME2}.hide()
// time.sleep(0.5)
// _S${FIELD_PATHNAME2}.show()
// time.sleep(0.5)
// if(_Slen[${FIELD_PATHNAME}] < _Slen[${FIELD_PATHNAME2}]):
// _S${FIELD_PATHNAME2}.hide()
// _S${FIELD_PATHNAME}.show()
// else :
// _S${FIELD_PATHNAME}.hide()
// _S${FIELD_PATHNAME2}.show()
// time.sleep(1)
// _S${FIELD_PATHNAME}.hide()
// _S${FIELD_PATHNAME2}.hide()\n`;
// return code;
}
export const algorithm_fz_set_min = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var FIELD_PATHNAME = this.getFieldValue("PATHNAME");
var code = ``;
code += `
_S1.hide()
_S2.hide()
_S3.hide()
_S4.hide()
_Smin = ${FIELD_PATHNAME}
_S${FIELD_PATHNAME}.show()
time.sleep(0.5)
_S${FIELD_PATHNAME}.hide()
time.sleep(0.5)
_S${FIELD_PATHNAME}.show()
time.sleep(1)\n`;
return code;
}
export const algorithm_fz_move = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = ``;
code += `if(_pos == _tag[_Smin][0]):
for i in range(1, len(_tag[_Smin]), 1):
bear.slideTo(_position[_tag[_Smin][i]][0], _position[_tag[_Smin][i]][1], 1)
_pos = _tag[_Smin][len(_tag[_Smin])-1]
else:
print('移动错误!程序有误!')
exit()
_S1.hide()
_S2.hide()
_S3.hide()
_S4.hide()
if(_pos == 5):
print('成功抵达信息科技教室!')\n`;
return code;
}
// sub_algorithm_9
export const algorithm_init_hxdb = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = ``;
code += `sprite.clearAllSprites()
sprite.createBackground('/hxdb/hxdbbg')
_soldier = []
_num = sprite.Text('目前士兵数量0',0,0,'num')
_last = sprite.Text('剩余0',500,0,'last')
_line = 3\n`;
return code;
}
export const algorithm_hxdb_init_soldier = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var FIELD_NUM = this.getFieldValue("NUM");
var code = ``;
code += `for i in range(0, ${FIELD_NUM}, 1):
_soldier.append(sprite.Sprite('/hxdb/soldier', 30 + (len(_soldier)%_line)*50 + (len(_soldier)//(4*_line))*(_line+1)*50 +(len(_soldier)%3-2), 80+(len(_soldier)//_line)*100-(len(_soldier)//(4*_line))*4*100+(len(_soldier)%2)))
_num.changeText('目前士兵数量:'+str(len(_soldier)))\n`;
return code;
}
export const algorithm_hxdb_stand_in_line = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var FIELD_NAME = this.getFieldValue("NUM");
var code = `for i in range(0, len(_soldier), 1):
_soldier[i].slideTo(30 + (i%${FIELD_NAME})*50 + (i//(4*${FIELD_NAME}))*(${FIELD_NAME}+1)*50 +(i%3-2), 80+(i//${FIELD_NAME})*100-(i//(4*${FIELD_NAME}))*4*100+(i%2), 0.05)
_line = ${FIELD_NAME}
_last.changeText('剩余:'+str(len(_soldier)%_line))
time.sleep(2)\n`;
return code;
}
export const algorithm_hxdb_last_line = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var FIELD_NAME = this.getFieldValue("NUM");
var code = `len(_soldier)%_line == ${FIELD_NAME}`;
return [code, generator.ORDER_ATOMIC];
}
export const algorithm_hxdb_add = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = `_num.changeText('目前士兵数量:'+str(len(_soldier)+1))
_last.changeText('剩余:')
time.sleep(0.5)
_soldier.append(sprite.Sprite('/hxdb/soldier', 30 + (len(_soldier)%_line)*50 + (len(_soldier)//(4*_line))*(_line+1)*50 +(len(_soldier)%3-2), 80+(len(_soldier)//_line)*100-(len(_soldier)//(4*_line))*4*100+(len(_soldier)%2)))
time.sleep(1)\n`;
return code;
}
export const algorithm_hxdb_result = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = `print('符合要求的士兵数量为:'+str(len(_soldier)))\n`;
return code;
}
// others
export const hanoi_init_offline = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
generator.definitions_.import_time = "import time";
generator.definitions_.import_math = "import math";
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var num = this.getFieldValue('NUM');
generator.setups_['init_Hanoi'] = `
def init_Hanoi():
pen = turtle.Turtle()
pen.hideturtle()
pen.speed(0)
for i in range(0, 3, 1):
pen.penup()
pen.setheading(0)
pen.goto(150 * i - 200,-100)
pen.pendown()
pen.pensize(5)
pen.forward(100)
pen.goto(150 * i - 150,-100)
pen.setheading(90)
pen.forward(200)`;
generator.setups_['begin'] = `
def begin():
s = turtle.Turtle()
s.hideturtle()
s.penup()
s.speed(0)
s.goto(0,-150)
s.write('3')
time.sleep(1)
s.clear()
s.write('2')
time.sleep(1)
s.clear()
s.write('1')
time.sleep(1)
s.clear()
s.write('Start!')
time.sleep(1)
s.clear()\n`;
generator.setups_['move'] = `
def move(x, y):
try:
t = tower[x].pop(-1)
a = tower_num[x].pop(-1)
if tower_num[y]!=[]:
b = tower_num[y][-1]
if a<b:
print('非法移动,不能将大盘放置在小盘上')
exit()
t.goto(150 * y - 150,20 * len(tower[y]) - 90)
tower[y].append(t)
tower_num[y].append(a)
except IndexError:
print('非法移动,未找到可移动的圆盘')
exit()\n`;
var code = `num = ${num}
tower = [[], [], []]
tower_num = [[], [], []]
A,B,C=0,1,2
total_num=[0]
color= (${color})
init_Hanoi()
for i in range(0, num, 1):
tina = turtle.Turtle()
tina.penup()
tina.shape('square')
if num == 1:
tina.shapesize(1,7,1)
else:
tina.shapesize(1,7 - (6 / (num - 1)) * i,1)
tina.color("#000000",color)
tina.speed(3)
tina.goto(-150,20 * i - 90)
tower[0].append(tina)
tower_num[0].append(i)
count_turtle=turtle.Turtle()
count_turtle.hideturtle()
count_turtle.penup()
count_turtle.goto(0,150)
count_turtle.write('总步数0')
begin()\n`;
return code;
}
export const algorithm_get_current_location = function () {
var line1 = 'f = path[(len(path) - 1)]\n';
var code = line1;
return code;
}
export const algorithm_void_path = function (_, generator) {
var code = "len(path)==0";
return [code, generator.ORDER_ATOMIC];
}
export const algorithm_color_seclet = function (_, generator) {
var colour = this.getFieldValue('COLOR');
var code = '"' + colour + '"'
return [code, generator.ORDER_ATOMIC];
}

View File

@@ -0,0 +1,43 @@
import * as Blockly from 'blockly/core';
export const requests_get_old = function (_, generator) {
generator.definitions_.import_requests = "import requests";
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
Blockly.Variables.NAME_TYPE);
var str = generator.valueToCode(this, 'DOMAIN', generator.ORDER_ATOMIC);
var code = varName + '= ' + 'requests.get(' + str + ')\n';
return code;
}
export const requests_get = function (_, generator) {
generator.definitions_.import_requests = "import requests";
var dropdown_type = this.getFieldValue('TYPE');
var str = generator.valueToCode(this, 'URL', generator.ORDER_ATOMIC);
var code = 'requests.' + dropdown_type + '(' + str + ')';
return [code, generator.ORDER_ATOMIC];
}
export const requests_post = function (_, generator) {
generator.definitions_.import_requests = "import requests";
var dropdown_type = this.getFieldValue('TYPE');
var str = generator.valueToCode(this, 'URL', generator.ORDER_ATOMIC);
var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
var code = 'requests.' + dropdown_type + '(' + str + ',data=' + data + ')';
return [code, generator.ORDER_ATOMIC];
}
export const requests_attribute = function (_, generator) {
generator.definitions_.import_requests = "import requests";
var varName = generator.valueToCode(this, 'VAL', generator.ORDER_ASSIGNMENT) || '0';
var attr = this.getFieldValue('ATTR');
var code = varName + "." + attr;
return [code, generator.ORDER_ATOMIC];
}
export const requests_method = function (_, generator) {
generator.definitions_.import_requests = "import requests";
var method = this.getFieldValue('DIR');
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = "requests." + method + "(" + str + ')\n';
return code;
}

View File

@@ -0,0 +1,100 @@
export const cv_read_image = function (_, generator) {
generator.definitions_['import_cv2'] = 'import cv2';
var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
var code = "cv2.imread(" + file + ")";
return [code, generator.ORDER_ATOMIC];
}
export const cv_show_image = function (_, generator) {
generator.definitions_['import_cv2'] = 'import cv2';
var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
var code = "cv2.imshow(" + data + ',' + file + ")\n";
return code;
}
export const cv_write_image = function (_, generator) {
generator.definitions_['import_cv2'] = 'import cv2';
var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
var code = "cv2.imwrite(" + data + ',' + file + ")\n";
return code;
}
export const cv_waitkey = function (_, generator) {
generator.definitions_['import_cv2'] = 'import cv2';
var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
var code = "cv2.waitKey(" + data + ")\n";
return code;
}
export const cv_destroy_all = function (_, generator) {
generator.definitions_['import_cv2'] = 'import cv2';
var code = "cv2.destroyAllWindows()\n";
return code;
}
export const cv_line_rect = function (_, generator) {
generator.definitions_['import_cv2'] = 'import cv2';
var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
var x1 = generator.valueToCode(this, 'x1', generator.ORDER_ATOMIC);
var y1 = generator.valueToCode(this, 'y1', generator.ORDER_ATOMIC);
var x2 = generator.valueToCode(this, 'x2', generator.ORDER_ATOMIC);
var y2 = generator.valueToCode(this, 'y2', generator.ORDER_ATOMIC);
var thick = generator.valueToCode(this, 'thick', generator.ORDER_ATOMIC);
var color = this.getFieldValue('FIELDNAME');
var color1 = eval('0x' + color[1] + color[2])
var color2 = eval('0x' + color[3] + color[4])
var color3 = eval('0x' + color[5] + color[6])
var direction = this.getFieldValue('DIR');
var code = "cv2." + direction + "(" + file + ',(' + x1 + ',' + y1 + '),(' + x2 + ',' + y2 + '),(' + color3 + ',' + color2 + ',' + color1 + '),' + thick + ")\n";
return code;
}
export const cv_text = function (_, generator) {
generator.definitions_['import_cv2'] = 'import cv2';
var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
var x1 = generator.valueToCode(this, 'x1', generator.ORDER_ATOMIC);
var y1 = generator.valueToCode(this, 'y1', generator.ORDER_ATOMIC);
var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
var size = generator.valueToCode(this, 'size', generator.ORDER_ATOMIC);
var thick = generator.valueToCode(this, 'thick', generator.ORDER_ATOMIC);
var color = this.getFieldValue('FIELDNAME');
var color1 = eval('0x' + color[1] + color[2])
var color2 = eval('0x' + color[3] + color[4])
var color3 = eval('0x' + color[5] + color[6])
var font = this.getFieldValue('font');
var code = "cv2.putText(" + file + ',' + data + ',(' + x1 + ',' + y1 + '),cv2.FONT_HERSHEY_' + font + ',' + size + ',(' + color3 + ',' + color2 + ',' + color1 + '),' + thick + ")\n";
return code;
}
export const cv_face_classifier = function (_, generator) {
generator.definitions_['import_cv2'] = 'import cv2';
var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
var code = "cv2.CascadeClassifier(" + file + ")";
return [code, generator.ORDER_ATOMIC];
}
export const cv_face_detect = function (_, generator) {
generator.definitions_['import_cv2'] = 'import cv2';
var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
var face = generator.valueToCode(this, 'FACE', generator.ORDER_ATOMIC);
var scale = generator.valueToCode(this, 'SCALE', generator.ORDER_ATOMIC);
var neighbor = generator.valueToCode(this, 'NEIGHBOR', generator.ORDER_ATOMIC);
var code = face + ".detectMultiScale(" + file + ',scaleFactor=' + scale + ',minNeighbors=' + neighbor + ")";
return [code, generator.ORDER_ATOMIC];
}
export const cv_face_detect_all = function (_, generator) {
generator.definitions_['import_cv2'] = 'import cv2';
var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
var face = generator.valueToCode(this, 'FACE', generator.ORDER_ATOMIC);
var scale = generator.valueToCode(this, 'SCALE', generator.ORDER_ATOMIC);
var neighbor = generator.valueToCode(this, 'NEIGHBOR', generator.ORDER_ATOMIC);
var x1 = generator.valueToCode(this, 'x1', generator.ORDER_ATOMIC);
var y1 = generator.valueToCode(this, 'y1', generator.ORDER_ATOMIC);
var x2 = generator.valueToCode(this, 'x2', generator.ORDER_ATOMIC);
var y2 = generator.valueToCode(this, 'y2', generator.ORDER_ATOMIC);
var code = face + ".detectMultiScale(" + file + ',scaleFactor=' + scale + ',minNeighbors=' + neighbor + ',minSize=(' + x1 + ',' + y1 + '),maxSize=(' + x2 + ',' + y2 + "))";
return [code, generator.ORDER_ATOMIC];
}

View File

@@ -0,0 +1,689 @@
import * as Blockly from 'blockly/core';
export const series_create = function (_, generator) {
generator.definitions_.import_pandas = "import pandas";
var varName1 = generator.valueToCode(this, 'SER', generator.ORDER_ASSIGNMENT) || '0';
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
Blockly.Variables.NAME_TYPE);
var code = varName + ' = ' + 'pandas.Series(' + varName1 + ')\n';
return code;
}
export const series_create_from_index = function (_, generator) {
generator.definitions_.import_pandas = "import pandas";
var varName1 = generator.valueToCode(this, 'SER', generator.ORDER_ASSIGNMENT) || '0';
var varName2 = generator.valueToCode(this, 'INDEX', generator.ORDER_ATOMIC) || '\'\'';
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
Blockly.Variables.NAME_TYPE);
var code = varName + ' = ' + 'pandas.Series(' + varName1 + ',' + 'index=' + varName2 + ')\n';
return code;
}
export const dataframe_create = function (_, generator) {
generator.definitions_.import_pandas = "import pandas";
var varName1 = generator.valueToCode(this, 'SER', generator.ORDER_ASSIGNMENT) || '0';
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
Blockly.Variables.NAME_TYPE);
var code = varName + ' = ' + 'pandas.DataFrame(' + varName1 + ')\n';
return code;
}
export const dataframe_create_from_index = function (_, generator) {
generator.definitions_.import_pandas = "import pandas";
var varName1 = generator.valueToCode(this, 'SER', generator.ORDER_ASSIGNMENT) || '0';
var varName2 = generator.valueToCode(this, 'INDEX_COLUMN', generator.ORDER_ATOMIC) || '\'\'';
var varName3 = generator.valueToCode(this, 'INDEX_RAW', generator.ORDER_ATOMIC) || '\'\'';
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
Blockly.Variables.NAME_TYPE);
var code = varName + ' = ' + 'pandas.DataFrame(' + varName1 + ',' + 'columns=' + varName2 + ',index=' + varName3 + ')\n';
return code;
}
export const dataframe_create_from_one_index = function (_, generator) {
generator.definitions_.import_pandas = "import pandas";
var name = this.getFieldValue('COLUMN_RAW');
var varName1 = generator.valueToCode(this, 'SER', generator.ORDER_ASSIGNMENT) || '0';
var varName2 = generator.valueToCode(this, 'INDEX', generator.ORDER_ATOMIC) || '\'\'';
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
Blockly.Variables.NAME_TYPE);
var code = varName + ' = ' + 'pandas.DataFrame(' + varName1 + ',' + name + '=' + varName2 + ')\n';
return code;
}
export const series_create_from_text = function (_, generator) {
generator.definitions_.import_pandas = "import pandas";
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
Blockly.Variables.NAME_TYPE);
var text = this.getFieldValue('TEXT');
var code = varName + ' = ' + 'pandas.Series([' + text + '])\n';
return code;
}
export const series_index_value = function (_, generator) {
generator.definitions_.import_pandas = "import pandas";
var varName = generator.valueToCode(this, 'SERIES', generator.ORDER_ASSIGNMENT) || '0';
var name = this.getFieldValue('INDEX_VALUE');
var code = varName + '.' + name;
return [code, generator.ORDER_ATOMIC];
}
export const series_get_num = function (_, generator) {
// Indexing into a list is the same as indexing into a string.
var varName = generator.valueToCode(this, 'SER', generator.ORDER_ASSIGNMENT) || '0';
var argument0 = generator.valueToCode(this, 'AT',
generator.ORDER_ADDITIVE) || '1';
var code = varName + '[' + argument0 + ']';
return [code, generator.ORDER_ATOMIC];
}
export const pl_show = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
var code = 'pylab.show()\n';
return code;
}
export const pl_axes = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
var code = 'pylab.axes(aspect=1)\n';
return code;
}
export const pl_plot_easy = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
var varName = generator.valueToCode(this, 'SER', generator.ORDER_ASSIGNMENT) || '0';
var code = 'pylab.plot(' + varName + ")\n";
return code;
}
export const pl_plot = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
var line = this.getFieldValue('LINE');
var color = this.getFieldValue('COLOR');
var dot = this.getFieldValue('DOT');
var varName = generator.valueToCode(this, 'SER', generator.ORDER_ASSIGNMENT) || '0';
var code = 'pylab.plot(' + varName + ",'" + dot + line + color + "')\n";
return code;
}
export const pl_legend = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
generator.definitions_.import_matplotlib_font_manager = "import matplotlib.font_manager";
var code = 'pylab.legend(' + 'prop=matplotlib.font_manager.FontProperties("' + "STSong" + '")' + ')\n';
return code;
}
export const pl_title = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
var a = generator.valueToCode(this, 'TITLE', generator.ORDER_ATOMIC);
var code = 'pylab.title(' + a + ', fontproperties = "' + "STSong" + '")\n';
return code;
}
export const pl_label = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
var direction = this.getFieldValue('DIR');
var a = generator.valueToCode(this, 'LABEL', generator.ORDER_ATOMIC);
var code = 'pylab.' + direction + 'label(' + a + ', fontproperties = "' + "STSong" + '")\n';
return code;
}
export const array_create = function (_, generator) {
generator.definitions_.import_numpy = "import numpy";
var from = generator.valueToCode(this, "FROM", generator.ORDER_NONE) || "0";
var end = generator.valueToCode(this, "TO", generator.ORDER_NONE) || "0";
var step = generator.valueToCode(this, "STEP", generator.ORDER_NONE) || "1";
var code = "numpy.arange(" + from + ", " + end + ", " + step + ")";
return [code, generator.ORDER_ATOMIC];
}
export const pl_plot_bar = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
var direction = this.getFieldValue('DIR');
var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
var code = 'pylab.' + direction + '(' + a + ',' + b + ")\n";
return code;
}
export const pl_plot_scatter = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
var s = generator.valueToCode(this, 'S', generator.ORDER_ATOMIC) || '\'\'';
var color = this.getFieldValue('COLOR');
var dot = this.getFieldValue('DOT');
var tag = generator.valueToCode(this, 'TAG', generator.ORDER_ATOMIC) || '\'\'';
var code = 'pylab.scatter(' + a + ',' + b + ",s=" + s + ",c='" + color + "',marker='" + dot + "',label=" + tag + ")\n";
return code;
}
export const pl_plot_xy = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
var line = this.getFieldValue('LINE');
var color = this.getFieldValue('COLOR');
var dot = this.getFieldValue('DOT');
var tag = generator.valueToCode(this, 'TAG', generator.ORDER_ATOMIC) || '\'\'';
var code = 'pylab.plot(' + a + ',' + b + ",'" + dot + line + color + "'" + ',label=' + tag + ")\n";
return code;
}
export const pl_bar = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
var tag = generator.valueToCode(this, 'TAG', generator.ORDER_ATOMIC) || '\'\'';
var width = generator.valueToCode(this, 'WIDTH', generator.ORDER_RELATIONAL) || '0';
var color = this.getFieldValue('COLOR')
var align = this.getFieldValue('ALIGN');
var code = 'pylab.bar(' + a + ',' + b + ',align="' + align + '",color="' + color + '",width=' + width + ',label=' + tag + ")\n";
return code;
}
export const pl_pie = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
var explode = generator.valueToCode(this, 'EXPLODE', generator.ORDER_ATOMIC) || '\'\'';
var shadow = this.getFieldValue('SHADOW');
var autopct = this.getFieldValue('autopct');
if (autopct != 'None') { autopct = "'" + autopct + "'" }
var code = 'pylab.pie(' + a + ',explode=' + explode + ',labels=' + b + ',autopct=' + autopct + ',shadow=' + shadow + ")\n";
return code;
}
export const pl_hist = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
var code = 'pylab.hist(' + a + ',' + b + ")\n";
return code;
}
export const pl_ticks = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
var direction = this.getFieldValue('DIR');
var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
var code = 'pylab.' + direction + 'ticks(' + a + ',' + b + ",fontproperties = '" + "STSong" + "')\n";
return code;
}
export const numpy_trig = function (_, generator) {
generator.definitions_.import_numpy = "import numpy";
var argument0 = generator.valueToCode(this, 'NUM', generator.ORDER_NONE) || '0';
var operator = this.getFieldValue('OP');
var code = "";
code = "numpy." + operator + '(' + argument0 + ')';
return [code, generator.ORDER_ATOMIC];
}
export const pl_subplot = function (_, generator) {
generator.definitions_.import_numpy = "import numpy";
var from = generator.valueToCode(this, "VET", generator.ORDER_NONE) || "0";
var end = generator.valueToCode(this, "HOR", generator.ORDER_NONE) || "0";
var step = generator.valueToCode(this, "NUM", generator.ORDER_NONE) || "0";
var code = "pylab.subplot(" + from + ", " + end + ", " + step + ")\n";
return code
}
export const pandas_readcsv = function (_, generator) {
// For each loop.
generator.definitions_.import_pandas = "import pandas";
var fn = generator.valueToCode(this, 'FILENAME', generator.ORDER_ATOMIC);
var mode = this.getFieldValue('MODE');
var code = 'pandas.read_csv(' + fn + ', header=' + mode + ')';
return [code, generator.ORDER_ATOMIC];
}
export const dataframe_get = function (_, generator) {
var mode = this.getFieldValue('MODE');
var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || '0';
var text = generator.valueToCode(this, 'KEY', generator.ORDER_ASSIGNMENT);
if (mode == "column") {
var code = varName + "[" + text + "]";
}
else if (mode == 'raw') {
var code = varName + ".loc[" + text + "]";
}
return [code, generator.ORDER_ATOMIC];
}
export const pl_savefig = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
var code = "pylab.savefig(" + file + ")\n";
return code;
}
export const pl_text = function (_, generator) {
generator.definitions_.import_numpy = "import numpy";
var from = generator.valueToCode(this, "VET", generator.ORDER_NONE) || "0";
var end = generator.valueToCode(this, "HOR", generator.ORDER_NONE) || "0";
var step = generator.valueToCode(this, "NUM", generator.ORDER_NONE) || "0";
var halign = this.getFieldValue('HALIGN');
var valign = this.getFieldValue('VALIGN');
var fontnum = generator.valueToCode(this, 'FONTNUM', generator.ORDER_ASSIGNMENT) || '0';
var code = "pylab.text(" + from + ", " + end + ", " + step + ", ha='" + halign + "', va='" + valign + "', fontsize=" + fontnum + ")\n";
return code
}
export const array_toarray = function (_, generator) {
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '0';
generator.definitions_['import_numpy'] = 'import numpy';
var code = 'numpy.array(' + str + ')';
return [code, generator.ORDER_ATOMIC];
}
export const plot_show = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = 'import matplotlib.pyplot as plt';
var code = 'plt.show()\n';
return code;
}
export const plot_axes = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = 'import matplotlib.pyplot as plt';
var code = 'plt.axes(aspect=1)\n';
return code;
}
export const plot_plot_easy = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = 'import matplotlib.pyplot as plt';
var varName = generator.valueToCode(this, 'SER', generator.ORDER_ASSIGNMENT) || '0';
var code = 'plt.plot(' + varName + ")\n";
return code;
}
export const plot_plot = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = 'import matplotlib.pyplot as plt';
var line = this.getFieldValue('LINE');
var color = this.getFieldValue('COLOR');
var dot = this.getFieldValue('DOT');
var varName = generator.valueToCode(this, 'SER', generator.ORDER_ASSIGNMENT) || '0';
var code = 'plt.plot(' + varName + ", '" + dot + line + color + "')\n";
return code;
}
export const plot_legend = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = 'import matplotlib.pyplot as plt';
generator.definitions_.import_matplotlib_font_manager = "import matplotlib.font_manager";
var code = 'plt.legend(' + 'prop=matplotlib.font_manager.FontProperties("' + "STSong" + '")' + ')\n';
return code;
}
export const plot_title = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = 'import matplotlib.pyplot as plt';
var a = generator.valueToCode(this, 'TITLE', generator.ORDER_ATOMIC);
var code = 'plt.title(' + a + ', fontproperties="' + "STSong" + '")\n';
return code;
}
export const plot_label = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = 'import matplotlib.pyplot as plt';
var direction = this.getFieldValue('DIR');
var a = generator.valueToCode(this, 'LABEL', generator.ORDER_ATOMIC);
var code = 'plt.' + direction + 'label(' + a + ', fontproperties="' + "STSong" + '")\n';
return code;
}
export const plot_plot_bar = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = 'import matplotlib.pyplot as plt';
var direction = this.getFieldValue('DIR');
var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
var code = 'plt.' + direction + '(' + a + ', ' + b + ")\n";
return code;
}
export const plot_plot_scatter = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = 'import matplotlib.pyplot as plt';
var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
var s = generator.valueToCode(this, 'S', generator.ORDER_ATOMIC) || '\'\'';
var color = this.getFieldValue('COLOR');
var dot = this.getFieldValue('DOT');
var tag = generator.valueToCode(this, 'TAG', generator.ORDER_ATOMIC) || '\'\'';
var code = 'plt.scatter(' + a + ', ' + b + ", s=" + s + ", c='" + color + "', marker='" + dot + "', label=" + tag + ")\n";
return code;
}
export const plot_plot_xy = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = 'import matplotlib.pyplot as plt';
var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
var line = this.getFieldValue('LINE');
var color = this.getFieldValue('COLOR');
var dot = this.getFieldValue('DOT');
var tag = generator.valueToCode(this, 'TAG', generator.ORDER_ATOMIC) || '\'\'';
var code = 'plt.plot(' + a + ', ' + b + ", '" + dot + line + color + "'" + ', label=' + tag + ")\n";
return code;
}
export const plot_bar = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = 'import matplotlib.pyplot as plt';
var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
var tag = generator.valueToCode(this, 'TAG', generator.ORDER_ATOMIC) || '\'\'';
var width = generator.valueToCode(this, 'WIDTH', generator.ORDER_RELATIONAL) || '0';
var color = this.getFieldValue('COLOR')
var align = this.getFieldValue('ALIGN');
var code = 'plt.bar(' + a + ', ' + b + ', align="' + align + '", color="' + color + '", width=' + width + ', label=' + tag + ")\n";
return code;
}
export const plot_pie = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = 'import matplotlib.pyplot as plt';
var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
var explode = generator.valueToCode(this, 'EXPLODE', generator.ORDER_ATOMIC) || '\'\'';
var shadow = this.getFieldValue('SHADOW');
var autopct = this.getFieldValue('autopct');
if (autopct != 'None') { autopct = "'" + autopct + "'" }
var code = 'plt.pie(' + a + ', explode=' + explode + ', labels=' + b + ', autopct=' + autopct + ', shadow=' + shadow + ")\n";
return code;
}
export const plot_hist = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = 'import matplotlib.pyplot as plt';
var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
var code = 'plt.hist(' + a + ', ' + b + ")\n";
return code;
}
export const plot_ticks = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = 'import matplotlib.pyplot as plt';
var direction = this.getFieldValue('DIR');
var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
var code = 'plt.' + direction + 'ticks(' + a + ', ' + b + ", fontproperties = '" + "STSong" + "')\n";
return code;
}
export const plot_subplot = function (_, generator) {
generator.definitions_.import_numpy = "import numpy";
generator.definitions_.import_matplotlib_pyplot = 'import matplotlib.pyplot as plt';
var from = generator.valueToCode(this, "VET", generator.ORDER_NONE) || "0";
var end = generator.valueToCode(this, "HOR", generator.ORDER_NONE) || "0";
var step = generator.valueToCode(this, "NUM", generator.ORDER_NONE) || "0";
var code = "plt.subplot(" + from + ", " + end + ", " + step + ")\n";
return code
}
export const plot_savefig = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = 'import matplotlib.pyplot as plt';
var code = "plt.savefig('1.png')\n";
return code;
}
export const plot_text = function (_, generator) {
generator.definitions_.import_numpy = "import numpy";
generator.definitions_.import_matplotlib_pyplot = 'import matplotlib.pyplot as plt';
var from = generator.valueToCode(this, "VET", generator.ORDER_NONE) || "0";
var end = generator.valueToCode(this, "HOR", generator.ORDER_NONE) || "0";
var step = generator.valueToCode(this, "NUM", generator.ORDER_NONE) || "0";
var halign = this.getFieldValue('HALIGN');
var valign = this.getFieldValue('VALIGN');
var fontnum = generator.valueToCode(this, 'FONTNUM', generator.ORDER_ASSIGNMENT) || '0';
var code = "plt.text(" + from + ", " + end + ", " + step + ", ha='" + halign + "', va='" + valign + "', fontsize=" + fontnum + ")\n";
return code
}
export const numpy_shape = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var array = generator.valueToCode(block, 'ARRAY', generator.ORDER_ATOMIC) || '[]';
var code = 'numpy.shape(' + array + ')';
return [code, generator.ORDER_ATOMIC];
}
export const numpy_reshape = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var array = generator.valueToCode(block, 'ARRAY', generator.ORDER_ATOMIC) || '[]';
var dimensions = generator.valueToCode(block, 'DIMENSIONS', generator.ORDER_ATOMIC) || '(1, -1)';
var code = 'numpy.reshape(' + array + ', ' + dimensions + ')';
return [code, generator.ORDER_ATOMIC];
}
export const numpy_astype = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var array = generator.valueToCode(block, 'ARRAY', generator.ORDER_ATOMIC) || '[]';
var dtype = block.getFieldValue('TYPE');
var code = array + '.astype(' + dtype + ')';
return [code, generator.ORDER_ATOMIC];
}
export const pylab_imshow = function (block, generator) {
generator.definitions_.import_pylab = "import pylab";
var array = generator.valueToCode(block, 'ARRAY', generator.ORDER_ATOMIC) || '[]';
var colormap = block.getFieldValue('COLORMAP') || 'gray';
var code = 'pylab.imshow(' + array + ', cmap="' + colormap + '")\n';
return code;
}
export const numpy_mean_digit = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var X = generator.valueToCode(block, 'X', generator.ORDER_ATOMIC) || '[]';
var y = generator.valueToCode(block, 'Y', generator.ORDER_ATOMIC) || '[]';
var digit = generator.valueToCode(block, 'DIGIT', generator.ORDER_ATOMIC) || '0';
var code = 'numpy.mean(' + X + '[' + y + ' == ' + digit + '], axis=0)';
return [code, generator.ORDER_ATOMIC];
}
export const numpy_argmin_template_match = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
generator.definitions_.import_cv2 = "import cv2";
var image = generator.valueToCode(block, 'IMAGE', generator.ORDER_ATOMIC) || '[]';
var templates = generator.valueToCode(block, 'TEMPLATES', generator.ORDER_ATOMIC) || '[]';
var code = 'numpy.argmin([numpy.sum(cv2.absdiff(' + image + ', template)) for template in ' + templates + '])';
return [code, generator.ORDER_ATOMIC];
}
export const numpy_mean = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var array = generator.valueToCode(block, 'ARRAY', generator.ORDER_ATOMIC) || '[]';
var axis = block.getFieldValue('AXIS');
if (axis === 'NONE') {
var code = 'numpy.mean(' + array + ')';
} else {
var code = 'numpy.mean(' + array + ', axis=' + axis + ')';
}
return [code, generator.ORDER_ATOMIC];
}
export const numpy_std = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var array = generator.valueToCode(block, 'ARRAY', generator.ORDER_ATOMIC) || '[]';
var axis = block.getFieldValue('AXIS');
if (axis === 'NONE') {
var code = 'numpy.std(' + array + ')';
} else {
var code = 'numpy.std(' + array + ', axis=' + axis + ')';
}
return [code, generator.ORDER_ATOMIC];
}
export const pandas_dropna = function (block, generator) {
generator.definitions_.import_pandas = "import pandas";
var df = generator.valueToCode(block, 'DF', generator.ORDER_ATOMIC) || 'df';
var code = df + '.dropna()';
return [code, generator.ORDER_MEMBER];
}
export const pandas_drop_columns = function (block, generator) {
generator.definitions_.import_pandas = "import pandas";
var dataframe = generator.valueToCode(block, 'DATAFRAME', generator.ORDER_ATOMIC) || 'df';
var columns = generator.valueToCode(block, 'COLUMNS', generator.ORDER_ATOMIC) || '[]';
var code = dataframe + '.drop(columns=' + columns + ', axis=1)';
return [code, generator.ORDER_ATOMIC];
}
export const numpy_ones = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var num = generator.valueToCode(block, 'NUM', generator.ORDER_ATOMIC) || '1';
var code = 'numpy.ones(' + num + ')';
return [code, generator.ORDER_ATOMIC];
}
export const numpy_c_ = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var array1 = generator.valueToCode(block, 'ARRAY1', generator.ORDER_ATOMIC) || '[]';
var array2 = generator.valueToCode(block, 'ARRAY2', generator.ORDER_ATOMIC) || '[]';
var code = 'numpy.c_[' + array1 + ', ' + array2 + ']';
return [code, generator.ORDER_ATOMIC];
}
export const numpy_linalg_det = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
generator.definitions_.import_linalg = "import numpy.linalg";
var array = generator.valueToCode(block, 'ARRAY', generator.ORDER_ATOMIC) || '[]';
var code = 'numpy.linalg.det(' + array + ')';
return [code, generator.ORDER_ATOMIC];
}
export const matrix_transpose = function (block, generator) {
var matrix = generator.valueToCode(block, 'MATRIX', generator.ORDER_ATOMIC) || '[]';
var code = matrix + '.T';
return [code, generator.ORDER_ATOMIC];
}
export const matrix_multiplication = function (block, generator) {
var matrix1 = generator.valueToCode(block, 'MATRIX1', generator.ORDER_ATOMIC) || '[]';
var matrix2 = generator.valueToCode(block, 'MATRIX2', generator.ORDER_ATOMIC) || '[]';
var code = matrix1 + ' @ ' + matrix2;
return [code, generator.ORDER_ATOMIC];
}
export const numpy_linalg_inv = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
generator.definitions_.import_linalg = "import numpy.linalg";
var array = generator.valueToCode(block, 'ARRAY', generator.ORDER_ATOMIC) || '[]';
var code = 'numpy.linalg.inv(' + array + ')';
return [code, generator.ORDER_ATOMIC];
}
export const dataframe_median = function (block, generator) {
var dataframe = generator.valueToCode(block, 'DATAFRAME', generator.ORDER_ATOMIC) || 'df';
var code = dataframe + '.median()';
return [code, generator.ORDER_ATOMIC];
}
export const dataframe_fillna = function (block, generator) {
var dataframe = generator.valueToCode(block, 'DATAFRAME', generator.ORDER_ATOMIC) || 'df';
var value = generator.valueToCode(block, 'VALUE', generator.ORDER_ATOMIC) || '0';
var inplace = block.getFieldValue('INPLACE') || 'False';
var code = dataframe + '.fillna(value=' + value + ', inplace=' + inplace + ')\n';
return code;
}
export const dataframe_info = function (block, generator) {
var dataframe = generator.valueToCode(block, 'DATAFRAME', generator.ORDER_ATOMIC) || 'df';
var code = dataframe + '.info()';
return [code, generator.ORDER_ATOMIC];
}
export const numpy_min = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var array = generator.valueToCode(block, 'ARRAY', generator.ORDER_ATOMIC) || '[]';
var axis = block.getFieldValue('AXIS');
var code = (axis === 'None') ? 'numpy.min(' + array + ')' : 'numpy.min(' + array + ', axis=' + axis + ')';
return [code, generator.ORDER_ATOMIC];
}
export const numpy_max = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var array = generator.valueToCode(block, 'ARRAY', generator.ORDER_ATOMIC) || '[]';
var axis = block.getFieldValue('AXIS');
var code = (axis === 'None') ? 'numpy.max(' + array + ')' : 'numpy.max(' + array + ', axis=' + axis + ')';
return [code, generator.ORDER_ATOMIC];
}
export const numpy_size = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var array = generator.valueToCode(block, 'ARRAY', generator.ORDER_ATOMIC) || '[]';
var code = array + '.size';
return [code, generator.ORDER_ATOMIC];
}
export const numpy_dot = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var array1 = generator.valueToCode(block, 'ARRAY1', generator.ORDER_ATOMIC) || '[]';
var array2 = generator.valueToCode(block, 'ARRAY2', generator.ORDER_ATOMIC) || '[]';
var code = 'numpy.dot(' + array1 + ', ' + array2 + ')';
return [code, generator.ORDER_ATOMIC];
}
export const numpy_square = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var array = generator.valueToCode(block, 'ARRAY', generator.ORDER_ATOMIC) || '[]';
var code = 'numpy.square(' + array + ')';
return [code, generator.ORDER_ATOMIC];
}
export const numpy_sum = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var array = generator.valueToCode(block, 'ARRAY', generator.ORDER_ATOMIC) || '[]';
var code = 'numpy.sum(' + array + ')';
return [code, generator.ORDER_ATOMIC];
}
export const numpy_random_random = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var size = generator.valueToCode(block, 'SIZE', generator.ORDER_ATOMIC) || '1';
var code = 'numpy.random.random(' + size + ')';
return [code, generator.ORDER_ATOMIC];
}
export const py_sum = function (block, generator) {
var array = generator.valueToCode(block, 'ARRAY', generator.ORDER_ATOMIC) || '[]';
var code = 'sum(' + array + ')';
return [code, generator.ORDER_ATOMIC];
}
export const dataframe_sort_values = function (block, generator) {
const dict = generator.valueToCode(block, 'DICT', generator.ORDER_ATOMIC) || 'df';
const key = generator.valueToCode(block, 'KEY', generator.ORDER_ATOMIC) || '\'tag\'';
const ascending = block.getFieldValue('AS_CENDING');
const code = `${dict}.sort_values(by=${key}, ascending=${ascending})`;
return [code, generator.ORDER_ATOMIC];
}
export const dataframe_head_tail = function (block, generator) {
const dict = generator.valueToCode(block, 'DICT', generator.ORDER_ATOMIC) || 'df';
const lines = generator.valueToCode(block, 'LINES', generator.ORDER_ATOMIC) || '1';
const type = block.getFieldValue('TYPE');
const code = `${dict}.${type}(${lines})`;
return [code, generator.ORDER_ATOMIC];
}
export const dataframe_select = function (block, generator) {
const dict = generator.valueToCode(block, 'DICT', generator.ORDER_ATOMIC) || 'df';
const key = generator.valueToCode(block, 'KEY', generator.ORDER_ATOMIC) || 'df[\'tag\'] > 1';
const code = `${dict}[${key}]`;
return [code, generator.ORDER_ATOMIC];
}
export const dataframe_groupby = function (block, generator) {
const dict = generator.valueToCode(block, 'DICT', generator.ORDER_ATOMIC) || 'df';
const key = generator.valueToCode(block, 'KEY', generator.ORDER_ATOMIC) || '\'tag\'';
const code = `${dict}.groupby(by=${key})`;
return [code, generator.ORDER_ATOMIC];
}
export const dataframe_aggregate_func = function (block, generator) {
const dict = generator.valueToCode(block, 'DICT', generator.ORDER_ATOMIC) || 'df';
const type = block.getFieldValue('TYPE');
const code = `${dict}.${type}()`;
return [code, generator.ORDER_ATOMIC];
}
export const plot_cla = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = 'import matplotlib.pyplot as plt';
var code = 'plt.cla()\n';
return code;
}

View File

@@ -0,0 +1,176 @@
import * as Blockly from 'blockly/core';
export const ds_create_linkedlist = function (_, generator) {
// Create a list with any number of elements of any type.
//var dropdown_type = this.getFieldValue('TYPE');
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
Blockly.Variables.NAME_TYPE);
var typeName = generator.variableDB_.getName(this.getFieldValue('TYPE'),
Blockly.Variables.NAME_TYPE);
//var size=window.parseFloat(this.getFieldValue('SIZE'));
var code = 'class ' + typeName + ":\n";
code += ' def __init__(self):\n';
var attr = new Array(this.itemCount_);
var default_value = '0';
for (var n = 0; n < this.itemCount_; n++) {
var keyName = this.getFieldValue('KEY' + n);
attr[n] = ' self.' + keyName + " = " + (generator.valueToCode(this, 'ADD' + n, generator.ORDER_NONE) || default_value);
}
code += attr.join('\n') + '\n';
code += ' self.next = None\n';
code += varName + ' = ' + typeName + '()\n'
return code;
}
export const ds_create_node = function (_, generator) {
var varName = generator.valueToCode(this, 'NODE', generator.ORDER_ASSIGNMENT) || '0';
var typeName = generator.variableDB_.getName(this.getFieldValue('TYPE'),
Blockly.Variables.NAME_TYPE);
//var size=window.parseFloat(this.getFieldValue('SIZE'));
var code = varName + ' = ' + typeName + '()\n';
return code;
}
export const ds_get_node_attr = function (_, generator) {
var varName = generator.valueToCode(this, 'NODE', generator.ORDER_ASSIGNMENT) || '0';
var typeName = generator.variableDB_.getName(this.getFieldValue('TYPE'),
Blockly.Variables.NAME_TYPE);
var code = varName + '.' + typeName;
return [code, generator.ORDER_ATOMIC];
}
export const ds_set_node_attr = function (_, generator) {
var varName = generator.valueToCode(this, 'NODE', generator.ORDER_ASSIGNMENT) || '0';
var typeName = generator.variableDB_.getName(this.getFieldValue('TYPE'),
Blockly.Variables.NAME_TYPE);
var argument = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + '.' + typeName + ' = ' + argument + '\n';
return code;
}
export const ds_add_node_by_name = function (_, generator) {
var varName = generator.valueToCode(this, 'NODE', generator.ORDER_ASSIGNMENT) || '0';
var varName2 = generator.valueToCode(this, 'NODE2', generator.ORDER_ASSIGNMENT) || '0';
var varName3 = generator.valueToCode(this, 'NODE3', generator.ORDER_ASSIGNMENT) || '0';
var direction = this.getFieldValue('DIR');
if (direction == 'after') {
var code = 'now = ' + varName + '\n';
code += 'while now != ' + varName2 + ' and now != None:\n';
code += ' now = now.next\n';
code += 'if now != None:\n'
code += ' ' + varName3 + '.next = now.next\n';
code += ' ' + 'now.next = ' + varName3 + '\n';
code += ' print("插入节点成功")\n';
code += 'else:\n'
code += ' print("插入节点失败,未找到指定名称的节点")\n';
}
if (direction == 'before') {
var code = 'if ' + varName + ' == ' + varName2 + ':\n';
code += ' ' + varName3 + '.next = ' + varName + '\n';
code += 'else:\n'
code += ' now = ' + varName + '\n';
code += ' while now.next != ' + varName2 + " and now.next != None:\n";
code += ' now = now.next\n';
code += ' if now != None:\n'
code += ' ' + varName3 + '.next = now.next\n';
code += ' now.next = ' + varName3 + '\n';
code += ' print("插入节点成功")\n';
code += ' else:\n'
code += ' print("插入节点失败,未找到指定名称的节点")\n';
}
return code;
}
export const ds_add_node_by_attr = function (_, generator) {
var varName = generator.valueToCode(this, 'NODE', generator.ORDER_ASSIGNMENT) || '0';
var varName2 = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
var varName3 = generator.valueToCode(this, 'NODE3', generator.ORDER_ASSIGNMENT) || '0';
var typeName = generator.variableDB_.getName(this.getFieldValue('TYPE'),
Blockly.Variables.NAME_TYPE);
var direction = this.getFieldValue('DIR');
if (direction == 'after') {
var code = 'now = ' + varName + '\n';
code += 'while now.' + typeName + ' != ' + varName2 + ' and now != None:\n';
code += ' now = now.next\n';
code += 'if now != None:\n'
code += ' ' + varName3 + '.next = now.next\n';
code += ' ' + 'now.next = ' + varName3 + '\n';
code += ' print("插入节点成功")\n';
code += 'else:\n'
code += ' print("插入节点失败,未找到指定的节点")\n';
}
if (direction == 'before') {
var code = 'if ' + varName + '.' + typeName + ' == ' + varName2 + ':\n';
code += ' ' + varName3 + '.next = ' + varName + '\n';
code += 'else:\n'
code += ' now = ' + varName + '\n';
code += ' while now.next.' + typeName + ' != ' + varName2 + "and now.next != None:\n";
code += ' now = now.next\n';
code += ' if now != None:\n'
code += ' ' + varName3 + '.next = now.next\n';
code += ' now.next = ' + varName3 + '\n';
code += ' print("插入节点成功")\n';
code += ' else:\n'
code += ' print("插入节点失败,未找到指定的节点")\n';
}
return code;
}
export const ds_del_node_by_name = function (_, generator) {
var varName = generator.valueToCode(this, 'NODE', generator.ORDER_ASSIGNMENT) || '0';
var varName2 = generator.valueToCode(this, 'NODE2', generator.ORDER_ASSIGNMENT) || '0';
var code = 'if ' + varName + ' == ' + varName2 + ':\n';
code += ' ' + varName + '.next = None\n';
code += 'else:\n'
code += ' now = ' + varName + '\n';
code += ' while now.next != ' + varName2 + " and now.next != None:\n";
code += ' now = now.next\n';
code += ' if now != None:\n'
code += ' now.next = now.next.next\n';
code += ' print("删除节点成功")\n';
code += ' else:\n'
code += ' print("删除节点失败,未找到指定名称的节点")\n';
return code;
}
export const ds_del_node_by_attr = function (_, generator) {
var varName = generator.valueToCode(this, 'NODE', generator.ORDER_ASSIGNMENT) || '0';
var varName2 = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
var typeName = generator.variableDB_.getName(this.getFieldValue('TYPE'),
Blockly.Variables.NAME_TYPE);
var code = 'if ' + varName + '.' + typeName + ' == ' + varName2 + ':\n';
code += ' ' + varName + '.next = None\n';
code += 'else:\n'
code += ' now = ' + varName + '\n';
code += ' while now.next.' + typeName + ' != ' + varName2 + " and now.next != None:\n";
code += ' now = now.next\n';
code += ' if now != None:\n'
code += ' now.next = now.next.next\n';
code += ' print("删除节点成功")\n';
code += ' else:\n'
code += ' print("删除节点失败,未找到指定的节点")\n';
return code;
}
export const ds_reverse_linkedlist = function (_, generator) {
var varName = generator.valueToCode(this, 'NODE', generator.ORDER_ASSIGNMENT) || '0';
var varName2 = generator.valueToCode(this, 'NODE2', generator.ORDER_ASSIGNMENT) || '0';
var code = 'ptr = ' + varName + '\n';
code += 'before = None\n';
code += 'while ptr != None:\n'
code += ' last = before\n';
code += ' before = ptr\n';
code += ' ptr = ptr.next\n';
code += ' before.next = last\n'
code += varName2 + ' = before\n';
return code;
}

View File

@@ -0,0 +1,86 @@
export const factory_from_import = function (_, generator) {
var path = this.getFieldValue('path');
var module = this.getFieldValue('module');
generator.definitions_['import_' + path + '_' + module] = 'from ' + path + ' import ' + module;
return '';
}
export const factory_import = function (_, generator) {
var module = this.getFieldValue('module');
generator.definitions_['import_' + module] = 'import ' + module;
return '';
}
export const factory_function_noreturn = function (_, generator) {
var NAME = this.getFieldValue('NAME');
var code = new Array(this.itemCount_);
for (var n = 0; n < this.itemCount_; n++) {
code[n] = generator.valueToCode(this, 'ADD' + n,
generator.ORDER_NONE) || '';
}
return NAME + '(' + code.join(', ') + ')\n';
}
export const factory_function_return = function (_, generator) {
var NAME = this.getFieldValue('NAME');
var code = new Array(this.itemCount_);
for (var n = 0; n < this.itemCount_; n++) {
code[n] = generator.valueToCode(this, 'ADD' + n,
generator.ORDER_NONE) || '';
}
return [NAME + '(' + code.join(', ') + ')', generator.ORDER_ATOMIC];
}
export const factory_declare = function () {
var TYPE = this.getFieldValue('TYPE');
var NAME = this.getFieldValue('NAME');
return NAME + ' = ' + TYPE + '()\n';
}
export const factory_callMethod_noreturn = function (_, generator) {
var NAME = this.getFieldValue('NAME');
var METHOD = this.getFieldValue('METHOD');
var code = new Array(this.itemCount_);
for (var n = 0; n < this.itemCount_; n++) {
code[n] = generator.valueToCode(this, 'ADD' + n,
generator.ORDER_NONE) || '';
}
return NAME + '.' + METHOD + '(' + code.join(', ') + ')\n';
}
export const factory_callMethod_return = function (_, generator) {
var NAME = this.getFieldValue('NAME');
var METHOD = this.getFieldValue('METHOD');
var code = new Array(this.itemCount_);
for (var n = 0; n < this.itemCount_; n++) {
code[n] = generator.valueToCode(this, 'ADD' + n,
generator.ORDER_NONE) || '';
}
return [NAME + '.' + METHOD + '(' + code.join(', ') + ')', generator.ORDER_ATOMIC];
}
export const factory_block = function () {
var VALUE = this.getFieldValue('VALUE');
//if(!(VALUE.charAt(VALUE.length-1)==";")){
//VALUE=VALUE+';';
//}
return VALUE + '\n';
}
export const factory_block_return = function (_, generator) {
var VALUE = this.getFieldValue('VALUE');
return [VALUE, generator.ORDER_ATOMIC];
}
export const factory_block_with_textarea = function () {
var VALUE = this.getFieldValue('VALUE');
//if(!(VALUE.charAt(VALUE.length-1)==";")){
//VALUE=VALUE+';';
//}
return VALUE + '\n';
}
export const factory_block_return_with_textarea = function (_, generator) {
var VALUE = this.getFieldValue('VALUE');
return [VALUE, generator.ORDER_ATOMIC];
}

View File

@@ -0,0 +1,53 @@
import { JSFuncs } from 'mixly';
export const hardware_arduino_start = function (_, generator) {
generator.definitions_['import_s4alib'] = 'import s4alib';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
// var code= v + '.start()\n';
var code = v + ' = s4alib.s4a_start("' + JSFuncs.getCom() + '")\n';
return code;
}
export const inout_highlow = function (_, generator) {
// Boolean values HIGH and LOW.
var code = (this.getFieldValue('BOOL') == 'HIGH') ? '1' : '0';
return [code, generator.ORDER_ATOMIC];
}
export const hardware_arduino_digital_write = function (_, generator) {
generator.definitions_['import_s4alib'] = 'import s4alib';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);
var code = "";
code += '' + v + '.digital_write(' + dropdown_pin + ',' + dropdown_stat + ')\n'
return code;
}
export const hardware_arduino_digital_read = function (_, generator) {
generator.definitions_['import_s4alib'] = 'import s4alib';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var code = "";
code = '' + v + '.digital_read(' + dropdown_pin + ')';
return [code, generator.ORDER_ATOMIC];
}
export const hardware_arduino_analog_read = function (_, generator) {
generator.definitions_['import_s4alib'] = 'import s4alib';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var code = "";
code = '' + v + '.analog_read(' + dropdown_pin + ')';
return [code, generator.ORDER_ATOMIC];
}
export const hardware_arduino_analog_write = function (_, generator) {
generator.definitions_['import_s4alib'] = 'import s4alib';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var value_num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
var code = "";
code += '' + v + '.analog_write(' + dropdown_pin + ',' + value_num + ')\n'
return code;
}

View File

@@ -0,0 +1,55 @@
export const inout_input = function (_, generator) {
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
return ['input(' + str + ')', generator.ORDER_ATOMIC];
}
export const inout_print = function (_, generator) {
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
var code = "print(" + str + ")\n";
return code;
}
export const inout_print_inline = function (_, generator) {
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
var code = "print(" + str + ',end ="")\n';
return code;
}
export const inout_print_end = function (_, generator) {
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
var end = generator.valueToCode(this, 'END', generator.ORDER_ATOMIC) || '""';
var code = "print(" + str + ',end =' + end + ')\n';
return code;
}
export const inout_type_input = function (_, generator) {
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
var type = this.getFieldValue('DIR');
if (type == 'str') { var code = 'input(' + str + ')' }
else if (type == 'int') { var code = 'int(input(' + str + '))' }
else if (type == 'float') { var code = 'float(input(' + str + '))' }
//var code=varname+"." + type + "(" + ')';
return [code, generator.ORDER_ATOMIC];
}
export const pyinout_type_input = function (_, generator) {
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
var type = this.getFieldValue('DIR');
generator.definitions_['import_pyinput'] = 'import pyinput';
if (type == 'str') { var code = 'pyinput.input(' + str + ')' }
else if (type == 'int') { var code = 'int(pyinput.input(' + str + '))' }
else if (type == 'float') { var code = 'float(pyinput.input(' + str + '))' }
//var code=varname+"." + type + "(" + ')';
return [code, generator.ORDER_ATOMIC];
}
export const inout_print_many = function (_, generator) {
var code = new Array(this.itemCount_);
var default_value = '0';
for (var n = 0; n < this.itemCount_; n++) {
code[n] = generator.valueToCode(this, 'ADD' + n,
generator.ORDER_NONE) || default_value;
}
var code = 'print(' + code.join(', ') + ')\n';
return code;
}

View File

@@ -0,0 +1,129 @@
export const iot_mixio_connect = function (_, generator) {
generator.definitions_['import_mixiot'] = "import mixiot";
var server = generator.valueToCode(this, 'SERVER', generator.ORDER_ATOMIC);
var username = generator.valueToCode(this, 'USERNAME', generator.ORDER_ATOMIC);
var password = generator.valueToCode(this, 'PASSWORD', generator.ORDER_ATOMIC);
var project = generator.valueToCode(this, 'PROJECT', generator.ORDER_ATOMIC);
var timestamp = Math.round(new Date()).toString();
//var subscribe = generator.valueToCode(this, 'SUB', generator.ORDER_ASSIGNMENT) || '0';
var a = "f'python-mqtt-" + username.replace("'", "").replace("'", "") + timestamp.replace("'", "").replace("'", "") + "'";
var code = 'mqtt_client = mixiot.MixIO(' + server + ', 1883 ,' + username + ', ' + password + ', ' + project + ', ' + a + ')\n';
return code;
}
export const IOT_MIXIO_PUBLISH = function (_, generator) {
var topic = generator.valueToCode(this, 'TOPIC', generator.ORDER_ATOMIC);
var msg = generator.valueToCode(this, 'MSG', generator.ORDER_ATOMIC);
generator.definitions_['import_mixiot'] = "import mixiot";
var code = 'mqtt_client.publish(' + topic + ', ' + msg + ')\n';
return code;
}
export const IOT_MIXIO_PUBLISHEX = function (_, generator) {
var topic = generator.valueToCode(this, 'TOPIC', generator.ORDER_ATOMIC);
var msg = generator.valueToCode(this, 'MSG', generator.ORDER_ATOMIC);
var q = this.getFieldValue('quality');
generator.definitions_['import_mixiot'] = "import mixiot";
var code = 'mqtt_client.publish(MQTT_USR_PRJ + ' + topic + ', ' + msg + ', qos='+ q +')\n';
return code;
}
export const IOT_MIXIO_SUBSCRIBE = function (_, generator) {
var topic = generator.valueToCode(this, 'TOPIC', generator.ORDER_ATOMIC);
var method = generator.valueToCode(this, 'METHOD', generator.ORDER_ATOMIC);
generator.definitions_['import_mixiot'] = "import mixiot";
var code = 'mqtt_client.subscribe_and_set_callback(' + topic + ',' + method + ')\n';
return code;
}
export const IOT_MIXIO_UNSUBSCRIBE = function (_, generator) {
var topic = generator.valueToCode(this, 'TOPIC', generator.ORDER_ATOMIC);
generator.definitions_['import_mixiot'] = "import mixiot";
var code = 'mqtt_client.unsubscribe(' + topic + ')\n';
return code;
}
export const iot_mixio_disconnect = function (_, generator) {
generator.definitions_['import_mixiot'] = "import mixiot";
var code = 'mqtt_client.disconnect()\n';
return code;
}
export const iot_mixio_connect_only = function (_, generator) {
generator.definitions_['import_mixiot'] = "import mixiot";
var code = 'mqtt_client.connect()\n';
return code;
}
export const iot_mixio_check = function (_, generator) {
generator.definitions_['import_mixiot'] = "import mixiot";
var code = 'mqtt_client.check_msg()\n';
return code;
}
export const iot_mixio_format_topic = function (_, generator) {
var code = 'mqtt_client.decode("utf-8").split("/")[-1]';
return [code, generator.ORDER_ATOMIC];
}
export const iot_mixio_format_msg = function (_, generator) {
var code = 'mqtt_client.decode("utf-8")';
return [code, generator.ORDER_ATOMIC];
}
export const IOT_FORMATTING = function (_, generator) {
generator.definitions_['import_mixpy'] = "import mixpy";
var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = 'mixpy.format_content(' + v + ', mqtt_client.client_id)';
return [code, generator.ORDER_ATOMIC];
}
export const IOT_FORMAT_STRING = function (_, generator) {
generator.definitions_['import_mixpy'] = "import mixpy";
var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = 'mixpy.format_str(' + v + ')';
return [code, generator.ORDER_ATOMIC];
}
export const IOT_EMQX_INIT_AND_CONNECT_BY_MIXLY_CODE = function (_, generator) {
generator.definitions_['import_mixiot'] = "import mixiot";
var server = generator.valueToCode(this, 'SERVER', generator.ORDER_ATOMIC);
var share_code = generator.valueToCode(this, 'KEY', generator.ORDER_ATOMIC);
var timestamp = Math.round(new Date()).toString();
var a = "f'python-mqtt-" + share_code.replace("'", "").replace("'", "") + timestamp.replace("'", "").replace("'", "") + "'";
var code = 'mqtt_client = mixiot.MixIO.from_mixly_key(' + server + ', 1883 ,' + share_code + ', ' + a + ')\n';
return code;
}
export const iot_mixly_key = function (_, generator) {
var code = this.getFieldValue('VISITOR_ID');
return [code, generator.ORDER_ATOMIC];
}
export const iot_mixly_key_py = function (_, generator) {
var code = this.getFieldValue('VISITOR_ID');
return ["'" + code + "'", generator.ORDER_ATOMIC];
}
export const IOT_EMQX_INIT_AND_CONNECT_BY_SHARE_CODE = function (_, generator) {
generator.definitions_['import_mixiot'] = "import mixiot";
var server = generator.valueToCode(this, 'SERVER', generator.ORDER_ATOMIC);
var mixly_code = generator.valueToCode(this, 'KEY', generator.ORDER_ATOMIC);
var timestamp = Math.round(new Date()).toString();
var a = "f'python-mqtt-" + mixly_code.replace("'", "").replace("'", "") + timestamp.replace("'", "").replace("'", "") + "'";
var code = 'mqtt_client = mixiot.MixIO.from_share_key(' + server + ', 1883 ,' + mixly_code + ', ' + a + ')\n';
return code;
}
export const IOT_EMQX_PING = function (_, generator) {
generator.definitions_['import_mixiot'] = "import mixiot";
var code = 'mqtt_client.pingSync()';
return [code, generator.ORDER_ATOMIC];
}
export const IOT_MIXIO_NTP = function (_, generator) {
generator.definitions_['import_mixiot'] = "import mixiot";
var addr = generator.valueToCode(this, 'addr', generator.ORDER_ATOMIC);
var code = 'mixiot.ntp(' + addr + ')';
return [code, generator.ORDER_ATOMIC];
}

View File

@@ -0,0 +1,9 @@
export const pins_digital = function (_, generator) {
var code = this.getFieldValue('PIN');
return [code, generator.ORDER_ATOMIC];
}
export const pins_digital_write = pins_digital;
export const pins_digital_read = pins_digital;
export const pins_analog_write = pins_digital;
export const pins_analog_read = pins_digital;

View File

@@ -0,0 +1,37 @@
import * as Blockly from 'blockly/core';
import { JSFuncs } from 'mixly';
export const serial_open = function (_, generator) {
generator.definitions_['import_serial'] = 'import serial';
var time = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '0'
var varName = generator.variableDB_.getName(this.getFieldValue('SER'),
Blockly.Variables.NAME_TYPE);
var bps = this.getFieldValue('BPS');
// var code= v + '.start()\n';
var code = varName + ' = serial.Serial("' + JSFuncs.getCom() + '", ' + bps + ', timeout=' + time + ')\n';
return code;
}
export const serial_write = function (_, generator) {
generator.definitions_['import_serial'] = 'import serial';
var ser = generator.valueToCode(this, 'SER', generator.ORDER_ADDITIVE) || 'ser';
var str = (generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""');
// var code= v + '.start()\n';
var code = ser + '.write(' + str + ')\n';
return code;
}
export const serial_read_b = function (_, generator) {
generator.definitions_['import_serial'] = 'import serial';
var ser = generator.valueToCode(this, 'SER', generator.ORDER_ADDITIVE) || 'ser';
var len = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '0'
var code = ser + '.read(' + len + ')';
return [code, generator.ORDER_ATOMIC];
}
export const serial_close = function (_, generator) {
generator.definitions_['import_serial'] = 'import serial';
var ser = generator.valueToCode(this, 'SER', generator.ORDER_ADDITIVE) || 'ser';
var code = ser + '.close()\n';
return code;
}

View File

@@ -0,0 +1,264 @@
export const sklearn_make_classification = function (_, generator) {
var value_n_samples = generator.valueToCode(this, 'n_samples', generator.ORDER_ATOMIC) || '100';
var value_n_features = generator.valueToCode(this, 'n_features', generator.ORDER_ATOMIC) || '20';
var value_n_informative = generator.valueToCode(this, 'n_informative', generator.ORDER_ATOMIC) || '2';
var value_n_redundant = generator.valueToCode(this, 'n_redundant', generator.ORDER_ATOMIC) || '2';
var value_n_repeated = generator.valueToCode(this, 'n_repeated', generator.ORDER_ATOMIC) || '0';
var value_n_classes = generator.valueToCode(this, 'n_classes', generator.ORDER_ATOMIC) || '2';
var value_n_clusters_per_class = generator.valueToCode(this, 'n_clusters_per_class', generator.ORDER_ATOMIC) || '2';
var value_random_state = generator.valueToCode(this, 'random_state', generator.ORDER_ATOMIC) || 'None';
generator.definitions_['import_sklearn_make_classification'] = 'from sklearn.datasets import make_classification';
var code = 'make_classification(n_samples=' + value_n_samples + ', n_features=' + value_n_features + ', n_informative=' + value_n_informative + ', n_redundant=' + value_n_redundant + ', n_repeated=' + value_n_repeated + ', n_classes=' + value_n_classes + ', n_clusters_per_class=' + value_n_clusters_per_class + ', random_state=' + value_random_state + ')';
return [code, generator.ORDER_ATOMIC];
}
// sklearn 生成回归样本
export const sklearn_make_regression = function (_, generator) {
var value_n_samples = generator.valueToCode(this, 'n_samples', generator.ORDER_ATOMIC) || '100';
var value_n_features = generator.valueToCode(this, 'n_features', generator.ORDER_ATOMIC) || '100';
var value_n_informative = generator.valueToCode(this, 'n_informative', generator.ORDER_ATOMIC) || '10';
var value_n_targets = generator.valueToCode(this, 'n_targets', generator.ORDER_ATOMIC) || '1';
var value_bias = generator.valueToCode(this, 'bias', generator.ORDER_ATOMIC) || '0.0';
var value_noise = generator.valueToCode(this, 'noise', generator.ORDER_ATOMIC) || '0.0';
var value_random_state = generator.valueToCode(this, 'random_state', generator.ORDER_ATOMIC) || 'None';
generator.definitions_['import_sklearn_make_regression'] = 'from sklearn.datasets import make_regression';
var code = 'make_regression(n_samples=' + value_n_samples + ', n_features=' + value_n_features + ', n_informative=' + value_n_informative + ', n_targets=' + value_n_targets + ', bias=' + value_bias + ', noise=' + value_noise + ', random_state=' + value_random_state + ')';
return [code, generator.ORDER_ATOMIC];
}
// sklearn 生成聚类样本
export const sklearn_make_blobs = function (_, generator) {
var value_n_samples = generator.valueToCode(this, 'n_samples', generator.ORDER_ATOMIC) || '100';
var value_n_features = generator.valueToCode(this, 'n_features', generator.ORDER_ATOMIC) || '2';
var value_centers = generator.valueToCode(this, 'centers', generator.ORDER_ATOMIC) || 'None';
var value_cluster_std = generator.valueToCode(this, 'cluster_std', generator.ORDER_ATOMIC) || '1.0';
var value_center_box = generator.valueToCode(this, 'center_box', generator.ORDER_ATOMIC) || '(-10.0,10.0)';
var value_shuffle = generator.valueToCode(this, 'shuffle', generator.ORDER_ATOMIC) || 'True';
var value_random_state = generator.valueToCode(this, 'random_state', generator.ORDER_ATOMIC) || 'None';
generator.definitions_['import_sklearn_make_blobs'] = 'from sklearn.datasets import make_blobs';
var code = 'make_blobs(n_samples=' + value_n_samples + ', n_features=' + value_n_features + ', centers=' + value_centers + ', cluster_std=' + value_cluster_std + ', center_box=' + value_center_box + ', shuffle=' + value_shuffle + ', random_state=' + value_random_state + ')';
return [code, generator.ORDER_ATOMIC];
}
// sklearn 加载数据集
export const sklearn_load = function (_, generator) {
var dropdown_type = this.getFieldValue('type');
var text_name = this.getFieldValue('name');
generator.definitions_['import_sklearn_datasets'] = 'from sklearn import datasets';
var code = text_name + ' = datasets.' + dropdown_type + '()\n';
return code;
}
// sklearn 获取特征值/标签值/标签/特征
export const sklearn_data_target = function (_, generator) {
var value_name = generator.valueToCode(this, 'name', generator.ORDER_ATOMIC) || 'iris';
var dropdown_type = this.getFieldValue('type');
var code = value_name + '.' + dropdown_type;
return [code, generator.ORDER_ATOMIC];
}
// sklearn 数据集分割
export const sklearn_train_test_split = function (_, generator) {
var value_train_data = generator.valueToCode(this, 'train_data', generator.ORDER_ATOMIC) || 'iris_X';
var value_train_target = generator.valueToCode(this, 'train_target', generator.ORDER_ATOMIC) || 'iris_y';
var value_test_size = generator.valueToCode(this, 'test_size', generator.ORDER_ATOMIC) || '0.3';
var value_rondom_state = generator.valueToCode(this, 'rondom_state', generator.ORDER_ATOMIC) || 'None';
generator.definitions_['import_sklearn_train_test_split'] = 'from sklearn.model_selection import train_test_split';
if (value_train_target == 'None') {
var code = 'train_test_split(' + value_train_data + ', test_size=' + value_test_size + ', random_state=' + value_rondom_state + ')';
} else {
var code = 'train_test_split(' + value_train_data + ', ' + value_train_target + ', test_size=' + value_test_size + ', random_state=' + value_rondom_state + ')';
}
return [code, generator.ORDER_ATOMIC];
}
// sklearn 数据集分割-无标签值
export const sklearn_train_test_split_no_target = function (_, generator) {
var value_train_data = generator.valueToCode(this, 'train_data', generator.ORDER_ATOMIC) || 'iris_X';
var value_test_size = generator.valueToCode(this, 'test_size', generator.ORDER_ATOMIC) || '0.3';
var value_rondom_state = generator.valueToCode(this, 'rondom_state', generator.ORDER_ATOMIC) || 'None';
generator.definitions_['import_sklearn_train_test_split'] = 'from sklearn.model_selection import train_test_split';
var code = 'train_test_split(' + value_train_data + ', test_size=' + value_test_size + ', random_state=' + value_rondom_state + ')';
return [code, generator.ORDER_ATOMIC];
}
// sklearn 初始化线性回归
export const sklearn_LinearRegression = function (_, generator) {
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model';
var value_fit_intercept = generator.valueToCode(this, 'fit_intercept', generator.ORDER_ATOMIC) || 'True';
var value_normalize = generator.valueToCode(this, 'normalize', generator.ORDER_ATOMIC) || 'False';
var value_n_jobs = generator.valueToCode(this, 'n_jobs', generator.ORDER_ATOMIC) || 'None';
generator.definitions_['import_sklearn_linear_model'] = 'from sklearn.linear_model import LinearRegression';
var code = value_model_name + ' = LinearRegression(fit_intercept=' + value_fit_intercept + ', normalize=' + value_normalize + ', n_jobs=' + value_n_jobs + ')\n';
return code;
}
// sklearn 初始化岭回归
export const sklearn_Ridge = function (_, generator) {
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model';
var value_alpha = generator.valueToCode(this, 'alpha', generator.ORDER_ATOMIC) || '1.0';
var value_fit_intercept = generator.valueToCode(this, 'fit_intercept', generator.ORDER_ATOMIC) || 'True';
var value_normalize = generator.valueToCode(this, 'normalize', generator.ORDER_ATOMIC) || 'False';
var value_max_iter = generator.valueToCode(this, 'max_iter', generator.ORDER_ATOMIC) || '300';
var value_random_state = generator.valueToCode(this, 'random_state', generator.ORDER_ATOMIC) || 'None';
generator.definitions_['import_sklearn_linear_model'] = 'from sklearn.linear_model import Ridge';
var code = value_model_name + ' = Ridge(alpha=' + value_alpha + ', fit_intercept=' + value_fit_intercept + ', normalize=' + value_normalize + ', max_iter=' + value_max_iter + ', random_state=' + value_random_state + ')\n';
return code;
}
// sklearn 初始化决策树 分类/回归算法
export const sklearn_DecisionTreeClassifier_Regressor = function (_, generator) {
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model';
var dropdown_type = this.getFieldValue('type');
var value_max_depth = generator.valueToCode(this, 'max_depth', generator.ORDER_ATOMIC) || 'None';
var value_random_state = generator.valueToCode(this, 'random_state', generator.ORDER_ATOMIC) || 'None';
generator.definitions_['import_sklearn_' + dropdown_type] = 'from sklearn.tree import ' + dropdown_type;
var code = value_model_name + ' = ' + dropdown_type + '(max_depth=' + value_max_depth + ', random_state=' + value_random_state + ')\n';
return code;
}
export const sklearn_RandomForestClassifier_Regressor = function (_, generator) {
var dropdown_type = this.getFieldValue('type');
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'Model';
var value_n_estimators = generator.valueToCode(this, 'n_estimators', generator.ORDER_ATOMIC) || '100';
var value_max_depth = generator.valueToCode(this, 'max_depth', generator.ORDER_ATOMIC) || 'None';
var value_n_jobs = generator.valueToCode(this, 'n_jobs', generator.ORDER_ATOMIC) || 'None';
var value_random_state = generator.valueToCode(this, 'random_state', generator.ORDER_ATOMIC) || 'None';
generator.definitions_['import_sklearn_' + dropdown_type] = 'from sklearn.ensemble import ' + dropdown_type;
var code = value_model_name + ' = ' + dropdown_type + '(n_estimators=' + value_n_estimators + ', max_depth=' + value_max_depth + ', n_jobs=' + value_n_jobs + ', random_state=' + value_random_state + ')\n';
return code;
}
// sklearn 初始化K近邻 分类/回归算法
export const sklearn_KNeighborsClassifier_Regressor = function (_, generator) {
var dropdown_type = this.getFieldValue('type');
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model';
var value_K = generator.valueToCode(this, 'K', generator.ORDER_ATOMIC) || '5';
var value_n_jobs = generator.valueToCode(this, 'n_jobs', generator.ORDER_ATOMIC) || 'None';
generator.definitions_['import_sklearn_' + dropdown_type] = 'from sklearn.neighbors import ' + dropdown_type;
var code = value_model_name + ' = ' + dropdown_type + '(n_neighbors=' + value_K + ', n_jobs=' + value_n_jobs + ')\n';
return code;
}
// sklearn 初始化高斯贝叶斯分类算法
export const sklearn_GaussianNB = function (_, generator) {
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model';
generator.definitions_['import_sklearn_GaussianNB'] = 'from sklearn.naive_bayes import GaussianNB';
var code = value_model_name + ' = GaussianNB()\n';
return code;
}
// sklearn 初始化PCA降维
export const sklearn_pca = function (_, generator) {
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'pca';
var value_n_components = generator.valueToCode(this, 'n_components', generator.ORDER_ATOMIC) || '2';
generator.definitions_['import_sklearn_pca'] = 'from sklearn.decomposition import PCA';
var code = value_model_name + ' = PCA(n_components=' + value_n_components + ')\n';
return code;
}
export const sklearn_pca_fit_transform = function(block, generator) {
var value_model_name = generator.valueToCode(block, 'model_name', generator.ORDER_ATOMIC);
var value_train_data = generator.valueToCode(block, 'train_data', generator.ORDER_ATOMIC);
var code = value_model_name + '.fit_transform(' + value_train_data + ')';
return [code, generator.ORDER_ATOMIC];
};
// sklearn 初始K-均值聚类
export const sklearn_KMeans = function (_, generator) {
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model';
var value_n_clusters = generator.valueToCode(this, 'n_clusters', generator.ORDER_ATOMIC) || '8';
var value_max_iter = generator.valueToCode(this, 'max_iter', generator.ORDER_ATOMIC) || '300';
var value_random_state = generator.valueToCode(this, 'random_state', generator.ORDER_ATOMIC) || 'None';
generator.definitions_['import_sklearn_KMeans'] = 'from sklearn.cluster import KMeans';
var code = value_model_name + ' = KMeans(n_clusters=' + value_n_clusters + ', max_iter=' + value_max_iter + ', random_state=' + value_random_state + ')\n';
return code;
}
export const sklearn_KMeans_fit = function(block, generator) {
var value_model_name = generator.valueToCode(block, 'model_name', generator.ORDER_ATOMIC);
var value_train_data = generator.valueToCode(block, 'train_data', generator.ORDER_ATOMIC);
var code = value_model_name + '.fit(' + value_train_data + ')\n';
return code;
};
// sklearn 训练模型
export const sklearn_fit = function (_, generator) {
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model';
var value_train_data = generator.valueToCode(this, 'train_data', generator.ORDER_ATOMIC) || 'X_train';
var value_train_target = generator.valueToCode(this, 'train_target', generator.ORDER_ATOMIC) || 'y_train';
if (value_train_target == 'None') {
var code = value_model_name + '.fit(' + value_train_data + ')\n';
} else {
var code = value_model_name + '.fit(' + value_train_data + ', ' + value_train_target + ')\n';
}
return code;
}
// sklearn 训练模型-无标签值
export const sklearn_fit_no_target = function (_, generator) {
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model';
var value_train_data = generator.valueToCode(this, 'train_data', generator.ORDER_ATOMIC) || 'X_train';
var code = value_model_name + '.fit(' + value_train_data + ')\n';
return code;
}
// sklearn 模型预测
export const sklearn_predict = function (_, generator) {
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model';
var value_train_data = generator.valueToCode(this, 'train_data', generator.ORDER_ATOMIC) || 'X_test';
var code = value_model_name + '.predict(' + value_train_data + ')';
return [code, generator.ORDER_ATOMIC];
}
// sklearn 计算模型得分
export const sklearn_score = function (_, generator) {
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model';
var value_train_data = generator.valueToCode(this, 'train_data', generator.ORDER_ATOMIC) || 'X_train';
var value_train_target = generator.valueToCode(this, 'train_target', generator.ORDER_ATOMIC) || 'y_train';
if (value_train_target == 'None') {
var code = value_model_name + '.score(' + value_train_data + ')';
} else {
var code = value_model_name + '.score(' + value_train_data + ', ' + value_train_target + ')';
}
return [code, generator.ORDER_ATOMIC];
}
// sklearn 计算模型得分-无标签值
export const sklearn_score_no_target = function (_, generator) {
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model';
var value_train_data = generator.valueToCode(this, 'train_data', generator.ORDER_ATOMIC) || 'X_train';
var code = value_model_name + '.score(' + value_train_data + ')';
return [code, generator.ORDER_ATOMIC];
}
// sklearn 线性回归 模型获取 斜率/截距
export const sklearn_coef_intercept = function (_, generator) {
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model';
var dropdown_type = this.getFieldValue('type');
var code = value_model_name + '.' + dropdown_type;
return [code, generator.ORDER_ATOMIC];
}
// sklearn K-均值聚类 模型获取 簇中心坐标/聚类后的标签/所有点到对应簇中心的距离平方和
export const sklearn_cluster_centers_labels_inertia = function (_, generator) {
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model';
var dropdown_type = this.getFieldValue('type');
var code = value_model_name + '.' + dropdown_type;
return [code, generator.ORDER_ATOMIC];
}
// sklearn 保存/加载模型
export const sklearn_save_load_model = function (_, generator) {
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model';
var dropdown_type = this.getFieldValue('type');
var value_address = generator.valueToCode(this, 'address', generator.ORDER_ATOMIC) || 'D:/mixly/test.pkl';
generator.definitions_['import_sklearn_joblib'] = 'import joblib';
var code = '';
if (dropdown_type == 'dump') {
code = 'joblib.dump(' + value_model_name + ', ' + value_address + ')\n';
} else {
code = value_model_name + ' = joblib.load(' + value_address + ')\n';
}
return code;
}

View File

@@ -0,0 +1,22 @@
export const controls_millis = function (_, generator) {
generator.definitions_.import_time = "import time";
var code = 'time.time()';
return [code, generator.ORDER_ATOMIC];
}
export const controls_end_program = function () {
return 'exit()\n';
}
export const time_localtime = function (_, generator) {
generator.definitions_.import_time = "import time";
var op = this.getFieldValue('op');
var code = "time.localtime()[" + op + "]";
switch (op) {
case "all":
var code1 = "time.localtime()";
return [code1, generator.ORDER_ASSIGNMENT];
default:
return [code, generator.ORDER_ASSIGNMENT];
}
}

View File

@@ -0,0 +1,422 @@
import * as Blockly from 'blockly/core';
export const turtle_create = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
Blockly.Variables.NAME_TYPE);
//var size=window.parseFloat(this.getFieldValue('SIZE'));
//generator.definitions_['var_declare'+varName] = varName+'= '+ 'turtle.Turtle()\n';
var code = varName + ' = ' + 'turtle.Turtle()\n';
return code;
// return '';
}
export const turtle_done = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var code = 'turtle.done()\n';
return code;
}
export const turtle_exitonclick = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var code = 'turtle.exitonclick()\n';
return code;
}
export const turtle_move = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var direction = this.getFieldValue('DIR');
var num = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + "." + direction + "(" + num + ')\n';
return code;
}
export const turtle_rotate = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var direction = this.getFieldValue('DIR');
var num = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + "." + direction + "(" + num + ')\n';
return code;
}
export const turtle_setheading = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var argument = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + '.setheading(' + argument + ')\n';
return code;
}
export const turtle_screen_delay = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var argument = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + '.screen.delay(' + argument + ')\n';
return code;
}
export const turtle_goto = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var xnum = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
var ynum = generator.valueToCode(this, 'val', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + '.goto(' + xnum + ',' + ynum + ')\n';
return code;
}
export const turtle_pos_shape = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var get = this.getFieldValue('DIR');
var code = varName + '.' + get + '()';
return [code, generator.ORDER_ATOMIC];
}
export const turtle_stamp = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + '.stamp()\n';
return code;
}
export const turtle_clear = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var clear = this.getFieldValue('DIR');
var code = varName + "." + clear + "(" + ')\n';
return code;
}
export const turtle_penup = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var penup = this.getFieldValue('DIR');
var code = varName + "." + penup + "(" + ')\n';
return code;
}
export const turtle_fill = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var penup = this.getFieldValue('DIR');
var code = varName + "." + penup + "_fill(" + ')\n';
return code;
}
export const turtle_size_speed = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = this.getFieldValue('TUR');
var size = this.getFieldValue('DIR');
var num = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + "." + size + "(" + num + ')\n';
return code;
}
export const turtle_size = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var argument = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + '.pensize(' + argument + ')\n';
return code;
}
export const turtle_speed = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var argument = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + '.speed(' + argument + ')\n';
return code;
}
export const turtle_circle = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var circle = this.getFieldValue('DIR');
var num = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + "." + circle + "(" + num + ')\n';
return code;
}
export const turtle_setxy = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var xy = this.getFieldValue('DIR');
var num = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + ".set" + xy + "(" + num + ')\n';
return code;
}
export const turtle_circle_advanced = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var argument = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
var num = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + ".circle (" + num + ',' + argument + ')\n';
return code;
}
export const turtle_visible = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var visible = this.getFieldValue('DIR');
var code = varName + "." + visible + "(" + ')\n';
return code;
}
export const turtle_bgcolor = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var color = this.getFieldValue('FIELDNAME');
var code = "turtle." + 'bgcolor' + '("' + color + '")\n';
return code;
}
export const turtle_title = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
const TITLE = generator.valueToCode(this, 'TITLE', generator.ORDER_ASSIGNMENT) || 'Mixly';
var code = `turtle.title(${TITLE})\n`;
return code;
}
export const turtle_setup = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
const WIDTH = generator.valueToCode(this, 'WIDTH', generator.ORDER_ASSIGNMENT) || '1';
const HEIGHT = generator.valueToCode(this, 'HEIGHT', generator.ORDER_ASSIGNMENT) || 'None';
var code = `turtle.setup(width=${WIDTH}, height=${HEIGHT})\n`;
return code;
}
export const turtle_tracer = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
const STEP = generator.valueToCode(this, 'STEP', generator.ORDER_ASSIGNMENT) || '1';
const DELAY = generator.valueToCode(this, 'DELAY', generator.ORDER_ASSIGNMENT) || 'None';
var code = `turtle.tracer(${STEP}, delay=${DELAY})\n`;
return code;
}
export const turtle_pencolor = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var color = this.getFieldValue('FIELDNAME');
var code = varName + "." + 'pencolor' + '("' + color + '")\n';
return code;
}
export const turtle_fillcolor = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var color = this.getFieldValue('FIELDNAME');
var code = varName + "." + 'fillcolor' + '("' + color + '")\n';
return code;
}
export const turtle_clone = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + '.clone()';
return [code, generator.ORDER_ATOMIC];
}
export const turtle_bgcolor_hex = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = "turtle." + 'bgcolor' + '(' + color + ')\n';
return code;
}
export const turtle_pencolor_hex = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
//var color = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + "." + 'pencolor' + '(' + color + ')\n';
return code;
}
export const turtle_fillcolor_hex = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + "." + 'fillcolor' + '(' + color + ')\n';
return code;
}
export const turtle_bgcolor_hex_new = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = "turtle." + 'bgcolor' + '(' + color + ')\n';
return code;
}
export const turtle_pencolor_hex_new = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
//var color = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + "." + 'pencolor' + '(' + color + ')\n';
return code;
}
export const turtle_fillcolor_hex_new = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + "." + 'fillcolor' + '(' + color + ')\n';
return code;
}
export const turtle_color_hex = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var color1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);
var color2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);
var code = varName + "." + 'color' + '(' + color1 + ',' + color2 + ')\n';
return code;
}
export const turtle_color = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var color1 = this.getFieldValue('FIELDNAME');
var color2 = this.getFieldValue('FIELDNAME2');
var code = varName + "." + 'color' + '("' + color1 + '","' + color2 + '")\n';
return code;
}
export const turtle_shape = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var direction = this.getFieldValue('DIR');
var code = varName + ".shape('" + direction + "')\n";
return code;
}
export const turtle_shapesize = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var argument1 = generator.valueToCode(this, 'WID', generator.ORDER_ASSIGNMENT) || '0';
var argument2 = generator.valueToCode(this, 'LEN', generator.ORDER_ASSIGNMENT) || '0';
var argument3 = generator.valueToCode(this, 'OUTLINE', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + ".shapesize(" + argument1 + ',' + argument2 + ',' + argument3 + ')\n';
return code;
}
export const turtle_textinput = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var title = generator.valueToCode(this, 'TITLE', generator.ORDER_ATOMIC);
var prompt = generator.valueToCode(this, 'PROMPT', generator.ORDER_ATOMIC);
var code = "turtle.textinput" + '(' + title + ',' + prompt + ')';
return [code, generator.ORDER_ATOMIC];
}
export const turtle_numinput = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var title = generator.valueToCode(this, 'TITLE', generator.ORDER_ATOMIC);
var prompt = generator.valueToCode(this, 'PROMPT', generator.ORDER_ATOMIC);
var data = generator.valueToCode(this, 'DEFAULT', generator.ORDER_ATOMIC);
var min = generator.valueToCode(this, 'MIN', generator.ORDER_ATOMIC);
var max = generator.valueToCode(this, 'MAX', generator.ORDER_ATOMIC);
var code = "turtle.numinput" + '(' + title + ',' + prompt + "," + data + ',minval = ' + min + ',maxval = ' + max + ')';
return [code, generator.ORDER_ATOMIC];
}
export const turtle_write = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var write = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
//var color = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + "." + 'write' + '(' + write + ')\n';
return code;
}
export const turtle_write_format = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var move = this.getFieldValue('MOVE');
var align = this.getFieldValue('ALIGN');
var fontname = generator.valueToCode(this, 'FONTNAME', generator.ORDER_ATOMIC);
var fontnum = generator.valueToCode(this, 'FONTNUM', generator.ORDER_ASSIGNMENT) || '0';
var fonttype = this.getFieldValue('FONTTYPE');
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var write = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + "." + 'write' + '(' + write + ',' + move + ',align="' + align + '",font=(' + fontname + ',' + fontnum + ',"' + fonttype + '"))\n';
return code;
}
export const turtle_write_format_skulpt = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var move = this.getFieldValue('MOVE');
var align = this.getFieldValue('ALIGN');
var fontname = generator.valueToCode(this, 'FONTNAME', generator.ORDER_ATOMIC);
var fontnum = generator.valueToCode(this, 'FONTNUM', generator.ORDER_ASSIGNMENT) || '0';
var fonttype = this.getFieldValue('FONTTYPE');
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var write = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + "." + 'write' + '(' + write + ',' + move + ',align="' + align + '",font=(' + fontname + ',' + fontnum + ',"' + fonttype + '"))\n';
return code;
}
export const turtle_color_seclet = function (_, generator) {
var colour = this.getFieldValue('COLOR');
var code = '"' + colour + '"'
return [code, generator.ORDER_ATOMIC];
}
export const turtle_getscreen = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var turName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
Blockly.Variables.NAME_TYPE);
var code = varName + ' = ' + turName + '.getscreen()\n';
return code;
}
export const turtle_update = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var code = `${varName}.update()\n`;
return code;
}
export const turtle_onkey = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var v = generator.valueToCode(this, "VAR", generator.ORDER_NONE) || "None";
var callback = generator.valueToCode(this, "callback", generator.ORDER_NONE) || "None";
var code = varName + ".onkey(" + callback + ", " + v + ")\n";
return code;
}
export const turtle_onclick = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var callback = generator.valueToCode(this, "callback", generator.ORDER_NONE) || "None";
var code = varName + ".onclick(" + callback + ")\n";
return code;
}
export const turtle_ontimer = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var v = generator.valueToCode(this, "VAR", generator.ORDER_NONE) || "None";
var callback = generator.valueToCode(this, "callback", generator.ORDER_NONE) || "None";
var code = varName + ".ontimer(" + callback + ", " + v + ")\n";
return code;
}
export const turtle_listen = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + '.listen()\n';
return code;
}
export const turtle_screen_savefig = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
var code = varName + ".getcanvas().postscript(file=" + file + ")\n";
return code;
}

View File

@@ -0,0 +1,140 @@
import * as Blockly from 'blockly/core';
import { Profile } from 'mixly';
import {
PythonVariablesBlocks,
PythonControlBlocks,
PythonMathBlocks,
PythonTextBlocks,
PythonListsBlocks,
PythonDictsBlocks,
PythonLogicBlocks,
PythonStorageBlocks,
PythonProceduresBlocks,
PythonTupleBlocks,
PythonSetBlocks,
PythonHtmlBlocks,
PythonUtilityBlocks,
PythonVariablesGenerators,
PythonControlGenerators,
PythonMathGenerators,
PythonTextGenerators,
PythonListsGenerators,
PythonDictsGenerators,
PythonLogicGenerators,
PythonStorageGenerators,
PythonProceduresGenerators,
PythonTupleGenerators,
PythonSetGenerators,
PythonHtmlGenerators,
PythonUtilityGenerators,
Procedures,
Variables,
Python
} from '@mixly/python';
import {
PythonMixpyAIBlocks,
PythonMixpyAlgorithmBlocks,
PythonMixpyCommunicateBlocks,
PythonMixpyCVBlocks,
PythonMixpyDataBlocks,
PythonMixpyDatastructureBlocks,
PythonMixpyFactoryBlocks,
PythonMixpyHardwareBlocks,
PythonMixpyInoutBlocks,
PythonMixpyIOTBlocks,
PythonMixpyPinsBlocks,
PythonMixpySerialBlocks,
PythonMixpySKLearnBlocks,
PythonMixpySystemBlocks,
PythonMixpyTurtleBlocks,
PythonMixpyAIGenerators,
PythonMixpyAlgorithmGenerators,
PythonMixpyCommunicateGenerators,
PythonMixpyCVGenerators,
PythonMixpyDataGenerators,
PythonMixpyDatastructureGenerators,
PythonMixpyFactoryGenerators,
PythonMixpyHardwareGenerators,
PythonMixpyInoutGenerators,
PythonMixpyIOTGenerators,
PythonMixpyPinsGenerators,
PythonMixpySerialGenerators,
PythonMixpySKLearnGenerators,
PythonMixpySystemGenerators,
PythonMixpyTurtleGenerators
} from './';
import './css/color_mixpy_python_advance.css';
Object.assign(Blockly.Variables, Variables);
Object.assign(Blockly.Procedures, Procedures);
Blockly.Python = Python;
Blockly.generator = Python;
Profile.default = {};
Object.assign(
Blockly.Blocks,
PythonVariablesBlocks,
PythonControlBlocks,
PythonMathBlocks,
PythonTextBlocks,
PythonListsBlocks,
PythonDictsBlocks,
PythonLogicBlocks,
PythonStorageBlocks,
PythonProceduresBlocks,
PythonTupleBlocks,
PythonSetBlocks,
PythonHtmlBlocks,
PythonUtilityBlocks,
PythonMixpyAIBlocks,
PythonMixpyAlgorithmBlocks,
PythonMixpyCommunicateBlocks,
PythonMixpyCVBlocks,
PythonMixpyDataBlocks,
PythonMixpyDatastructureBlocks,
PythonMixpyFactoryBlocks,
PythonMixpyHardwareBlocks,
PythonMixpyInoutBlocks,
PythonMixpyIOTBlocks,
PythonMixpyPinsBlocks,
PythonMixpySerialBlocks,
PythonMixpySKLearnBlocks,
PythonMixpySystemBlocks,
PythonMixpyTurtleBlocks
);
Object.assign(
Blockly.Python.forBlock,
PythonVariablesGenerators,
PythonControlGenerators,
PythonMathGenerators,
PythonTextGenerators,
PythonListsGenerators,
PythonDictsGenerators,
PythonLogicGenerators,
PythonStorageGenerators,
PythonProceduresGenerators,
PythonTupleGenerators,
PythonSetGenerators,
PythonHtmlGenerators,
PythonUtilityGenerators,
PythonMixpyAIGenerators,
PythonMixpyAlgorithmGenerators,
PythonMixpyCommunicateGenerators,
PythonMixpyCVGenerators,
PythonMixpyDataGenerators,
PythonMixpyDatastructureGenerators,
PythonMixpyFactoryGenerators,
PythonMixpyHardwareGenerators,
PythonMixpyInoutGenerators,
PythonMixpyIOTGenerators,
PythonMixpyPinsGenerators,
PythonMixpySerialGenerators,
PythonMixpySKLearnGenerators,
PythonMixpySystemGenerators,
PythonMixpyTurtleGenerators
);

View File

@@ -0,0 +1,15 @@
{
"compilerOptions": {
"experimentalDecorators": true,
"baseUrl": "./",
"paths": {
"@mixly/python": [
"../python"
]
}
},
"exclude": [
"node_modules",
"dist"
]
}

View File

@@ -0,0 +1,22 @@
{
"language": "Python",
"nav": {
"run": true,
"cancel": true,
"save": {
"py": true
},
"setting": {
"thirdPartyLibrary": true,
"pythonToBlockly": true
}
},
"lib": {
"mixly": {
"url": [
"http://download.mixlylibs.cloud/mixly3-packages/cloud-libs/python/libs.json"
]
}
},
"pythonToBlockly": false
}

View File

@@ -0,0 +1 @@
<xml version=\"0.999Beta\" board=\"mixpy\" xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"procedures_defreturn\" id=\"Qb=X9[1.)DQ-;0^i85%Y\" x=\"0\" y=\"0\"><mutation><arg name=\"path\"></arg></mutation><field name=\"NAME\">procedure</field><statement name=\"STACK\"><block type=\"storage_fileopen\" id=\"%eYwvpbP*1].*t0ctb}x\"><field name=\"MODE\">rb</field><value name=\"FILENAME\"><shadow type=\"text\" id=\"KEWG5_6$b]ER.VQ`bj/g\"><field name=\"TEXT\">filename.txt</field></shadow><block type=\"variables_get\" id=\"9rm]@}VrTg1_d7?pA;,t\"><field name=\"VAR\">path</field></block></value><value name=\"FILE\"><shadow type=\"variables_get\" id=\"zupqr.)),IMtPOm,Got:\"><field name=\"VAR\">f</field></shadow></value></block></statement><value name=\"RETURN\"><block type=\"storage_get_contents\" id=\"Kp7!XsdLF*3Q:uoNZg-!\"><field name=\"MODE\">read</field><value name=\"FILE\"><shadow type=\"variables_get\" id=\"{j`!MHr_12C0ZeuIKf|W\"><field name=\"VAR\">f</field></shadow></value><value name=\"SIZE\"><shadow type=\"math_number\" id=\"uu$NUi8/S^^igXzLsKBo\"><field name=\"NUM\">-1</field></shadow></value></block></value></block><block type=\"AI_client\" id=\"_BO_AvQdtb}4OIpulF0F\" x=\"0\" y=\"130\"><field name=\"CTYPE\">AipImageClassify</field><value name=\"SUB\"><shadow type=\"variables_get\" id=\"-cB|N|~GUC%pmT_m8__Q\"><field name=\"VAR\">client</field></shadow></value><value name=\"APP_ID\"><shadow type=\"text\" id=\"dk;zXxC:yfNL^[0dEBoH\"><field name=\"TEXT\">16448656</field></shadow></value><value name=\"API_KEY\"><shadow type=\"text\" id=\"x={C|FO5+i,S^]!aK{`S\"><field name=\"TEXT\">W0GUuKLWqwkKK57ntbDfKGcR</field></shadow></value><value name=\"SECRET_KEY\"><shadow type=\"text\" id=\"6*FxOLGHfjS{B-JQV!H=\"><field name=\"TEXT\">fMQOaDcARzV1DIzUsDXqC4O6SsLb9uKK</field></shadow></value><next><block type=\"variables_set\" id=\"l]qT@BvGo%Ely4}2yg]k\"><field name=\"VAR\">image</field><value name=\"VALUE\"><block type=\"procedures_callreturn\" id=\"VG/=w|o:Y+2$iu9psrvu\"><mutation name=\"procedure\"><arg name=\"path\"></arg></mutation><value name=\"ARG0\"><block type=\"AI_ChooseAndGet\" id=\"os;F*^.R[@a|^HAum8#J\"><field name=\"TYPE\">getOneFile</field></block></value></block></value><next><block type=\"variables_set\" id=\"(fU;VaWmc@qXE|=QenGc\"><field name=\"VAR\">result</field><value name=\"VALUE\"><block type=\"AI_ImageClassify\" id=\"KE{IY:0WQd[d7Etb9}XR\"><value name=\"SUB\"><shadow type=\"variables_get\" id=\"vKTX@M,50%RBZe|ACkIt\"><field name=\"VAR\">client</field></shadow></value><value name=\"FUNC\"><shadow type=\"AI_ImageClassify_Func\" id=\"Ln4[j?f#??Roo!Ep/r}h\"><field name=\"TYPE\">advancedGeneral</field></shadow></value><value name=\"ADDR\"><shadow type=\"text\" id=\"XdaVI7.#eIvgeX}6_%+D\"><field name=\"TEXT\">D:/img.jpg</field></shadow><block type=\"variables_get\" id=\"O]x2rmR*$`2rL^cybcO;\"><field name=\"VAR\">image</field></block></value></block></value><next><block type=\"inout_print_inline\" id=\"Y2_m|J^1h(Mf6v8LgM[o\"><value name=\"VAR\"><shadow type=\"text\" id=\"9+GPbMY*;t9O)z-2YZ!@\"><field name=\"TEXT\">Hello</field></shadow><block type=\"dicts_get\" id=\"Q0nrqjR(b9B/-ZPR(pwt\"><value name=\"DICT\"><shadow type=\"variables_get\" id=\"?^ijX?b7U!~L9F}2WEfe\"><field name=\"VAR\">mydict</field></shadow><block type=\"variables_get\" id=\"beq@c)4[_y=%ZmC?(WU,\"><field name=\"VAR\">result</field></block></value><value name=\"KEY\"><shadow type=\"text\" id=\"GU[[JZwyi!8^v#yY|Gc8\"><field name=\"TEXT\">result</field></shadow></value></block></value></block></next></block></next></block></next></block></xml>

View File

@@ -0,0 +1 @@
<xml version=\"1.0Beta\" board=\"mixpy\" xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"AI_client\" id=\"_BO_AvQdtb}4OIpulF0F\" x=\"37\" y=\"118\"><field name=\"CTYPE\">AipNlp</field><value name=\"SUB\"><shadow type=\"variables_get\" id=\"-cB|N|~GUC%pmT_m8__Q\"><field name=\"VAR\">client</field></shadow></value><value name=\"APP_ID\"><shadow type=\"text\" id=\"dk;zXxC:yfNL^[0dEBoH\"><field name=\"TEXT\">16669201</field></shadow></value><value name=\"API_KEY\"><shadow type=\"text\" id=\"x={C|FO5+i,S^]!aK{`S\"><field name=\"TEXT\">LWsSsPG5YhvNSc9Rc555U3kr</field></shadow></value><value name=\"SECRET_KEY\"><shadow type=\"text\" id=\"6*FxOLGHfjS{B-JQV!H=\"><field name=\"TEXT\">YUBzmdyBf9CZEuXQzVQp9HE4gYULzrmC</field></shadow></value><next><block type=\"variables_set\" id=\"(fU;VaWmc@qXE|=QenGc\"><field name=\"VAR\">result</field><value name=\"VALUE\"><block type=\"AI_Nlp\" id=\"=?LrA4Okm/aQ1CRgbeS4\"><value name=\"SUB\"><shadow type=\"variables_get\" id=\"8T@`O0(i14m/-g7H4z/c\"><field name=\"VAR\">client</field></shadow></value><value name=\"FUNC\"><shadow type=\"AI_Nlp_Func\" id=\"IpCp,(#Ex*mG*53yR41U\"><field name=\"TYPE\">lexer</field></shadow></value><value name=\"STR\"><shadow type=\"text\" id=\"j8gyldZN=.+Pph_lKUOl\"><field name=\"TEXT\">\u4ECA\u5929\u5929\u6C14\u771F\u597D</field></shadow></value><value name=\"ATTR\"><block type=\"dicts_create_with_noreturn\" id=\",rdu~Y4ax,WMx3n+z]wF\"><mutation items=\"0\"></mutation></block></value></block></value><next><block type=\"inout_print_inline\" id=\"Y2_m|J^1h(Mf6v8LgM[o\"><value name=\"VAR\"><shadow type=\"text\" id=\"9+GPbMY*;t9O)z-2YZ!@\"><field name=\"TEXT\">Hello</field></shadow><block type=\"dicts_get\" id=\"Q0nrqjR(b9B/-ZPR(pwt\"><value name=\"DICT\"><shadow type=\"variables_get\" id=\"?^ijX?b7U!~L9F}2WEfe\"><field name=\"VAR\">mydict</field></shadow><block type=\"variables_get\" id=\"beq@c)4[_y=%ZmC?(WU,\"><field name=\"VAR\">result</field></block></value><value name=\"KEY\"><shadow type=\"text\" id=\"GU[[JZwyi!8^v#yY|Gc8\"><field name=\"TEXT\">items</field></shadow></value></block></value></block></next></block></next></block></xml>

View File

@@ -0,0 +1 @@
<xml version=\"1.0Beta\" board=\"mixpy\" xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"AI_client\" id=\"_BO_AvQdtb}4OIpulF0F\" x=\"37\" y=\"118\"><field name=\"CTYPE\">AipNlp</field><value name=\"SUB\"><shadow type=\"variables_get\" id=\"-cB|N|~GUC%pmT_m8__Q\"><field name=\"VAR\">client</field></shadow></value><value name=\"APP_ID\"><shadow type=\"text\" id=\"dk;zXxC:yfNL^[0dEBoH\"><field name=\"TEXT\">16669201</field></shadow></value><value name=\"API_KEY\"><shadow type=\"text\" id=\"x={C|FO5+i,S^]!aK{`S\"><field name=\"TEXT\">LWsSsPG5YhvNSc9Rc555U3kr</field></shadow></value><value name=\"SECRET_KEY\"><shadow type=\"text\" id=\"6*FxOLGHfjS{B-JQV!H=\"><field name=\"TEXT\">YUBzmdyBf9CZEuXQzVQp9HE4gYULzrmC</field></shadow></value><next><block type=\"variables_set\" id=\"(fU;VaWmc@qXE|=QenGc\"><field name=\"VAR\">result</field><value name=\"VALUE\"><block type=\"AI_Nlp_Sim\" id=\"=YkukaP2kwO3u$f?+hpT\"><value name=\"SUB\"><shadow type=\"variables_get\" id=\"gKtImKoqJH*hp)%Gj6?1\"><field name=\"VAR\">client</field></shadow></value><value name=\"FUNC\"><shadow type=\"AI_Nlp_Func_sim\" id=\"KACQ8)b/a9#JHebE`bjd\"><field name=\"TYPE\">simnet</field></shadow></value><value name=\"STR1\"><shadow type=\"text\" id=\"UkcUwygv}zYf4SV%5(Ij\"><field name=\"TEXT\">\u7C73\u601D\u9F50</field></shadow></value><value name=\"STR2\"><shadow type=\"text\" id=\"uEN.I;8CY!z(`wm}++~z\"><field name=\"TEXT\">\u7C73\u601D\u76AE</field></shadow></value><value name=\"ATTR\"><block type=\"dicts_create_with_noreturn\" id=\"7PECo^iJkb1Zt[5$Z[%;\"><mutation items=\"0\"></mutation></block></value></block></value><next><block type=\"inout_print_inline\" id=\"Y2_m|J^1h(Mf6v8LgM[o\"><value name=\"VAR\"><shadow type=\"text\" id=\"9+GPbMY*;t9O)z-2YZ!@\"><field name=\"TEXT\">Hello</field></shadow><block type=\"variables_get\" id=\"beq@c)4[_y=%ZmC?(WU,\"><field name=\"VAR\">result</field></block></value></block></next></block></next></block></xml>

View File

@@ -0,0 +1 @@
<xml version=\"1.0Beta\" board=\"mixpy\" xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"procedures_defreturn\" id=\"Qb=X9[1.)DQ-;0^i85%Y\" x=\"0\" y=\"0\"><mutation><arg name=\"path\"></arg></mutation><field name=\"NAME\">procedure</field><statement name=\"STACK\"><block type=\"storage_fileopen\" id=\"%eYwvpbP*1].*t0ctb}x\"><field name=\"MODE\">rb</field><value name=\"FILENAME\"><shadow type=\"text\" id=\"KEWG5_6$b]ER.VQ`bj/g\"><field name=\"TEXT\">filename.txt</field></shadow><block type=\"variables_get\" id=\"9rm]@}VrTg1_d7?pA;,t\"><field name=\"VAR\">path</field></block></value><value name=\"FILE\"><shadow type=\"variables_get\" id=\"zupqr.)),IMtPOm,Got:\"><field name=\"VAR\">f</field></shadow></value></block></statement><value name=\"RETURN\"><block type=\"storage_get_contents\" id=\"Kp7!XsdLF*3Q:uoNZg-!\"><field name=\"MODE\">read</field><value name=\"FILE\"><shadow type=\"variables_get\" id=\"{j`!MHr_12C0ZeuIKf|W\"><field name=\"VAR\">f</field></shadow></value><value name=\"SIZE\"><shadow type=\"math_number\" id=\"uu$NUi8/S^^igXzLsKBo\"><field name=\"NUM\">-1</field></shadow></value></block></value></block><block type=\"AI_client\" id=\"_BO_AvQdtb}4OIpulF0F\" x=\"20\" y=\"150\"><field name=\"CTYPE\">AipOcr</field><value name=\"SUB\"><shadow type=\"variables_get\" id=\"-cB|N|~GUC%pmT_m8__Q\"><field name=\"VAR\">client</field></shadow></value><value name=\"APP_ID\"><shadow type=\"text\" id=\"dk;zXxC:yfNL^[0dEBoH\"><field name=\"TEXT\">14298851</field></shadow></value><value name=\"API_KEY\"><shadow type=\"text\" id=\"x={C|FO5+i,S^]!aK{`S\"><field name=\"TEXT\">WhPHPqF88PxpV0yEohosGa7C</field></shadow></value><value name=\"SECRET_KEY\"><shadow type=\"text\" id=\"6*FxOLGHfjS{B-JQV!H=\"><field name=\"TEXT\">FWBHpZMI5yg2eqPwUQZHuBA6imhGGLsQ</field></shadow></value><next><block type=\"variables_set\" id=\"l]qT@BvGo%Ely4}2yg]k\"><field name=\"VAR\">image</field><value name=\"VALUE\"><block type=\"procedures_callreturn\" id=\"VG/=w|o:Y+2$iu9psrvu\"><mutation name=\"procedure\"><arg name=\"path\"></arg></mutation><value name=\"ARG0\"><block type=\"AI_ChooseAndGet\" id=\"os;F*^.R[@a|^HAum8#J\"><field name=\"TYPE\">getOneFile</field></block></value></block></value><next><block type=\"variables_set\" id=\"(fU;VaWmc@qXE|=QenGc\"><field name=\"VAR\">result</field><value name=\"VALUE\"><block type=\"AI_Ocr\" id=\"Vs`WMF-gV[MZ|$QSgOAr\"><value name=\"SUB\"><shadow type=\"variables_get\" id=\"^iF/RlawLSv5[Xy|^k[5\"><field name=\"VAR\">client</field></shadow></value><value name=\"FUNC\"><shadow type=\"AI_Ocr_Func\" id=\"wn{wq%*PzU-vThHppO@J\"><field name=\"TYPE\">basicGeneral</field></shadow></value><value name=\"ADDR\"><shadow type=\"text\" id=\"t`n+t9JHI4)_S%AhffId\"><field name=\"TEXT\">C:/mixly.jpg</field></shadow><block type=\"variables_get\" id=\"O]x2rmR*$`2rL^cybcO;\"><field name=\"VAR\">image</field></block></value><value name=\"ATTR\"><block type=\"dicts_create_with_noreturn\" id=\")%CjNHCCFm~+2Y#vg!zt\"><mutation items=\"4\"></mutation><field name=\"KEY0\">\"language_type\"</field><field name=\"KEY1\">\"detect_language\"</field><field name=\"KEY2\">\"probability\"</field><field name=\"KEY3\">\"detect_direction\"</field><value name=\"ADD0\"><block type=\"text\" id=\"~x07,@yt~y8BgJy=sm.L\"><field name=\"TEXT\">CHN_ENG</field></block></value><value name=\"ADD1\"><block type=\"text\" id=\"J0%GfD=tY8sO!f0~q!D?\"><field name=\"TEXT\">true</field></block></value><value name=\"ADD2\"><block type=\"text\" id=\"2m2Wfj9b^XJOx7DT`evZ\"><field name=\"TEXT\">true</field></block></value><value name=\"ADD3\"><block type=\"text\" id=\"K.dR6w(`9oF%eFJZ^hZ,\"><field name=\"TEXT\">true</field></block></value></block></value></block></value><next><block type=\"inout_print_inline\" id=\"Y2_m|J^1h(Mf6v8LgM[o\"><value name=\"VAR\"><shadow type=\"text\" id=\"9+GPbMY*;t9O)z-2YZ!@\"><field name=\"TEXT\">Hello</field></shadow><block type=\"dicts_get\" id=\"Q0nrqjR(b9B/-ZPR(pwt\"><value name=\"DICT\"><shadow type=\"variables_get\" id=\"?^ijX?b7U!~L9F}2WEfe\"><field name=\"VAR\">mydict</field></shadow><block type=\"variables_get\" id=\"beq@c)4[_y=%ZmC?(WU,\"><field name=\"VAR\">result</field></block></value><value name=\"KEY\"><shadow type=\"text\" id=\"GU[[JZwyi!8^v#yY|Gc8\"><field name=\"TEXT\">words_result</field></shadow></value></block></value></block></next></block></next></block></next></block></xml>

View File

@@ -0,0 +1 @@
<xml version=\"0.999Beta\" board=\"mixpy\" xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"AI_client\" id=\"2K#e8f?QxBqN(Je.ol|)\" x=\"9\" y=\"53\"><field name=\"CTYPE\">AipSpeech</field><value name=\"SUB\"><shadow type=\"variables_get\" id=\"^@4fyM/PK$}6Z$`wj)#R\"><field name=\"VAR\">client</field></shadow></value><value name=\"APP_ID\"><shadow type=\"text\" id=\"P,S|lzqV16A#Q8uh^;MK\"><field name=\"TEXT\">11743359</field></shadow></value><value name=\"API_KEY\"><shadow type=\"text\" id=\";5)ynt3d)A;nH|Mwn=R!\"><field name=\"TEXT\">1gDrAort6V1e2lKocpfunYGV</field></shadow></value><value name=\"SECRET_KEY\"><shadow type=\"text\" id=\"pGbh24$6ZC154`s@*Qe;\"><field name=\"TEXT\">FkBsF4vVpnQ5CLGFDpczCaZBRz6vWoxN</field></shadow></value><next><block type=\"variables_set\" id=\"UFul/+Fq-@h1e^n-=@dP\"><field name=\"VAR\">result</field><value name=\"VALUE\"><block type=\"AI_Speech_synthesis\" id=\"KG5CZ0D5AnB%GZ4DvK^+\"><value name=\"SUB\"><shadow type=\"variables_get\" id=\"S(+a|;k-M0vq6tCu#~#n\"><field name=\"VAR\">client</field></shadow></value><value name=\"STR\"><shadow type=\"text\" id=\"`]1*yY[7pzfwr?FsZm.K\"><field name=\"TEXT\">\u795D\u5927\u5BB6\u7AEF\u5348\u8282\u5FEB\u4E50\uFF01</field></shadow></value><value name=\"ATTR\"><block type=\"dicts_create_with_noreturn\" id=\"{a%,Jt550KlEa`i=iR!B\"><mutation items=\"0\"></mutation></block></value></block></value><next><block type=\"storage_fileopen\" id=\"3.h3E|-OAanGEZ|l|n:X\"><field name=\"MODE\">wb</field><value name=\"FILENAME\"><shadow type=\"text\" id=\"3C*,Vgvd2#bR=iFG8nJW\"><field name=\"TEXT\">duanwujie.mp3</field></shadow></value><value name=\"FILE\"><shadow type=\"variables_get\" id=\"!UtTv*9J+A3#4TG/tP18\"><field name=\"VAR\">f</field></shadow></value><next><block type=\"storage_file_write\" id=\"S@dT_bS9XsV)CBro6u{h\"><value name=\"data\"><shadow type=\"text\" id=\"blP0@7e~Zo`kuAsOsnXK\"><field name=\"TEXT\">Mixly</field></shadow><block type=\"variables_get\" id=\"/*``6g0a:s9+Z]]DxxK1\"><field name=\"VAR\">result</field></block></value><value name=\"FILE\"><shadow type=\"variables_get\" id=\"VmV:$wL:0e6$6JF!C3r5\"><field name=\"VAR\">f</field></shadow></value></block></next></block></next></block></next></block></xml>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,182 @@
{
"AipImage.mix": {
"__file__": true,
"__name__": "AipImage.mix"
},
"AipNlp.mix": {
"__file__": true,
"__name__": "AipNlp.mix"
},
"AipNlp_simnet.mix": {
"__file__": true,
"__name__": "AipNlp_simnet.mix"
},
"AipOcr.mix": {
"__file__": true,
"__name__": "AipOcr.mix"
},
"AipSpeech.mix": {
"__file__": true,
"__name__": "AipSpeech.mix"
},
"guoqi.mix": {
"__file__": true,
"__name__": "guoqi.mix"
},
"sin.mix": {
"__file__": true,
"__name__": "sin.mix"
},
"人工智能mix": {
"02语音合成-1.mix": {
"__file__": true,
"__name__": "02语音合成-1.mix"
},
"03语音识别-1.mix": {
"__file__": true,
"__name__": "03语音识别-1.mix"
},
"03语音识别-2.mix": {
"__file__": true,
"__name__": "03语音识别-2.mix"
},
"04图片识别-1.mix": {
"__file__": true,
"__name__": "04图片识别-1.mix"
},
"04图片识别-2.mix": {
"__file__": true,
"__name__": "04图片识别-2.mix"
},
"05人脸识别-1.mix": {
"__file__": true,
"__name__": "05人脸识别-1.mix"
},
"05人脸识别-2.mix": {
"__file__": true,
"__name__": "05人脸识别-2.mix"
},
"06文字识别-1.mix": {
"__file__": true,
"__name__": "06文字识别-1.mix"
},
"06文字识别-2.mix": {
"__file__": true,
"__name__": "06文字识别-2.mix"
},
"07拓展发现-1.mix": {
"__file__": true,
"__name__": "07拓展发现-1.mix"
},
"07拓展发现-2.mix": {
"__file__": true,
"__name__": "07拓展发现-2.mix"
},
"08文本纠错-1.mix": {
"__file__": true,
"__name__": "08文本纠错-1.mix"
},
"08文本纠错-2.mix": {
"__file__": true,
"__name__": "08文本纠错-2.mix"
},
"09词法分析-2.mix": {
"__file__": true,
"__name__": "09词法分析-2.mix"
},
"09词法分析.mix": {
"__file__": true,
"__name__": "09词法分析.mix"
},
"__file__": false,
"__name__": "人工智能mix"
},
"海龟画图": {
"mix": {
"海龟画图01小房子_01小房子.mix": {
"__file__": true,
"__name__": "海龟画图01小房子_01小房子.mix"
},
"海龟画图02小汽车_01正五边形.mix": {
"__file__": true,
"__name__": "海龟画图02小汽车_01正五边形.mix"
},
"海龟画图02小汽车_02小汽车.mix": {
"__file__": true,
"__name__": "海龟画图02小汽车_02小汽车.mix"
},
"海龟画图03小橙子_01完整橙子.mix": {
"__file__": true,
"__name__": "海龟画图03小橙子_01完整橙子.mix"
},
"海龟画图03小橙子_02切开的橙子.mix": {
"__file__": true,
"__name__": "海龟画图03小橙子_02切开的橙子.mix"
},
"海龟画图04盛开的向日葵_01太阳公公.mix": {
"__file__": true,
"__name__": "海龟画图04盛开的向日葵_01太阳公公.mix"
},
"海龟画图04盛开的向日葵_02向日葵.mix": {
"__file__": true,
"__name__": "海龟画图04盛开的向日葵_02向日葵.mix"
},
"海龟画图05炫彩螺旋线_01螺旋四边形.mix": {
"__file__": true,
"__name__": "海龟画图05炫彩螺旋线_01螺旋四边形.mix"
},
"海龟画图05炫彩螺旋线_02彩色螺旋线.mix": {
"__file__": true,
"__name__": "海龟画图05炫彩螺旋线_02彩色螺旋线.mix"
},
"海龟画图06米思齐Logo_01米思齐Logo.mix": {
"__file__": true,
"__name__": "海龟画图06米思齐Logo_01米思齐Logo.mix"
},
"海龟画图07闪烁星星_01正五角星.mix": {
"__file__": true,
"__name__": "海龟画图07闪烁星星_01正五角星.mix"
},
"海龟画图07闪烁星星_02正n角星.mix": {
"__file__": true,
"__name__": "海龟画图07闪烁星星_02正n角星.mix"
},
"海龟画图08猜一猜_01猜性别.mix": {
"__file__": true,
"__name__": "海龟画图08猜一猜_01猜性别.mix"
},
"海龟画图08猜一猜_02猜年龄.mix": {
"__file__": true,
"__name__": "海龟画图08猜一猜_02猜年龄.mix"
},
"海龟画图09大树的年龄_01年轮.mix": {
"__file__": true,
"__name__": "海龟画图09大树的年龄_01年轮.mix"
},
"海龟画图09大树的年龄_02树年龄.mix": {
"__file__": true,
"__name__": "海龟画图09大树的年龄_02树年龄.mix"
},
"海龟画图10公共汽车_01公共汽车.mix": {
"__file__": true,
"__name__": "海龟画图10公共汽车_01公共汽车.mix"
},
"海龟画图11美丽星空_01星空.mix": {
"__file__": true,
"__name__": "海龟画图11美丽星空_01星空.mix"
},
"海龟画图12斐波那契数列_01输出斐波那契额数列.mix": {
"__file__": true,
"__name__": "海龟画图12斐波那契数列_01输出斐波那契额数列.mix"
},
"海龟画图12斐波那契数列_02斐波那契额螺旋线.mix": {
"__file__": true,
"__name__": "海龟画图12斐波那契数列_02斐波那契额螺旋线.mix"
},
"__file__": false,
"__name__": "mix"
},
"__file__": false,
"__name__": "海龟画图"
}
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,9 @@
import aip
import os
f = open("audio.mp3", 'wb')
client = aip.AipSpeech("Enter Your APP_ID", "Enter Your API_KEY", "Enter Your SECRET_KEY")
f.write(client.synthesis("步行导航开始直行后前方50米右转", options={}))
os.startfile("audio.mp3")

View File

@@ -0,0 +1,8 @@
import FileDialog
import aip
f = open(FileDialog.getOneFile(), 'rb')
client = aip.AipSpeech("Enter Your APP_ID", "Enter Your API_KEY", "Enter Your SECRET_KEY")
print(client.asr(f.read(), options={})["result"][0])

View File

@@ -0,0 +1,9 @@
import audio
import aip
audio.audio_record("d:\\1.wav",3)
f = open("d:\\1.wav", 'rb')
client = aip.AipSpeech("Enter Your APP_ID", "Enter Your API_KEY", "Enter Your SECRET_KEY")
print(client.asr(f.read(), options={})["result"][0])

View File

@@ -0,0 +1,8 @@
import FileDialog
import aip
f = open(FileDialog.getOneFile(), 'rb')
client = aip.AipImageClassify("Enter Your APP_ID", "Enter Your API_KEY", "Enter Your SECRET_KEY")
print(client.advancedGeneral(f.read(), options={})["result"][0]["keyword"])

View File

@@ -0,0 +1,9 @@
import aip
import FileDialog
client = aip.AipImageClassify("Enter Your APP_ID", "Enter Your API_KEY", "Enter Your SECRET_KEY")
for i in FileDialog.getManyFiles():
f = open(i, 'rb')
print(client.advancedGeneral(f.read(), options={})["result"][0]["keyword"])

View File

@@ -0,0 +1,7 @@
import aip
import FileDialog
client = aip.AipFace("Enter Your APP_ID", "Enter Your API_KEY", "Enter Your SECRET_KEY")
print(client.match(FileDialog.getOneFile(),FileDialog.getOneFile(), options={})["score"])

View File

@@ -0,0 +1,10 @@
import aip
import cam
import FileDialog
client = aip.AipFace("Enter Your APP_ID", "Enter Your API_KEY", "Enter Your SECRET_KEY")
cam.photo_capture("d:\\1.jpg","q")
print(client.match(FileDialog.getOneFile(),FileDialog.getOneFile(), options={})["score"])

View File

@@ -0,0 +1,8 @@
import FileDialog
import aip
f = open(FileDialog.getOneFile(), 'rb')
client = aip.AipOcr("Enter Your APP_ID", "Enter Your API_KEY", "Enter Your SECRET_KEY")
print(client.basicGeneral(f.read(), options={}))

View File

@@ -0,0 +1,9 @@
import FileDialog
import aip
f = open(FileDialog.getOneFile(), 'rb')
client = aip.AipOcr("Enter Your APP_ID", "Enter Your API_KEY", "Enter Your SECRET_KEY")
list = client.basicGeneral(f.read(), options={})["words_result"]
print(list)

View File

@@ -0,0 +1,8 @@
import FileDialog
import aip
f = open(FileDialog.getOneFile(), 'rb')
client = aip.AipOcr("Enter Your APP_ID", "Enter Your API_KEY", "Enter Your SECRET_KEY")
print(client.licensePlate(f.read(), options={}))

View File

@@ -0,0 +1,11 @@
import FileDialog
import aip
f = open(FileDialog.getOneFile(), 'rb')
f2 = open(FileDialog.getOneFile(), 'rb')
client = aip.AipOcr("Enter Your APP_ID", "Enter Your API_KEY", "Enter Your SECRET_KEY")
client2 = aip.AipImageClassify("Enter Your APP_ID", "Enter Your API_KEY", "Enter Your SECRET_KEY")
print(client.licensePlate(f.read(), options={})["words_result"]["number"])
print(client2.carDetect(f2.read(), options={}))

View File

@@ -0,0 +1,5 @@
import aip
client = aip.AipNlp("Enter Your APP_ID", "Enter Your API_KEY", "Enter Your SECRET_KEY")
print(client.ecnet("促进创客教育与本地新形产业的整合,促进当地经济的发展。", options={}))

View File

@@ -0,0 +1,10 @@
import aip
client = aip.AipNlp("Enter Your APP_ID", "Enter Your API_KEY", "Enter Your SECRET_KEY")
result = client.ecnet("促进创客教育与本地新形产业的整合,促进当地经济的发展。", options={})
content = result["text"]
item = result["item"]
wrong = item["vec_fragment"][0]["ori_frag"]
right = item["vec_fragment"][0]["correct_frag"]
print(content.replace(wrong,"{}{}".format(wrong, right)))

View File

@@ -0,0 +1,10 @@
import aip
client = aip.AipNlp("Enter Your APP_ID", "Enter Your API_KEY", "Enter Your SECRET_KEY")
s = ""
for i in client.lexer("我爱米思齐", options={})["items"]:
if s != "":
s = s + "/"
s = s + i["item"]
print(s)

View File

@@ -0,0 +1,12 @@
import aip
client = aip.AipNlp("Enter Your APP_ID", "Enter Your API_KEY", "Enter Your SECRET_KEY")
word= {"r":"代词", "v":"动词", "nr":"名词"}
s = ""
for i in client.lexer("我爱米思齐", options={})["items"]:
s = s + i["item"]
s = s + ""
s = s + word[i["pos"]]
s = s + ""
print(s)

View File

@@ -0,0 +1 @@
<xml version=\"1.0.0\" board=\"mixpy\" xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"storage_fileopen\" id=\"2:2-?eB;~A{tw;Y$=HwY\" x=\"49\" y=\"0\"><field name=\"MODE\">wb</field><value name=\"FILENAME\"><block type=\"text\" id=\"Q$Kic_g@Tey[ugYK.q@`\"><field name=\"TEXT\">audio.mp3</field></block></value><value name=\"FILE\"><block type=\"variables_get\" id=\";{vGm?|:yE[U|1Y$Lx.F\"><field name=\"VAR\">f</field></block></value><next><block type=\"AI_client\" id=\"Yj[K^6W}o*!WwqOINQ};\"><field name=\"CTYPE\">AipSpeech</field><value name=\"SUB\"><shadow type=\"variables_get\" id=\"|T_!ZEw@.YIr5_0oxa[*\"><field name=\"VAR\">client</field></shadow></value><value name=\"APP_ID\"><shadow type=\"text\" id=\"DBBke/OyTgu.^W,LT:{!\"><field name=\"TEXT\">Enter Your APP_ID</field></shadow></value><value name=\"API_KEY\"><shadow type=\"text\" id=\"Sc[3I9;p$RR_QkLx_@pz\"><field name=\"TEXT\">Enter Your API_KEY</field></shadow></value><value name=\"SECRET_KEY\"><shadow type=\"text\" id=\"+H{Yye%)mB5O,LLlvnQm\"><field name=\"TEXT\">Enter Your SECRET_KEY</field></shadow></value><next><block type=\"storage_file_write\" id=\"8;IkuPSh)Gt/^jB5c-`D\"><value name=\"data\"><block type=\"AI_Speech_synthesis\" id=\"AO%zr2WoE1bs3!_xfc9i\"><value name=\"SUB\"><shadow type=\"variables_get\" id=\"[CDg[N^sw8${vS#/BC/)\"><field name=\"VAR\">client</field></shadow></value><value name=\"STR\"><shadow type=\"text\" id=\"S2.rR{,MJIYmwL}xajYy\"><field name=\"TEXT\">\u6B65\u884C\u5BFC\u822A\u5F00\u59CB\uFF0C\u76F4\u884C\u540E\u524D\u65B950\u7C73\u53F3\u8F6C</field></shadow></value><value name=\"ATTR\"><block type=\"dicts_create_with_noreturn\" id=\"2cZS4hMIu31WN~d},Y)e\"><mutation items=\"0\"></mutation></block></value></block></value><value name=\"FILE\"><block type=\"variables_get\" id=\"Hz|(|TZW5;%Z/ZS{XME7\"><field name=\"VAR\">f</field></block></value><next><block type=\"storage_open_file_with_os\" id=\"kw|-hku4VK9Z(y;Pm,IA\"><value name=\"fn\"><shadow type=\"text\" id=\"YjvKC*E2u1i~-,?TKxES\"><field name=\"TEXT\">audio.mp3</field></shadow></value></block></next></block></next></block></next></block></xml>

View File

@@ -0,0 +1 @@
<xml version=\"1.0.0\" board=\"mixpy\" xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"storage_fileopen\" id=\"Y)-:A}fF:$7xRdX[{9Hy\" x=\"-639\" y=\"139\"><field name=\"MODE\">rb</field><value name=\"FILENAME\"><shadow type=\"text\" id=\"~i+o*kit;2;CXR$(JeJ/\"><field name=\"TEXT\">d:\\\\1.wav</field></shadow><block type=\"AI_ChooseAndGet\" id=\"/,4U_YSD0;q?50=^X=iD\"><field name=\"TYPE\">getOneFile</field></block></value><value name=\"FILE\"><shadow type=\"variables_get\" id=\"0R:SJ}v!sJcOw;tsXIL.\"><field name=\"VAR\">f</field></shadow></value><next><block type=\"AI_client\" id=\"wmM@tZ6eB!o$;%H/OkZM\"><field name=\"CTYPE\">AipSpeech</field><value name=\"SUB\"><shadow type=\"variables_get\" id=\"$B09lNT|E8y.{1QvG0{O\"><field name=\"VAR\">client</field></shadow></value><value name=\"APP_ID\"><shadow type=\"text\" id=\"fbtYDa$_9sr9%G?TupmS\"><field name=\"TEXT\">Enter Your APP_ID</field></shadow></value><value name=\"API_KEY\"><shadow type=\"text\" id=\"-`F8PR5F%k53R!eQP?4q\"><field name=\"TEXT\">Enter Your API_KEY</field></shadow></value><value name=\"SECRET_KEY\"><shadow type=\"text\" id=\"Miu;=`$?}u.cppeIyqEl\"><field name=\"TEXT\">Enter Your SECRET_KEY</field></shadow></value><next><block type=\"inout_print\" id=\"Nw~Cae.Pr!%h75yVaEZ{\"><value name=\"VAR\"><shadow type=\"text\" id=\"GXKlX/R||+GVf*UrKt/U\"><field name=\"TEXT\">Hello</field></shadow><block type=\"AI_result\" id=\"i|2B(WYs#|#Xl;tiDH0i\"><field name=\"CTYPE\">Speech</field><value name=\"AI\"><block type=\"AI_Speech_asr\" id=\"[I+pFC#*nT6TJ(tsAA{3\"><value name=\"SUB\"><shadow type=\"variables_get\" id=\"I0JkWE+t4i|x:0@]do5[\"><field name=\"VAR\">client</field></shadow></value><value name=\"FILE\"><block type=\"storage_get_contents_without_para\" id=\"y%Laru!2y$o`y_K_IMld\"><field name=\"MODE\">read</field><value name=\"FILE\"><shadow type=\"variables_get\" id=\"VxH{pLIz0u!./|yW[f+G\"><field name=\"VAR\">f</field></shadow></value></block></value><value name=\"ATTR\"><block type=\"dicts_create_with_noreturn\" id=\"]$nau/fwH*l;Xp@^lTKw\"><mutation items=\"0\"></mutation></block></value></block></value></block></value></block></next></block></next></block></xml>

View File

@@ -0,0 +1 @@
<xml version=\"1.0.0\" board=\"mixpy\" xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"AI_audio\" id=\"?LE;%eg#d~K7}U{hq2dR\" x=\"-670\" y=\"102\"><value name=\"VAR\"><shadow type=\"text\" id=\"pP!Bb#M0rxQ)^MCsMvho\"><field name=\"TEXT\">d:\\\\1.wav</field></shadow></value><value name=\"TIME\"><shadow type=\"math_number\" id=\"V-dJ^2ob-bMua6R0ab2h\"><field name=\"NUM\">3</field></shadow></value><next><block type=\"storage_fileopen\" id=\"Y)-:A}fF:$7xRdX[{9Hy\"><field name=\"MODE\">rb</field><value name=\"FILENAME\"><shadow type=\"text\" id=\"~i+o*kit;2;CXR$(JeJ/\"><field name=\"TEXT\">d:\\\\1.wav</field></shadow></value><value name=\"FILE\"><shadow type=\"variables_get\" id=\"0R:SJ}v!sJcOw;tsXIL.\"><field name=\"VAR\">f</field></shadow></value><next><block type=\"AI_client\" id=\"m*GEwk7I+3f*VX.r`0I[\"><field name=\"CTYPE\">AipSpeech</field><value name=\"SUB\"><shadow type=\"variables_get\" id=\"(nr!|@mv(Md4)b98ppq`\"><field name=\"VAR\">client</field></shadow></value><value name=\"APP_ID\"><shadow type=\"text\" id=\"0*zp@nn/!0#T`~JpUBTx\"><field name=\"TEXT\">Enter Your APP_ID</field></shadow></value><value name=\"API_KEY\"><shadow type=\"text\" id=\"ppYEy)TS]E|-;-#Y@+dP\"><field name=\"TEXT\">Enter Your API_KEY</field></shadow></value><value name=\"SECRET_KEY\"><shadow type=\"text\" id=\"#QW[=OTWy}1a!hI;+q3H\"><field name=\"TEXT\">Enter Your SECRET_KEY</field></shadow></value><next><block type=\"inout_print\" id=\"Nw~Cae.Pr!%h75yVaEZ{\"><value name=\"VAR\"><shadow type=\"text\" id=\"GXKlX/R||+GVf*UrKt/U\"><field name=\"TEXT\">Hello</field></shadow><block type=\"AI_result\" id=\"i|2B(WYs#|#Xl;tiDH0i\"><field name=\"CTYPE\">Speech</field><value name=\"AI\"><block type=\"AI_Speech_asr\" id=\"[I+pFC#*nT6TJ(tsAA{3\"><value name=\"SUB\"><shadow type=\"variables_get\" id=\"I0JkWE+t4i|x:0@]do5[\"><field name=\"VAR\">client</field></shadow></value><value name=\"FILE\"><block type=\"storage_get_contents_without_para\" id=\"y%Laru!2y$o`y_K_IMld\"><field name=\"MODE\">read</field><value name=\"FILE\"><shadow type=\"variables_get\" id=\"VxH{pLIz0u!./|yW[f+G\"><field name=\"VAR\">f</field></shadow></value></block></value><value name=\"ATTR\"><block type=\"dicts_create_with_noreturn\" id=\"]$nau/fwH*l;Xp@^lTKw\"><mutation items=\"0\"></mutation></block></value></block></value></block></value></block></next></block></next></block></next></block></xml>

View File

@@ -0,0 +1 @@
<xml version=\"1.0.0\" board=\"mixpy\" xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"storage_fileopen\" id=\"_l[46Cn%^bMSm;tuB~I1\" x=\"-696\" y=\"138\"><field name=\"MODE\">rb</field><value name=\"FILENAME\"><shadow type=\"text\" id=\"@V?d*Z%1KMnl@V1DkYM2\"><field name=\"TEXT\">filename.txt</field></shadow><block type=\"AI_ChooseAndGet\" id=\"tGDYFKrp`QNdQb?Uz?@8\"><field name=\"TYPE\">getOneFile</field></block></value><value name=\"FILE\"><shadow type=\"variables_get\" id=\"1Y@=v$RFm3{:imv0AbXk\"><field name=\"VAR\">f</field></shadow></value><next><block type=\"AI_client\" id=\"UPD7Po$xAEsJuvvb-m{]\"><field name=\"CTYPE\">AipImageClassify</field><value name=\"SUB\"><shadow type=\"variables_get\" id=\"iH|o?~E3}3G(X{bZZc;@\"><field name=\"VAR\">client</field></shadow></value><value name=\"APP_ID\"><shadow type=\"text\" id=\"c_wd?DIwju1Zg4QGv]*G\"><field name=\"TEXT\">Enter Your APP_ID</field></shadow></value><value name=\"API_KEY\"><shadow type=\"text\" id=\"gbqCIfYxr+xNvFy]CBlQ\"><field name=\"TEXT\">Enter Your API_KEY</field></shadow></value><value name=\"SECRET_KEY\"><shadow type=\"text\" id=\"RKzs_;[h%2HFS,W`euL[\"><field name=\"TEXT\">Enter Your SECRET_KEY</field></shadow></value><next><block type=\"inout_print\" id=\"bZcn*v8ARB^fGM5_.]E=\"><value name=\"VAR\"><shadow type=\"text\" id=\"ze6US|WK(wmBn@4hY3Uf\"><field name=\"TEXT\">Hello</field></shadow><block type=\"AI_result\" id=\"H.Hs#XGG3_jKdWinyANS\"><field name=\"CTYPE\">Image</field><value name=\"AI\"><block type=\"AI_ImageClassify\" id=\"#UtlMSZLQkJ4|3%RZ33O\"><value name=\"SUB\"><shadow type=\"variables_get\" id=\"4}LC^.Mx(=;Z,Wx3lp(j\"><field name=\"VAR\">client</field></shadow></value><value name=\"FUNC\"><shadow type=\"AI_ImageClassify_Func\" id=\"6^pcw~S-}j}DOOlA:ZI1\"><field name=\"TYPE\">advancedGeneral</field></shadow></value><value name=\"ADDR\"><block type=\"storage_get_contents_without_para\" id=\"fpDD+|;BCYyoLE$~@RPy\"><field name=\"MODE\">read</field><value name=\"FILE\"><shadow type=\"variables_get\" id=\"IhbEA2Lq50ZBP,j%xH8+\"><field name=\"VAR\">f</field></shadow></value></block></value><value name=\"ATTR\"><block type=\"dicts_create_with_noreturn\" id=\"MHSjH+5z@;Ag,!uge|:l\"><mutation items=\"0\"></mutation></block></value></block></value></block></value></block></next></block></next></block></xml>

View File

@@ -0,0 +1 @@
<xml version=\"1.0.0\" board=\"mixpy\" xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"AI_client\" id=\"U1(sqQ+.#$5r{ro4;+oI\" x=\"-618\" y=\"140\"><field name=\"CTYPE\">AipImageClassify</field><value name=\"SUB\"><shadow type=\"variables_get\" id=\"BdZ[-|31JC_)}pHjKW6%\"><field name=\"VAR\">client</field></shadow></value><value name=\"APP_ID\"><shadow type=\"text\" id=\"b3n(m[|%jGVh*X[dypI;\"><field name=\"TEXT\">Enter Your APP_ID</field></shadow></value><value name=\"API_KEY\"><shadow type=\"text\" id=\"skTTzeKRCd7wT_fk6e1Q\"><field name=\"TEXT\">Enter Your API_KEY</field></shadow></value><value name=\"SECRET_KEY\"><shadow type=\"text\" id=\"z13l;R#!/4IR%xmm+T*A\"><field name=\"TEXT\">Enter Your SECRET_KEY</field></shadow></value><next><block type=\"controls_forEach\" id=\"_Xr`b+jsgHYZm$y{eYy_\"><value name=\"LIST\"><shadow type=\"list_many_input\" id=\"ka!!#wnab,H=P0ksK$6m\"><field name=\"CONTENT\">0,1,2,3</field></shadow><block type=\"AI_ChooseAndGet\" id=\"rOY[bQoL;=;kAUS4sg^,\"><field name=\"TYPE\">getManyFiles</field></block></value><value name=\"VAR\"><shadow type=\"variables_get\" id=\"4rTT,v:tew-lrVfK?K{A\"><field name=\"VAR\">i</field></shadow></value><statement name=\"DO\"><block type=\"storage_fileopen\" id=\"igi!x1A9G*7V@Z4YQI7z\"><field name=\"MODE\">rb</field><value name=\"FILENAME\"><shadow type=\"text\" id=\"*|2qb{}_=+ut/5|uuMn~\"><field name=\"TEXT\">filename.txt</field></shadow><block type=\"variables_get\" id=\"nj4bxPiE+=wV9pb3RqSa\"><field name=\"VAR\">i</field></block></value><value name=\"FILE\"><shadow type=\"variables_get\" id=\"_il[xHvr8Dj2b^RDE,1m\"><field name=\"VAR\">f</field></shadow></value><next><block type=\"inout_print\" id=\"bZcn*v8ARB^fGM5_.]E=\"><value name=\"VAR\"><shadow type=\"text\" id=\"ze6US|WK(wmBn@4hY3Uf\"><field name=\"TEXT\">Hello</field></shadow><block type=\"AI_result\" id=\"H.Hs#XGG3_jKdWinyANS\"><field name=\"CTYPE\">Image</field><value name=\"AI\"><block type=\"AI_ImageClassify\" id=\"#UtlMSZLQkJ4|3%RZ33O\"><value name=\"SUB\"><shadow type=\"variables_get\" id=\"4}LC^.Mx(=;Z,Wx3lp(j\"><field name=\"VAR\">client</field></shadow></value><value name=\"FUNC\"><shadow type=\"AI_ImageClassify_Func\" id=\"6^pcw~S-}j}DOOlA:ZI1\"><field name=\"TYPE\">advancedGeneral</field></shadow></value><value name=\"ADDR\"><block type=\"storage_get_contents_without_para\" id=\"fpDD+|;BCYyoLE$~@RPy\"><field name=\"MODE\">read</field><value name=\"FILE\"><shadow type=\"variables_get\" id=\"IhbEA2Lq50ZBP,j%xH8+\"><field name=\"VAR\">f</field></shadow></value></block></value><value name=\"ATTR\"><block type=\"dicts_create_with_noreturn\" id=\"MHSjH+5z@;Ag,!uge|:l\"><mutation items=\"0\"></mutation></block></value></block></value></block></value></block></next></block></statement></block></next></block></xml>

View File

@@ -0,0 +1 @@
<xml version=\"1.0.0\" board=\"mixpy\" xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"AI_client\" id=\"?-)LQc_VjDJmqNHD,(cP\" x=\"-642\" y=\"75\"><field name=\"CTYPE\">AipFace</field><value name=\"SUB\"><shadow type=\"variables_get\" id=\"$TgS#pfpcclZXdJ[zm}I\"><field name=\"VAR\">client</field></shadow></value><value name=\"APP_ID\"><shadow type=\"text\" id=\":W~ccaY0~1Wu-pcryd7)\"><field name=\"TEXT\">Enter Your APP_ID</field></shadow></value><value name=\"API_KEY\"><shadow type=\"text\" id=\"4{(ah*-O$cXr}_+w5DzO\"><field name=\"TEXT\">Enter Your API_KEY</field></shadow></value><value name=\"SECRET_KEY\"><shadow type=\"text\" id=\"R??d/QMiZ0yDT^UnR2^y\"><field name=\"TEXT\">Enter Your SECRET_KEY</field></shadow></value><next><block type=\"inout_print\" id=\"bZcn*v8ARB^fGM5_.]E=\"><value name=\"VAR\"><shadow type=\"text\" id=\"ze6US|WK(wmBn@4hY3Uf\"><field name=\"TEXT\">Hello</field></shadow><block type=\"dicts_get\" id=\"g^`h?J8#RG5krR./6ks~\"><value name=\"DICT\"><shadow type=\"variables_get\" id=\"CS}`O)di]Vqpz[K(N$+H\"><field name=\"VAR\">mydict</field></shadow><block type=\"AI_Face_match\" id=\"t$91J3h#c8je;{7OX[/}\"><value name=\"SUB\"><shadow type=\"variables_get\" id=\"0fTcSq0uYusM|7!$LZ#N\"><field name=\"VAR\">client</field></shadow></value><value name=\"VAR\"><shadow type=\"text\" id=\"9[6jR;k*F7FwpqQz~E].\"><field name=\"TEXT\">C:/mixly.jpg</field></shadow><block type=\"AI_ChooseAndGet\" id=\"|OU_jR8|u$-4]u1fP45h\"><field name=\"TYPE\">getOneFile</field></block></value><value name=\"VAR2\"><shadow type=\"text\" id=\"NF(F$BO]x^E[?f#5b_^2\"><field name=\"TEXT\">C:/mixpy.jpg</field></shadow><block type=\"AI_ChooseAndGet\" id=\"+b_sIAiv)hUuLx!LI;aW\"><field name=\"TYPE\">getOneFile</field></block></value><value name=\"ATTR\"><block type=\"dicts_create_with_noreturn\" id=\":cMUl%FI;o/Ee%gc$7^T\"><mutation items=\"0\"></mutation></block></value></block></value><value name=\"KEY\"><shadow type=\"text\" id=\"hK8ji-5sv/F?^pJ%dEx:\"><field name=\"TEXT\">score</field></shadow></value></block></value></block></next></block></xml>

View File

@@ -0,0 +1 @@
<xml version=\"1.0.0\" board=\"mixpy\" xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"AI_client\" id=\"?-)LQc_VjDJmqNHD,(cP\" x=\"-642\" y=\"75\"><field name=\"CTYPE\">AipFace</field><value name=\"SUB\"><shadow type=\"variables_get\" id=\"$TgS#pfpcclZXdJ[zm}I\"><field name=\"VAR\">client</field></shadow></value><value name=\"APP_ID\"><shadow type=\"text\" id=\":W~ccaY0~1Wu-pcryd7)\"><field name=\"TEXT\">Enter Your APP_ID</field></shadow></value><value name=\"API_KEY\"><shadow type=\"text\" id=\"4{(ah*-O$cXr}_+w5DzO\"><field name=\"TEXT\">Enter Your API_KEY</field></shadow></value><value name=\"SECRET_KEY\"><shadow type=\"text\" id=\"R??d/QMiZ0yDT^UnR2^y\"><field name=\"TEXT\">Enter Your SECRET_KEY</field></shadow></value><next><block type=\"AI_photo\" id=\"DD(+vCh:mS@1sbJ+kHe-\"><value name=\"VAR\"><shadow type=\"text\" id=\"LR:B{~4jcs1f1eR0jph1\"><field name=\"TEXT\">d:\\\\1.jpg</field></shadow></value><value name=\"BUT\"><shadow type=\"text\" id=\"njL!-}[n2~:dIjSoSM[`\"><field name=\"TEXT\">q</field></shadow></value><next><block type=\"inout_print\" id=\"bZcn*v8ARB^fGM5_.]E=\"><value name=\"VAR\"><shadow type=\"text\" id=\"ze6US|WK(wmBn@4hY3Uf\"><field name=\"TEXT\">Hello</field></shadow><block type=\"dicts_get\" id=\"g^`h?J8#RG5krR./6ks~\"><value name=\"DICT\"><shadow type=\"variables_get\" id=\"CS}`O)di]Vqpz[K(N$+H\"><field name=\"VAR\">mydict</field></shadow><block type=\"AI_Face_match\" id=\"t$91J3h#c8je;{7OX[/}\"><value name=\"SUB\"><shadow type=\"variables_get\" id=\"0fTcSq0uYusM|7!$LZ#N\"><field name=\"VAR\">client</field></shadow></value><value name=\"VAR\"><shadow type=\"text\" id=\"9[6jR;k*F7FwpqQz~E].\"><field name=\"TEXT\">C:/mixly.jpg</field></shadow><block type=\"AI_ChooseAndGet\" id=\"|OU_jR8|u$-4]u1fP45h\"><field name=\"TYPE\">getOneFile</field></block></value><value name=\"VAR2\"><shadow type=\"text\" id=\"NF(F$BO]x^E[?f#5b_^2\"><field name=\"TEXT\">C:/mixpy.jpg</field></shadow><block type=\"AI_ChooseAndGet\" id=\"+b_sIAiv)hUuLx!LI;aW\"><field name=\"TYPE\">getOneFile</field></block></value><value name=\"ATTR\"><block type=\"dicts_create_with_noreturn\" id=\":cMUl%FI;o/Ee%gc$7^T\"><mutation items=\"0\"></mutation></block></value></block></value><value name=\"KEY\"><shadow type=\"text\" id=\"hK8ji-5sv/F?^pJ%dEx:\"><field name=\"TEXT\">score</field></shadow></value></block></value></block></next></block></next></block></xml>

View File

@@ -0,0 +1 @@
<xml version=\"1.0.0\" board=\"mixpy\" xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"storage_fileopen\" id=\"YzXj3Dmq?_X88+7fT`+^\" x=\"-643\" y=\"41\"><field name=\"MODE\">rb</field><value name=\"FILENAME\"><shadow type=\"text\" id=\"h,$h.Q{9FM4jPDObw!lp\"><field name=\"TEXT\">filename.txt</field></shadow><block type=\"AI_ChooseAndGet\" id=\",E37Vl|rNcuC$-T9{-@3\"><field name=\"TYPE\">getOneFile</field></block></value><value name=\"FILE\"><shadow type=\"variables_get\" id=\"pB/u)vfqVG4GN[eN0;gx\"><field name=\"VAR\">f</field></shadow></value><next><block type=\"AI_client\" id=\"?-)LQc_VjDJmqNHD,(cP\"><field name=\"CTYPE\">AipOcr</field><value name=\"SUB\"><shadow type=\"variables_get\" id=\"$TgS#pfpcclZXdJ[zm}I\"><field name=\"VAR\">client</field></shadow></value><value name=\"APP_ID\"><shadow type=\"text\" id=\":W~ccaY0~1Wu-pcryd7)\"><field name=\"TEXT\">Enter Your APP_ID</field></shadow></value><value name=\"API_KEY\"><shadow type=\"text\" id=\"4{(ah*-O$cXr}_+w5DzO\"><field name=\"TEXT\">Enter Your API_KEY</field></shadow></value><value name=\"SECRET_KEY\"><shadow type=\"text\" id=\"R??d/QMiZ0yDT^UnR2^y\"><field name=\"TEXT\">Enter Your SECRET_KEY</field></shadow></value><next><block type=\"inout_print\" id=\"bZcn*v8ARB^fGM5_.]E=\"><value name=\"VAR\"><shadow type=\"text\" id=\"ze6US|WK(wmBn@4hY3Uf\"><field name=\"TEXT\">Hello</field></shadow><block type=\"AI_Ocr\" id=\";f5wKyPAR7}Us))7IZ|T\"><value name=\"SUB\"><shadow type=\"variables_get\" id=\"STn5)J}lB2Yc{3|K_++#\"><field name=\"VAR\">client</field></shadow></value><value name=\"FUNC\"><shadow type=\"AI_Ocr_Func\" id=\"xDtTwWKutTI[Jop]OIU_\"><field name=\"TYPE\">basicGeneral</field></shadow></value><value name=\"ADDR\"><shadow type=\"text\" id=\")zG6%L$k35eYJVN7w-HS\"><field name=\"TEXT\">C:/mixly.jpg</field></shadow><block type=\"storage_get_contents_without_para\" id=\"c|9R,=IG)Ub,W]cwe#*q\"><field name=\"MODE\">read</field><value name=\"FILE\"><shadow type=\"variables_get\" id=\"QR%QC|?m?M5wuC*S8ZOd\"><field name=\"VAR\">f</field></shadow></value></block></value><value name=\"ATTR\"><block type=\"dicts_create_with_noreturn\" id=\"Su@oBOZ%tNvJ%ko_{Uce\"><mutation items=\"0\"></mutation></block></value></block></value></block></next></block></next></block></xml>

View File

@@ -0,0 +1 @@
<xml version=\"1.0.0\" board=\"mixpy\" xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"storage_fileopen\" id=\"YzXj3Dmq?_X88+7fT`+^\" x=\"-643\" y=\"41\"><field name=\"MODE\">rb</field><value name=\"FILENAME\"><shadow type=\"text\" id=\"h,$h.Q{9FM4jPDObw!lp\"><field name=\"TEXT\">filename.txt</field></shadow><block type=\"AI_ChooseAndGet\" id=\",E37Vl|rNcuC$-T9{-@3\"><field name=\"TYPE\">getOneFile</field></block></value><value name=\"FILE\"><shadow type=\"variables_get\" id=\"pB/u)vfqVG4GN[eN0;gx\"><field name=\"VAR\">f</field></shadow></value><next><block type=\"AI_client\" id=\"?-)LQc_VjDJmqNHD,(cP\"><field name=\"CTYPE\">AipOcr</field><value name=\"SUB\"><shadow type=\"variables_get\" id=\"$TgS#pfpcclZXdJ[zm}I\"><field name=\"VAR\">client</field></shadow></value><value name=\"APP_ID\"><shadow type=\"text\" id=\":W~ccaY0~1Wu-pcryd7)\"><field name=\"TEXT\">Enter Your APP_ID</field></shadow></value><value name=\"API_KEY\"><shadow type=\"text\" id=\"4{(ah*-O$cXr}_+w5DzO\"><field name=\"TEXT\">Enter Your API_KEY</field></shadow></value><value name=\"SECRET_KEY\"><shadow type=\"text\" id=\"R??d/QMiZ0yDT^UnR2^y\"><field name=\"TEXT\">Enter Your SECRET_KEY</field></shadow></value><next><block type=\"variables_set\" id=\"olq4i.~I;5we|KLWEBV)\"><field name=\"VAR\">list</field><value name=\"VALUE\"><block type=\"dicts_get\" id=\"A6H%Ko*]T)FK8%nB2{JC\"><value name=\"DICT\"><shadow type=\"variables_get\" id=\"QN-L5nJ2zjn%KnKe`6`|\"><field name=\"VAR\">mydict</field></shadow><block type=\"AI_Ocr\" id=\";f5wKyPAR7}Us))7IZ|T\"><value name=\"SUB\"><shadow type=\"variables_get\" id=\"STn5)J}lB2Yc{3|K_++#\"><field name=\"VAR\">client</field></shadow></value><value name=\"FUNC\"><shadow type=\"AI_Ocr_Func\" id=\"xDtTwWKutTI[Jop]OIU_\"><field name=\"TYPE\">basicGeneral</field></shadow></value><value name=\"ADDR\"><shadow type=\"text\" id=\")zG6%L$k35eYJVN7w-HS\"><field name=\"TEXT\">C:/mixly.jpg</field></shadow><block type=\"storage_get_contents_without_para\" id=\"c|9R,=IG)Ub,W]cwe#*q\"><field name=\"MODE\">read</field><value name=\"FILE\"><shadow type=\"variables_get\" id=\"QR%QC|?m?M5wuC*S8ZOd\"><field name=\"VAR\">f</field></shadow></value></block></value><value name=\"ATTR\"><block type=\"dicts_create_with_noreturn\" id=\"Su@oBOZ%tNvJ%ko_{Uce\"><mutation items=\"0\"></mutation></block></value></block></value><value name=\"KEY\"><shadow type=\"text\" id=\"f~zaw.d+$mC+3Yh@ShP)\"><field name=\"TEXT\">words_result</field></shadow></value></block></value><next><block type=\"inout_print\" id=\"bZcn*v8ARB^fGM5_.]E=\"><value name=\"VAR\"><shadow type=\"text\" id=\"ze6US|WK(wmBn@4hY3Uf\"><field name=\"TEXT\">Hello</field></shadow><block type=\"variables_get\" id=\"/yRFD?N5N_.x%ZdX]Pqu\"><field name=\"VAR\">list</field></block></value></block></next></block></next></block></next></block></xml>

View File

@@ -0,0 +1 @@
<xml version=\"1.0.0\" board=\"mixpy\" xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"storage_fileopen\" id=\"kcuJa:u(%VmA57??@wfv\" x=\"-814\" y=\"-97\"><field name=\"MODE\">rb</field><value name=\"FILENAME\"><shadow type=\"text\" id=\"yWYk0x18IhN9hPDZ%[v}\"><field name=\"TEXT\">filename.txt</field></shadow><block type=\"AI_ChooseAndGet\" id=\"F9Ik#;UES*ef($Cp(Av-\"><field name=\"TYPE\">getOneFile</field></block></value><value name=\"FILE\"><shadow type=\"variables_get\" id=\"`g]bkB*X/7N?WmHHQn;s\"><field name=\"VAR\">f</field></shadow></value><next><block type=\"AI_client\" id=\"^(#3sOY^*4ewfn8]*M,/\"><field name=\"CTYPE\">AipOcr</field><value name=\"SUB\"><shadow type=\"variables_get\" id=\"Oi?y(10e:o?rA^YvNG(%\"><field name=\"VAR\">client</field></shadow></value><value name=\"APP_ID\"><shadow type=\"text\" id=\"j5hUxLrjKJne6ttW.8}Q\"><field name=\"TEXT\">Enter Your APP_ID</field></shadow></value><value name=\"API_KEY\"><shadow type=\"text\" id=\"}*onviS#%sTcGHjUc0D8\"><field name=\"TEXT\">Enter Your API_KEY</field></shadow></value><value name=\"SECRET_KEY\"><shadow type=\"text\" id=\"qEK)-lx/b$2QlfKk!n3;\"><field name=\"TEXT\">Enter Your SECRET_KEY</field></shadow></value><next><block type=\"inout_print\" id=\"=FwA/`wjz7l1F|2$]=2q\"><value name=\"VAR\"><shadow type=\"text\" id=\"]z^a]O_mT1s@+)MY2:/u\"><field name=\"TEXT\">Hello</field></shadow><block type=\"AI_Ocr\" id=\"U)OS(uY`fYJudr#}.IfS\"><value name=\"SUB\"><shadow type=\"variables_get\" id=\"G$iM6[mxq}pX?m%[Iaw!\"><field name=\"VAR\">client</field></shadow></value><value name=\"FUNC\"><shadow type=\"AI_Ocr_Func\" id=\"kkXiDzj@_w!^InEZ_[~i\"><field name=\"TYPE\">licensePlate</field></shadow></value><value name=\"ADDR\"><shadow type=\"text\" id=\"lMQxv{Aby}aL]hu|N#$I\"><field name=\"TEXT\">C:/mixly.jpg</field></shadow><block type=\"storage_get_contents_without_para\" id=\"QY-m42P$u;W.G:o!x$}A\"><field name=\"MODE\">read</field><value name=\"FILE\"><shadow type=\"variables_get\" id=\"[HZ*83^]~!6O`j,{Z,[a\"><field name=\"VAR\">f</field></shadow></value></block></value><value name=\"ATTR\"><block type=\"dicts_create_with_noreturn\" id=\"3SOw3q,({N$CXfEacg3+\"><mutation items=\"0\"></mutation></block></value></block></value></block></next></block></next></block></xml>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
<xml version=\"1.0.0\" board=\"mixpy\" xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"AI_client\" id=\"NsHKIDlTbr#!9l2U39(2\" x=\"-1047\" y=\"65\"><field name=\"CTYPE\">AipNlp</field><value name=\"SUB\"><shadow type=\"variables_get\" id=\"Jp-^LaqgYD(nkwt$j5MV\"><field name=\"VAR\">client</field></shadow></value><value name=\"APP_ID\"><shadow type=\"text\" id=\"f%ZMZzRbo,JJ76Tf-LZR\"><field name=\"TEXT\">Enter Your APP_ID</field></shadow></value><value name=\"API_KEY\"><shadow type=\"text\" id=\"Pgv1`|G)yu2Uaq]wp0sv\"><field name=\"TEXT\">Enter Your API_KEY</field></shadow></value><value name=\"SECRET_KEY\"><shadow type=\"text\" id=\"3P{ZYQ~=GzKL*(XGnstk\"><field name=\"TEXT\">Enter Your SECRET_KEY</field></shadow></value><next><block type=\"inout_print\" id=\"kJ4[1V7hd*$Bdc9:7.}3\"><value name=\"VAR\"><shadow type=\"text\" id=\"c`V:)9(^tO!|3G;1GtSp\"><field name=\"TEXT\">Hello</field></shadow><block type=\"AI_Nlp\" id=\"N9@8x+6zEzi~gCIX,^x.\"><value name=\"SUB\"><shadow type=\"variables_get\" id=\"aTz2ZFlVyq/8x#dp8IkQ\"><field name=\"VAR\">client</field></shadow></value><value name=\"FUNC\"><shadow type=\"AI_Nlp_Func\" id=\"9Tu]Ed1`CH8G+fclqF~{\"><field name=\"TYPE\">ecnet</field></shadow></value><value name=\"STR\"><shadow type=\"text\" id=\"]xXT1q2(s!L-5f8;BRjv\"><field name=\"TEXT\">\u4FC3\u8FDB\u521B\u5BA2\u6559\u80B2\u4E0E\u672C\u5730\u65B0\u5F62\u4EA7\u4E1A\u7684\u6574\u5408\uFF0C\u4FC3\u8FDB\u5F53\u5730\u7ECF\u6D4E\u7684\u53D1\u5C55\u3002</field></shadow></value><value name=\"ATTR\"><block type=\"dicts_create_with_noreturn\" id=\"XyuGuLCn8OmC;f]1vwA0\"><mutation items=\"0\"></mutation></block></value></block></value></block></next></block></xml>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
<xml version=\"1.0.0\" board=\"mixpy\" xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"AI_client\" id=\"}jn9cknbK$LIdV3?Q-W+\" x=\"-122\" y=\"-47\"><field name=\"CTYPE\">AipNlp</field><value name=\"SUB\"><shadow type=\"variables_get\" id=\"5Xrf){C(qY@V[G9$Zelv\"><field name=\"VAR\">client</field></shadow></value><value name=\"APP_ID\"><shadow type=\"text\" id=\"Rf@b+ryX.xv(,O|USF/4\"><field name=\"TEXT\">Enter Your APP_ID</field></shadow></value><value name=\"API_KEY\"><shadow type=\"text\" id=\"=6X9W(-=tajViD0oGm]f\"><field name=\"TEXT\">Enter Your API_KEY</field></shadow></value><value name=\"SECRET_KEY\"><shadow type=\"text\" id=\"01wVjI`6%:rar45$=d1L\"><field name=\"TEXT\">Enter Your SECRET_KEY</field></shadow></value><next><block type=\"variables_set\" id=\"[EJXW%pM2wT=CciIcU@A\"><field name=\"VAR\">s</field><value name=\"VALUE\"><block type=\"text\" id=\"),pL}Ie`UUf[D9@A!lN4\"><field name=\"TEXT\"></field></block></value><next><block type=\"controls_forEach\" id=\"aA,Vwz!`%~WRs1qC4-p@\"><value name=\"LIST\"><shadow type=\"list_many_input\"><field name=\"CONTENT\">0,1,2,3</field></shadow><block type=\"dicts_get\" id=\"x$P;9bcu@g(hH(r1Txyo\"><value name=\"DICT\"><shadow type=\"variables_get\" id=\"]laU/N5mAWpV,qR!(!E{\"><field name=\"VAR\">mydict</field></shadow><block type=\"AI_Nlp\" id=\"x*9c^.W%RxM]AZNfJB?d\"><value name=\"SUB\"><shadow type=\"variables_get\" id=\"o./{=o/?80H*D||hjT1A\"><field name=\"VAR\">client</field></shadow></value><value name=\"FUNC\"><shadow type=\"AI_Nlp_Func\" id=\"?StfD}dgU;BIyu]#h)J*\"><field name=\"TYPE\">lexer</field></shadow></value><value name=\"STR\"><shadow type=\"text\" id=\"cVXNfiLq:%bsO|go5P?:\"><field name=\"TEXT\">\u6211\u7231\u7C73\u601D\u9F50</field></shadow></value><value name=\"ATTR\"><block type=\"dicts_create_with_noreturn\" id=\"*9cP;7)Q9Hcte~?I-=nh\"><mutation items=\"0\"></mutation></block></value></block></value><value name=\"KEY\"><shadow type=\"text\" id=\"$hLz3zJ$)_+UQK__1yRu\"><field name=\"TEXT\">items</field></shadow></value></block></value><value name=\"VAR\"><shadow type=\"variables_get\" id=\"9K9uR1O9},(FC`D~$t1K\"><field name=\"VAR\">i</field></shadow></value><statement name=\"DO\"><block type=\"controls_if\" id=\"6/hLH#phpV_Ow+,2%~C{\"><value name=\"IF0\"><block type=\"logic_compare\" id=\"M;w!c1bR59ofAlLa8$G$\"><field name=\"OP\">NEQ</field><value name=\"A\"><block type=\"variables_get\" id=\"RL|X.hO=$IbG1gsrC7:s\"><field name=\"VAR\">s</field></block></value><value name=\"B\"><block type=\"text\" id=\"/;eR03kp6)VtQPEsk_Vt\"><field name=\"TEXT\"></field></block></value></block></value><statement name=\"DO0\"><block type=\"variables_set\" id=\"gXj_H64F*~?!#7#.QUOJ\"><field name=\"VAR\">s</field><value name=\"VALUE\"><block type=\"text_join\" id=\"M!f-z1LD-QF-TRY0I^SN\"><value name=\"A\"><shadow type=\"text\" id=\"^p!kUn8FUqt_O~.1:1S5\"><field name=\"TEXT\">Hello</field></shadow><block type=\"variables_get\" id=\"L8[cC!%/jC7ej`a09E]j\"><field name=\"VAR\">s</field></block></value><value name=\"B\"><shadow type=\"text\" id=\"aMVcaw2XHy.f1AA;$E}@\"><field name=\"TEXT\">/</field></shadow></value></block></value></block></statement><next><block type=\"variables_set\" id=\"7KYatlu.I|RQA(v*7)81\"><field name=\"VAR\">s</field><value name=\"VALUE\"><block type=\"text_join\" id=\"di|avjE^BaC+TpgIVN*{\"><value name=\"A\"><shadow type=\"text\" id=\"^p!kUn8FUqt_O~.1:1S5\"><field name=\"TEXT\">Hello</field></shadow><block type=\"variables_get\" id=\"K[/E8uu?X2N,qu]2@HEq\"><field name=\"VAR\">s</field></block></value><value name=\"B\"><shadow type=\"text\" id=\"TJvzo-`!w9f5ia-]8iS@\"><field name=\"TEXT\">/</field></shadow><block type=\"dicts_get\" id=\"5Pq5P3=1mtLljb~hA]y4\"><value name=\"DICT\"><shadow type=\"variables_get\" id=\"#lv+IF6%7@kH!gZih:p7\"><field name=\"VAR\">i</field></shadow></value><value name=\"KEY\"><shadow type=\"text\" id=\"6X@-idJP-wTp3`?yIymK\"><field name=\"TEXT\">item</field></shadow></value></block></value></block></value></block></next></block></statement><next><block type=\"inout_print\" id=\"19V/ut%[2r%?1r/V*^kX\"><value name=\"VAR\"><shadow type=\"text\" id=\"o.t2ooo:U7p_]a(`s9/?\"><field name=\"TEXT\">Hello</field></shadow><block type=\"variables_get\" id=\"VuU.sa|t$oaw/WkmxF*}\"><field name=\"VAR\">s</field></block></value></block></next></block></next></block></next></block></xml>

View File

@@ -0,0 +1 @@
<xml version=\"1.0\" board=\"mixpy\" xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"turtle_create\" id=\"AQ)1H^k`!?5XbRWM?SX9\" x=\"198\" y=\"46\"><field name=\"VAR\">tina</field><next><block type=\"variables_set\" id=\"1X]Pa?A%t8)ZLWNa$;di\"><field name=\"VAR\">angle</field><value name=\"VALUE\"><block type=\"math_number\" id=\"z32!ttJ?=~7qdKI0z^Rv\"><field name=\"NUM\">72</field></block></value><next><block type=\"controls_forEach\" id=\"9!9q)Ox~o%Xx_hOgFm.6\"><value name=\"LIST\"><shadow type=\"list_many_input\"><field name=\"CONTENT\">0,1,2,3</field></shadow><block type=\"controls_range\" id=\"ztXl$E#j?;NfRz-DhExz\"><value name=\"FROM\"><shadow type=\"math_number\" id=\"#BjRzljIb`0X$Q!`PF=M\"><field name=\"NUM\">0</field></shadow></value><value name=\"TO\"><shadow type=\"math_number\" id=\"Y6[G$~;cbOyIKN@gF#ZI\"><field name=\"NUM\">5</field></shadow></value><value name=\"STEP\"><shadow type=\"math_number\" id=\"8_r7_yoYXL+iL0d*l77x\"><field name=\"NUM\">1</field></shadow></value></block></value><value name=\"VAR\"><shadow type=\"variables_get\" id=\"8h(S3TD}~|AWSHz09j[S\"><field name=\"VAR\">i</field></shadow></value><statement name=\"DO\"><block type=\"turtle_move\" id=\"T=%r^cz,LzpC!LkqDR]N\"><field name=\"DIR\">forward</field><value name=\"TUR\"><shadow type=\"variables_get\" id=\"?!=c+G=r9=aFobsnyq~B\"><field name=\"VAR\">tina</field></shadow></value><value name=\"VAR\"><shadow type=\"math_number\" id=\"nqbbRI6A{SIX_,|7_]/%\"><field name=\"NUM\">120</field></shadow></value><next><block type=\"turtle_rotate\" id=\"|([N=;0UsyukepP]]zWU\"><field name=\"DIR\">right</field><value name=\"TUR\"><shadow type=\"variables_get\" id=\";9N5~Fs!tA:|BGui[[Hi\"><field name=\"VAR\">tina</field></shadow></value><value name=\"VAR\"><shadow type=\"math_number\" id=\"/9z;*CLYREp_WU]ad}r4\"><field name=\"NUM\">90</field></shadow><block type=\"variables_get\" id=\"o_gZ6brO:1:mWGicR}W5\"><field name=\"VAR\">angle</field></block></value></block></next></block></statement><next><block type=\"turtle_visible\" id=\"d]pU+`]`!#D(/XJh}3qI\"><field name=\"DIR\">hideturtle</field><value name=\"TUR\"><shadow type=\"variables_get\" id=\"y+=yXR[o4W59cpkxl@#`\"><field name=\"VAR\">tina</field></shadow></value></block></next></block></next></block></next></block></xml>

View File

@@ -0,0 +1 @@
<xml version=\"1.0\" board=\"mixpy\" xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"turtle_create\" id=\"4fe![FesO2tc5u`O:LTv\" x=\"354\" y=\"122\"><field name=\"VAR\">tina</field><next><block type=\"turtle_size\" id=\"-@U,U1r#s8O%VrYH_K$k\"><value name=\"TUR\"><shadow type=\"variables_get\" id=\"poL3Y(W;pUO%2}2:(Nvh\"><field name=\"VAR\">tina</field></shadow></value><value name=\"data\"><shadow type=\"math_number\" id=\"17+)#[*kVmC=O`hR,~$T\"><field name=\"NUM\">5</field></shadow></value><next><block type=\"controls_forEach\" id=\"CcidvWlTmjzIPtjzt}7J\"><value name=\"LIST\"><shadow type=\"list_many_input\"><field name=\"CONTENT\">0,1,2,3</field></shadow><block type=\"controls_range\" id=\"[j:7|A(3m}op^w)@B(oH\"><value name=\"FROM\"><shadow type=\"math_number\" id=\"/VmA]W8YT|8:R.:Fu0ss\"><field name=\"NUM\">0</field></shadow></value><value name=\"TO\"><shadow type=\"math_number\" id=\"IG.#8|_WffZVWn(ElM/Y\"><field name=\"NUM\">50</field></shadow></value><value name=\"STEP\"><shadow type=\"math_number\" id=\"19*%,#Gbw-0jmGF8_O|F\"><field name=\"NUM\">1</field></shadow></value></block></value><value name=\"VAR\"><shadow type=\"variables_get\" id=\"SJl6V`U/ZkkGy9j[hzES\"><field name=\"VAR\">i</field></shadow></value><statement name=\"DO\"><block type=\"turtle_move\" id=\"m.Kqy(B8R@mE=A)G}+M^\"><field name=\"DIR\">forward</field><value name=\"TUR\"><shadow type=\"variables_get\" id=\"IwO5IB20gi-%CRH7g}Mx\"><field name=\"VAR\">tina</field></shadow></value><value name=\"VAR\"><shadow type=\"math_number\" id=\"qkm2[?-(_=[0Lvnk!nZz\"><field name=\"NUM\">20</field></shadow><block type=\"math_arithmetic\" id=\"wf5t`h,1jF`KtR?8-[aL\"><field name=\"OP\">MULTIPLY</field><value name=\"A\"><shadow type=\"math_number\" id=\"rjX+7%QXc]Jf690=n3mh\"><field name=\"NUM\">4</field></shadow></value><value name=\"B\"><shadow type=\"math_number\" id=\"S{Oib@WgJteX#u2wB9+M\"><field name=\"NUM\">1</field></shadow><block type=\"variables_get\" id=\"DsAP]N2`?Zn_+/{$zE%E\"><field name=\"VAR\">i</field></block></value></block></value><next><block type=\"turtle_rotate\" id=\"0@Iy3tATU88xQz_*{CEB\"><field name=\"DIR\">right</field><value name=\"TUR\"><shadow type=\"variables_get\" id=\"drMLiWdzeB5o5Ce:!mSM\"><field name=\"VAR\">tina</field></shadow></value><value name=\"VAR\"><shadow type=\"math_number\" id=\"kZe@e^4Gp+E*F|7(T13R\"><field name=\"NUM\">90</field></shadow></value></block></next></block></statement><next><block type=\"turtle_visible\" id=\"m$aUw7wmp.-v}B(Kk8Y#\"><field name=\"DIR\">hideturtle</field><value name=\"TUR\"><shadow type=\"variables_get\" id=\",dN`CWcG8gg?0dJ@t[(^\"><field name=\"VAR\">tina</field></shadow></value></block></next></block></next></block></next></block></xml>

View File

@@ -0,0 +1 @@
<xml version=\"1.0\" board=\"mixpy\" xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"turtle_create\" id=\"4fe![FesO2tc5u`O:LTv\" x=\"208\" y=\"48\"><field name=\"VAR\">tina</field><next><block type=\"turtle_size\" id=\"-@U,U1r#s8O%VrYH_K$k\"><value name=\"TUR\"><shadow type=\"variables_get\" id=\"poL3Y(W;pUO%2}2:(Nvh\"><field name=\"VAR\">tina</field></shadow></value><value name=\"data\"><shadow type=\"math_number\" id=\"17+)#[*kVmC=O`hR,~$T\"><field name=\"NUM\">5</field></shadow></value><next><block type=\"lists_create_with_text\" id=\"rGj^?_sXZtK-3(HHy*@d\"><field name=\"VAR\">colorlist</field><field name=\"TEXT\">'red','blue','green','yellow'</field><next><block type=\"controls_forEach\" id=\"CcidvWlTmjzIPtjzt}7J\"><value name=\"LIST\"><shadow type=\"list_many_input\"><field name=\"CONTENT\">0,1,2,3</field></shadow><block type=\"controls_range\" id=\"[j:7|A(3m}op^w)@B(oH\"><value name=\"FROM\"><shadow type=\"math_number\" id=\"/VmA]W8YT|8:R.:Fu0ss\"><field name=\"NUM\">0</field></shadow></value><value name=\"TO\"><shadow type=\"math_number\" id=\"IG.#8|_WffZVWn(ElM/Y\"><field name=\"NUM\">50</field></shadow></value><value name=\"STEP\"><shadow type=\"math_number\" id=\"19*%,#Gbw-0jmGF8_O|F\"><field name=\"NUM\">1</field></shadow></value></block></value><value name=\"VAR\"><shadow type=\"variables_get\" id=\"SJl6V`U/ZkkGy9j[hzES\"><field name=\"VAR\">i</field></shadow></value><statement name=\"DO\"><block type=\"turtle_pencolor_hex\" id=\"@x_L?spAKP`KqG6i6n$)\"><value name=\"TUR\"><shadow type=\"variables_get\" id=\".p.~,@%lGGb~wq-d:r|?\"><field name=\"VAR\">tina</field></shadow></value><value name=\"VAR\"><shadow type=\"text\" id=\"D9T?yOAZKPOUxaXJ6*h`\"><field name=\"TEXT\">FF0000</field></shadow><block type=\"lists_get_index\" id=\"+rUMoCyL:c)wdn~7afK}\"><value name=\"LIST\"><shadow type=\"variables_get\" id=\"!ra;zEj|W~*5I)%7~qe;\"><field name=\"VAR\">colorlist</field></shadow></value><value name=\"AT\"><shadow type=\"math_number\" id=\"1SnwZ~Y%bO.Hzr~bl/7f\"><field name=\"NUM\">0</field></shadow><block type=\"math_arithmetic\" id=\")?FLEKKuiB3g^z4zMK1E\"><field name=\"OP\">QUYU</field><value name=\"A\"><shadow type=\"math_number\" id=\"mp60,UYFws4*tvDzqtyZ\"><field name=\"NUM\">1</field></shadow><block type=\"variables_get\" id=\"g|$n]ig].a8O79m7R,N(\"><field name=\"VAR\">i</field></block></value><value name=\"B\"><shadow type=\"math_number\" id=\"+oOZ_w-FrKUHvD+1,4Oa\"><field name=\"NUM\">4</field></shadow></value></block></value></block></value><next><block type=\"turtle_move\" id=\"m.Kqy(B8R@mE=A)G}+M^\"><field name=\"DIR\">forward</field><value name=\"TUR\"><shadow type=\"variables_get\" id=\"IwO5IB20gi-%CRH7g}Mx\"><field name=\"VAR\">tina</field></shadow></value><value name=\"VAR\"><shadow type=\"math_number\" id=\"qkm2[?-(_=[0Lvnk!nZz\"><field name=\"NUM\">20</field></shadow><block type=\"math_arithmetic\" id=\"wf5t`h,1jF`KtR?8-[aL\"><field name=\"OP\">MULTIPLY</field><value name=\"A\"><shadow type=\"math_number\" id=\"rjX+7%QXc]Jf690=n3mh\"><field name=\"NUM\">4</field></shadow></value><value name=\"B\"><shadow type=\"math_number\" id=\"S{Oib@WgJteX#u2wB9+M\"><field name=\"NUM\">1</field></shadow><block type=\"variables_get\" id=\"DsAP]N2`?Zn_+/{$zE%E\"><field name=\"VAR\">i</field></block></value></block></value><next><block type=\"turtle_rotate\" id=\"0@Iy3tATU88xQz_*{CEB\"><field name=\"DIR\">right</field><value name=\"TUR\"><shadow type=\"variables_get\" id=\"drMLiWdzeB5o5Ce:!mSM\"><field name=\"VAR\">tina</field></shadow></value><value name=\"VAR\"><shadow type=\"math_number\" id=\"kZe@e^4Gp+E*F|7(T13R\"><field name=\"NUM\">91</field></shadow></value></block></next></block></next></block></statement><next><block type=\"turtle_visible\" id=\"7p~wz!DTPufd-Vmeq}X7\"><field name=\"DIR\">hideturtle</field><value name=\"TUR\"><shadow type=\"variables_get\" id=\")K.t*HC{/X15icAU5O%l\"><field name=\"VAR\">tina</field></shadow></value></block></next></block></next></block></next></block></next></block></xml>

View File

@@ -0,0 +1 @@
<xml version=\"1.0\" board=\"mixpy\" xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"turtle_create\" id=\"VO^M5`IthKa%hb]u!M?v\" x=\"298\" y=\"79\"><field name=\"VAR\">tina</field><next><block type=\"turtle_size\" id=\"1K0o$35T{84d!qs9dXD6\"><value name=\"TUR\"><shadow type=\"variables_get\" id=\"*+,fms3T][PU|b8oN/`j\"><field name=\"VAR\">tina</field></shadow></value><value name=\"data\"><shadow type=\"math_number\" id=\"RDV-qGd3w9|u9:yFl%vs\"><field name=\"NUM\">5</field></shadow></value><next><block type=\"turtle_pencolor\" id=\"9_%!gKsITU*e#4n7,6C0\"><field name=\"FIELDNAME\">#ff0000</field><value name=\"TUR\"><shadow type=\"variables_get\" id=\"/54t=xEr}9U*nq__5SAw\"><field name=\"VAR\">tina</field></shadow></value><next><block type=\"turtle_fillcolor\" id=\"H7wG?[uqQnz:@bLU(eHw\"><field name=\"FIELDNAME\">#ffff00</field><value name=\"TUR\"><shadow type=\"variables_get\" id=\"qJ#7)={BM0)9G]ABRQ,j\"><field name=\"VAR\">tina</field></shadow></value><next><block type=\"turtle_fill\" id=\"t/0{W[Z0d$g:9E(Mi%/l\"><field name=\"DIR\">begin</field><value name=\"TUR\"><shadow type=\"variables_get\" id=\"`-srIh)VW$K07_Uk70m3\"><field name=\"VAR\">tina</field></shadow></value><next><block type=\"controls_forEach\" id=\"bz7BPbcS]*)2+08j:Lbv\"><value name=\"LIST\"><shadow type=\"list_many_input\"><field name=\"CONTENT\">0,1,2,3</field></shadow><block type=\"controls_range\" id=\"Wia/iGA]c=t-vIw5t/[w\"><value name=\"FROM\"><shadow type=\"math_number\" id=\"K1vlI3DR8AWX3}{hR+c(\"><field name=\"NUM\">0</field></shadow></value><value name=\"TO\"><shadow type=\"math_number\" id=\"EUc9,+whLY{PPbKkAx%W\"><field name=\"NUM\">5</field></shadow></value><value name=\"STEP\"><shadow type=\"math_number\" id=\"*|^GU(Q(|y3CqW73[Lx:\"><field name=\"NUM\">1</field></shadow></value></block></value><value name=\"VAR\"><shadow type=\"variables_get\" id=\".)JX30%Agr7!WCHYk|32\"><field name=\"VAR\">i</field></shadow></value><statement name=\"DO\"><block type=\"turtle_move\" id=\"s@BC9i]VRfZubEs-y3G?\"><field name=\"DIR\">forward</field><value name=\"TUR\"><shadow type=\"variables_get\" id=\"u[kwS7w}m(cxQb-JeZNP\"><field name=\"VAR\">tina</field></shadow></value><value name=\"VAR\"><shadow type=\"math_number\" id=\"!K)_rw|%I[_y`@)`b+Ny\"><field name=\"NUM\">100</field></shadow></value><next><block type=\"turtle_rotate\" id=\"Opth^t%/;KEAtt%vq-vg\"><field name=\"DIR\">right</field><value name=\"TUR\"><shadow type=\"variables_get\" id=\"w!-~No^!.vJ5UlJc6SNu\"><field name=\"VAR\">tina</field></shadow></value><value name=\"VAR\"><shadow type=\"math_number\" id=\"H;B=I556VmZHT%n!Wa:S\"><field name=\"NUM\">144</field></shadow></value></block></next></block></statement><next><block type=\"turtle_fill\" id=\"9|jVBpzEYbVZMv/)btSM\"><field name=\"DIR\">end</field><value name=\"TUR\"><shadow type=\"variables_get\" id=\"ebROw0M#.ce@mB$o6b(2\"><field name=\"VAR\">tina</field></shadow></value><next><block type=\"turtle_visible\" id=\"5;AB!2IO09-:?wySNqIr\"><field name=\"DIR\">hideturtle</field><value name=\"TUR\"><shadow type=\"variables_get\" id=\"Y{XMh{oN0#zkRUp$v+GN\"><field name=\"VAR\">tina</field></shadow></value></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></xml>

Some files were not shown because too many files have changed in this diff Show More