Blockly-2

本文解析了SVG在工程中的块渲染原理,介绍了path命令在创建有限样式块中的应用,如M、L、H、V、C、S、Q和A等,并展示了如何通过实例理解不同命令组合。重点讲解了not块的SVG路径构成和核心代码段。
摘要由CSDN通过智能技术生成

块的渲染
core\block_render_svg.js

工程中的块都是一开始规定好样式的,且是有限个数的,没有提供可以自定义形状的功能

首先需要掌握svg绘制的命令符号使用 主要是path路径

命令含义
M绘制点移动到 moveTo (一段路径的绘制必须是先moveTo才可以lineTo) M x y
L点移动到 lineTo L x y
H水平移动点 偏移 绘制平行线
V垂直移动点 偏移 绘制垂直线
C曲线点移动 三次贝塞尔 c 控制点1 控制点2 终点3 曲线的起始点由前面绘制命令决定
S三次贝塞尔 如果S命令跟在一个C命令或者另一个S命令的后面,它的第一个控制点,就会被假设成前一个控制点的对称点。如果S命令单独使用,前面没有C命令或者另一个S命令,那么它的两个控制点就会被假设为同一个点。
Q贝塞尔曲线 二次
T贝塞尔曲线 二次 T命令前面必须是一个Q命令,或者是另一个T命令,才能达到这种效果。如果T单独使用,那么控制点就会被认为和终点是同一个点,所以画出来的将是一条直线。
A绘制圆弧 多种情况
ZclosePath 结束绘制

M 100 350 L 150 -300 = (100,350)-- (150,-300)

M 100 350 l 150 -300 = (100,350)-- (250,50) 小写表示在前一个点上进行偏移

源码

Blockly.BlockSvg.START_HAT_HEIGHT = 15;
/**
 * 块 上方的曲线
 * Path of the top hat's curve.
 * @const
 */
Blockly.BlockSvg.START_HAT_PATH = 'c 30,-' +
    Blockly.BlockSvg.START_HAT_HEIGHT + ' 70,-' +
    Blockly.BlockSvg.START_HAT_HEIGHT + ' 100,0';

加上 m 8,0 的时候绘制得到的形状
在这里插入图片描述

Blockly.BlockSvg.TAB_WIDTH = 8;
/**
 * 从上到下绘制水平拼图选项卡的SVG路径。
 * SVG path for drawing a horizontal puzzle tab from top to bottom.
 * @const
 */
Blockly.BlockSvg.TAB_PATH_DOWN = 'v 5 c 0,10 -' + Blockly.BlockSvg.TAB_WIDTH +
    ',-8 -' + Blockly.BlockSvg.TAB_WIDTH + ',7.5 s ' +
    Blockly.BlockSvg.TAB_WIDTH + ',-2.5 ' + Blockly.BlockSvg.TAB_WIDTH + ',7.5';

在这里插入图片描述

比如not块

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- svg渲染块时 分为三个path组成 分别使dark模式的  默认模式  light模式 -->
    <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
        <!-- data-id 生成的源码在util.js  genUid中
        由 20个随机字符组成 -->
        <g xmlns="http://www.w3.org/2000/svg" data-id="Q*?`b($N=1x.O/NlMwfi" class="blocklyDraggable" transform="translate(87.92968749999997,112.50781249999989)">
            <!-- (8,0)(58) -->
            <path class="blocklyPathDark" transform="translate(1,1)" fill="#496684" d=" m 8,0  h 49.989990234375  v 5  H 57.989990234375  V 5  H 57.989990234375  c 0,10  -8,-8  -8,7.5  s 8,-2.5  8,7.5  v 0  H 57.989990234375  V 20  V 24  h -49.989990234375  H 8  V 20  c 0,-10  -8,8  -8,-7.5  s 8,2.5  8,-7.5 z "/>
            <path class="blocklyPath" stroke="none" fill="#5b80a5" d=" m 8,0  h 49.989990234375  v 5  H 57.989990234375  V 5  H 57.989990234375  c 0,10  -8,-8  -8,7.5  s 8,-2.5  8,7.5  v 0  H 57.989990234375  V 20  V 24  h -49.989990234375  H 8  V 20  c 0,-10  -8,8  -8,-7.5  s 8,2.5  8,-7.5 z "/>
            <path class="blocklyPathLight" stroke="#8ca6c0" d=" m 8,0  m 0.5,0.5  H 57.489990234375  H 57.489990234375  M 57.989990234375,5  m -5,14.3  l 3.68,-2.1  M 8.5,23.5  M 8.5,23.5  V 20  v -1.5  m -7.36,-0.5  q -1.52,-5.5  0,-11  m 7.36,1  V 0.5  "/>
            <g transform="translate(18,5)"><text class="blocklyText" y="13.09" dy="0" x="0">not</text></g>
        </g>
     </svg> 
</body>
</html>

在这里插入图片描述

实际上每一个块都是由多个已经定义好的绘制命令合并而成的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用Blockly Vue之前,需要先进行几个步骤来正确导入和配置该工具。 首先,我们需要先安装所需的依赖项。在以Vue为基础的项目中,可以通过运行以下命令来安装相关依赖: ``` npm install vue-blockly @secrez/blockly-html ``` 第一个依赖项`vue-blockly`是Blockly Vue的核心库,而第二个依赖项`@secrez/blockly-html`是Blockly所需的HTML语言包。 安装完依赖项后,我们需要在Vue项目的入口文件(通常是`main.js`文件)中导入和配置Blockly。 首先,我们需要导入`vue-blockly`库: ```js import VueBlockly from 'vue-blockly' ``` 接下来,我们还需要导入 Blockly 所需的所有语言包: ```js import BlocklyHTML from '@secrez/blockly-html' ``` 然后,我们将这些语言包添加到Vue中: ```js Vue.use(VueBlockly, { languages: { 'zh-Hans': BlocklyHTML // 将新的语言包添加到语言列表中 } }) ``` 现在,我们配置完成了。我们可以在Vue组件中使用Blockly了。 假设在Vue组件中的template部分,我们添加了一个div元素来展示Blockly的工作区: ```html <template> <div id="blocklyDiv"></div> </template> ``` 在Vue组件的script部分,我们可以使用以下方法来初始化Blockly: ```js import Blockly from 'blockly/core' export default { mounted() { Blockly.inject('blocklyDiv', { /* 配置项 */ }) } } ``` 在`Blockly.inject`方法中,我们可以根据需要添加一些配置项来自定义Blockly的行为和外观。例如,我们可以指定工作区的大小、工具箱是否可见等。 到此为止,我们已经成功地导入和配置了Blockly Vue。现在可以根据需要来使用Blockly来设计和构建可视化编程环境了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值