feat: sync all remaining python source board configurations
This commit is contained in:
3
mixly/boards/default_src/python_mixpy/.npmignore
Normal file
3
mixly/boards/default_src/python_mixpy/.npmignore
Normal file
@@ -0,0 +1,3 @@
|
||||
node_modules
|
||||
build
|
||||
origin
|
||||
370
mixly/boards/default_src/python_mixpy/blocks/ai.js
Normal file
370
mixly/boards/default_src/python_mixpy/blocks/ai.js
Normal 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);
|
||||
}
|
||||
};
|
||||
835
mixly/boards/default_src/python_mixpy/blocks/algorithm.js
Normal file
835
mixly/boards/default_src/python_mixpy/blocks/algorithm.js
Normal 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);
|
||||
}
|
||||
};
|
||||
121
mixly/boards/default_src/python_mixpy/blocks/communicate.js
Normal file
121
mixly/boards/default_src/python_mixpy/blocks/communicate.js
Normal 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];
|
||||
});
|
||||
}
|
||||
};
|
||||
206
mixly/boards/default_src/python_mixpy/blocks/cv.js
Normal file
206
mixly/boards/default_src/python_mixpy/blocks/cv.js
Normal 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);
|
||||
}
|
||||
};
|
||||
1570
mixly/boards/default_src/python_mixpy/blocks/data.js
Normal file
1570
mixly/boards/default_src/python_mixpy/blocks/data.js
Normal file
File diff suppressed because it is too large
Load Diff
355
mixly/boards/default_src/python_mixpy/blocks/datastructure.js
Normal file
355
mixly/boards/default_src/python_mixpy/blocks/datastructure.js
Normal 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);
|
||||
}
|
||||
}
|
||||
273
mixly/boards/default_src/python_mixpy/blocks/factory.js
Normal file
273
mixly/boards/default_src/python_mixpy/blocks/factory.js
Normal 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);
|
||||
}
|
||||
};
|
||||
104
mixly/boards/default_src/python_mixpy/blocks/hardware.js
Normal file
104
mixly/boards/default_src/python_mixpy/blocks/hardware.js
Normal 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);
|
||||
}
|
||||
};
|
||||
229
mixly/boards/default_src/python_mixpy/blocks/inout.js
Normal file
229
mixly/boards/default_src/python_mixpy/blocks/inout.js
Normal 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;
|
||||
}
|
||||
};
|
||||
670
mixly/boards/default_src/python_mixpy/blocks/iot.js
Normal file
670
mixly/boards/default_src/python_mixpy/blocks/iot.js
Normal 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;
|
||||
|
||||
40
mixly/boards/default_src/python_mixpy/blocks/pins.js
Normal file
40
mixly/boards/default_src/python_mixpy/blocks/pins.js
Normal 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);
|
||||
}
|
||||
};
|
||||
65
mixly/boards/default_src/python_mixpy/blocks/serial.js
Normal file
65
mixly/boards/default_src/python_mixpy/blocks/serial.js
Normal 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);
|
||||
}
|
||||
};
|
||||
702
mixly/boards/default_src/python_mixpy/blocks/sklearn.js
Normal file
702
mixly/boards/default_src/python_mixpy/blocks/sklearn.js
Normal 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("");
|
||||
}
|
||||
};
|
||||
126
mixly/boards/default_src/python_mixpy/blocks/system.js
Normal file
126
mixly/boards/default_src/python_mixpy/blocks/system.js
Normal 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);
|
||||
}
|
||||
};
|
||||
945
mixly/boards/default_src/python_mixpy/blocks/turtle.js
Normal file
945
mixly/boards/default_src/python_mixpy/blocks/turtle.js
Normal 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);
|
||||
}
|
||||
};
|
||||
412
mixly/boards/default_src/python_mixpy/converters/ai.js
Normal file
412
mixly/boards/default_src/python_mixpy/converters/ai.js
Normal 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"
|
||||
})];
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
244
mixly/boards/default_src/python_mixpy/converters/cv.js
Normal file
244
mixly/boards/default_src/python_mixpy/converters/cv.js
Normal 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"
|
||||
});}
|
||||
};
|
||||
1512
mixly/boards/default_src/python_mixpy/converters/data.js
Normal file
1512
mixly/boards/default_src/python_mixpy/converters/data.js
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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&¶m.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;
|
||||
93
mixly/boards/default_src/python_mixpy/converters/hardware.js
Normal file
93
mixly/boards/default_src/python_mixpy/converters/hardware.js
Normal 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"
|
||||
});
|
||||
}
|
||||
|
||||
98
mixly/boards/default_src/python_mixpy/converters/inout.js
Normal file
98
mixly/boards/default_src/python_mixpy/converters/inout.js
Normal 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");
|
||||
}
|
||||
}
|
||||
162
mixly/boards/default_src/python_mixpy/converters/iot.js
Normal file
162
mixly/boards/default_src/python_mixpy/converters/iot.js
Normal 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"
|
||||
});
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
75
mixly/boards/default_src/python_mixpy/converters/serial.js
Normal file
75
mixly/boards/default_src/python_mixpy/converters/serial.js
Normal 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"
|
||||
})];
|
||||
};
|
||||
598
mixly/boards/default_src/python_mixpy/converters/sklearn.js
Normal file
598
mixly/boards/default_src/python_mixpy/converters/sklearn.js
Normal 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
|
||||
});
|
||||
}
|
||||
45
mixly/boards/default_src/python_mixpy/converters/system.js
Normal file
45
mixly/boards/default_src/python_mixpy/converters/system.js
Normal 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"
|
||||
})];
|
||||
}
|
||||
1127
mixly/boards/default_src/python_mixpy/converters/turtle.js
Normal file
1127
mixly/boards/default_src/python_mixpy/converters/turtle.js
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||
}
|
||||
64
mixly/boards/default_src/python_mixpy/export.js
Normal file
64
mixly/boards/default_src/python_mixpy/export.js
Normal 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
|
||||
};
|
||||
163
mixly/boards/default_src/python_mixpy/generators/ai.js
Normal file
163
mixly/boards/default_src/python_mixpy/generators/ai.js
Normal 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];
|
||||
}
|
||||
936
mixly/boards/default_src/python_mixpy/generators/algorithm.js
Normal file
936
mixly/boards/default_src/python_mixpy/generators/algorithm.js
Normal 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];
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
100
mixly/boards/default_src/python_mixpy/generators/cv.js
Normal file
100
mixly/boards/default_src/python_mixpy/generators/cv.js
Normal 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];
|
||||
}
|
||||
689
mixly/boards/default_src/python_mixpy/generators/data.js
Normal file
689
mixly/boards/default_src/python_mixpy/generators/data.js
Normal 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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
86
mixly/boards/default_src/python_mixpy/generators/factory.js
Normal file
86
mixly/boards/default_src/python_mixpy/generators/factory.js
Normal 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];
|
||||
}
|
||||
53
mixly/boards/default_src/python_mixpy/generators/hardware.js
Normal file
53
mixly/boards/default_src/python_mixpy/generators/hardware.js
Normal 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;
|
||||
}
|
||||
55
mixly/boards/default_src/python_mixpy/generators/inout.js
Normal file
55
mixly/boards/default_src/python_mixpy/generators/inout.js
Normal 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;
|
||||
}
|
||||
129
mixly/boards/default_src/python_mixpy/generators/iot.js
Normal file
129
mixly/boards/default_src/python_mixpy/generators/iot.js
Normal 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];
|
||||
}
|
||||
9
mixly/boards/default_src/python_mixpy/generators/pins.js
Normal file
9
mixly/boards/default_src/python_mixpy/generators/pins.js
Normal 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;
|
||||
37
mixly/boards/default_src/python_mixpy/generators/serial.js
Normal file
37
mixly/boards/default_src/python_mixpy/generators/serial.js
Normal 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;
|
||||
}
|
||||
264
mixly/boards/default_src/python_mixpy/generators/sklearn.js
Normal file
264
mixly/boards/default_src/python_mixpy/generators/sklearn.js
Normal 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;
|
||||
}
|
||||
22
mixly/boards/default_src/python_mixpy/generators/system.js
Normal file
22
mixly/boards/default_src/python_mixpy/generators/system.js
Normal 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];
|
||||
}
|
||||
}
|
||||
422
mixly/boards/default_src/python_mixpy/generators/turtle.js
Normal file
422
mixly/boards/default_src/python_mixpy/generators/turtle.js
Normal 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;
|
||||
}
|
||||
140
mixly/boards/default_src/python_mixpy/index.js
Normal file
140
mixly/boards/default_src/python_mixpy/index.js
Normal 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
|
||||
);
|
||||
15
mixly/boards/default_src/python_mixpy/jsconfig.json
Normal file
15
mixly/boards/default_src/python_mixpy/jsconfig.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"experimentalDecorators": true,
|
||||
"baseUrl": "./",
|
||||
"paths": {
|
||||
"@mixly/python": [
|
||||
"../python"
|
||||
]
|
||||
}
|
||||
},
|
||||
"exclude": [
|
||||
"node_modules",
|
||||
"dist"
|
||||
]
|
||||
}
|
||||
22
mixly/boards/default_src/python_mixpy/origin/config.json
Normal file
22
mixly/boards/default_src/python_mixpy/origin/config.json
Normal 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
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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
182
mixly/boards/default_src/python_mixpy/origin/examples/map.json
Normal file
182
mixly/boards/default_src/python_mixpy/origin/examples/map.json
Normal 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
@@ -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")
|
||||
@@ -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])
|
||||
@@ -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])
|
||||
@@ -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"])
|
||||
@@ -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"])
|
||||
@@ -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"])
|
||||
@@ -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"])
|
||||
@@ -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={}))
|
||||
@@ -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)
|
||||
@@ -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={}))
|
||||
@@ -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={}))
|
||||
@@ -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={}))
|
||||
@@ -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)))
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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
@@ -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
@@ -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>
|
||||
File diff suppressed because one or more lines are too long
@@ -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>
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -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>
|
||||
@@ -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>
|
||||
File diff suppressed because one or more lines are too long
@@ -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>
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user