跳转至

绘图元素

用于自动分级绘图的画布。

请注意,此元素不支持手绘直线/曲线。对于更通用的手动分级工程图,请考虑使用 pl-excalidraw。对于可自动分级的数学曲线草图,请考虑使用 pl-sketch

pl-drawing 画布可以在两种模式下使用。在仅显示画布(gradable="false",默认值)中,它呈现问题中创作的绘图对象。在可分级画布 (gradable="true") 中,学生将对象放置在画布上,ZJUI-Learn 根据 pl-drawing-answer 中的对象对它们进行评分; pl-drawing-initial 中的对象会显示但不会评分。

仅显示画布的元素

pl-drawing元件

pl-drawing 元素显示画布,可用于显示初始绘图对象或期望进行分级的绘图对象。

画布的坐标系位于左上角/左上角,如下图所示。

pl-origin-canvas 元素的屏幕截图

样品元素

<pl-drawing answers-name="fbd"> </pl-drawing>

pl-drawing 元素的屏幕截图

定制

属性 类型 默认 描述
gradable 布尔 gradable = true 期望将对象放置在画布中进行分级,而 gradable = false 画布将用于仅显示图形。
answers-name 字符串 用于存储学生输入数据的变量名称。当 gradable = true 时需要此变量。输入数据将存储在data[“submitted_answers”][answers-name]中。
weight 整数 1 计算元素的加权平均分数时使用的权重。
width 浮动 580 580画布的水平宽度(以像素为单位)。
height 浮动 320 320画布的垂直高度(以像素为单位)。
grid-size 整数 20 画布背景的方形网格的大小(以像素为单位)。如果是grid-size = 0,则不绘制网格并且画布背景是透明的。
snap-to-grid 布尔 如果为 true,则放置在画布中的对象会捕捉到最近的网格点。否则,它们可以放置在网格之外。
tol 浮动 0.5*grid-size 检查对象位置的容差(以像素为单位)。误差计算为预期位置与提交位置之间的绝对差。
angle-tol 浮动 10 10检查角度的公差(以度为单位)。误差计算为预期角度与提交角度之间的绝对差。
show-tolerance-hint 布尔 真实 在画布下显示公差提示。当 gradable = true 时,默认为 true
tolerance-hint 字符串 tolangle-tol 计算得出 提示解释对对象进行分级时使用的容差。默认情况下,它是根据位置公差 (tol) 和角度公差 (angle-tol) 生成的,例如“位置的预期公差为 1/2 方格,角度的预期公差为 10 度。”
disregard-extra-elements 布尔 如果为 true,则当额外的元素与相同的引用对象匹配时,它们将被忽略。否则,多个匹配元素将减少奖励积分。
allow-blank 布尔 是否允许提交没有用户放置的元素。默认情况下,没有用户放置元素的提交将不会被评分(无效提交)。
hide-answer-panel 布尔 真实 如果为 true,则正确答案不会显示在答案面板中。
show-score 布尔 是否在此元素画布上方的标题中显示分数徽章。默认为 false 以实现向后兼容性。
aria-label 字符串 描述该图的文本。请参阅辅助功能部分
aria-description 字符串 详细描述该图的文本。请参阅辅助功能部分

示例实现

pl-drawing-initial元件

pl-drawing-initial 将对将在 pl-drawing 定义的画布中显示的对象进行分组。

例如,pl-drawing-initial 可用于创建作为问题正文的一部分显示的图形:

<pl-drawing grid-size="0">
  <pl-drawing-initial>
    <!-- create the image here -->
  </pl-drawing-initial>
</pl-drawing>

pl-drawing-initial 元素的屏幕截图

要在可分级画布中使用,请参阅 可分级画布的元素 下的 pl-drawing-initial 部分。

可分级画布的元素

可分级画布示例

可分级画布需要元素 pl-drawing-answer,但还有其他元素也可能有所帮助。下面的示例说明了可分级画布的典型部分。

样品元素

<pl-drawing grid-size="20" gradable="true" answers-name="box" width="320">
  <pl-drawing-answer draw-error-box="true">
    <pl-vector x1="160" y1="160" angle="-45"></pl-vector>
  </pl-drawing-answer>

  <pl-drawing-initial>
    <pl-coordinates
      x1="160"
      y1="160"
      width="100"
      angle="0"
      label="A"
      offsetx="-20"
    ></pl-coordinates>
  </pl-drawing-initial>

  <pl-controls>
    <pl-controls-group label="Graded objects:">
      <pl-drawing-button type="pl-vector"></pl-drawing-button>
    </pl-controls-group>
    <pl-controls-group label="Delete button:">
      <pl-drawing-button type="delete"></pl-drawing-button>
    </pl-controls-group>
  </pl-controls>
</pl-drawing>

pl-drawing-group 元素的屏幕截图

pl-drawing-answer元件

该元素将包含所有将被评分的元素(检查正确性)。

定制

属性 类型 默认 描述
draw-error-box 布尔 true 时,放置在 pl-drawing-answer 内的对象将在答案面板中显示其各自的错误边界框。

pl-drawing-answer 上设置此属性可在答案面板中显示所有评分对象的错误框。 pl-drawing-answer 内支持的对象上的对象级 draw-error-box 设置会覆盖该对象的父设置。

在上面的示例中,pl-vector 是唯一已评分的对象。相应的答案面板给出为:

pl-drawing-answer 元素的屏幕截图

pl-drawing-initial元件

此元素包含应出现在可分级画布中但不应分级的初始对象。 pl-drawing-initial 内的对象未分级,而 pl-drawing-answer 内的对象已分级。当在正确面板中显示正确答案时,pl-drawing-initialpl-drawing-answer 中的对象会合并。

<pl-drawing gradable="true" answers-name="add-objects">
  <pl-drawing-initial>
    <!-- objects that define the initial state are placed here -->
  </pl-drawing-initial>
  <pl-drawing-answer>
    <!-- objects that define the correct answer are placed here -->
  </pl-drawing-answer>
</pl-drawing>

定制

属性 类型 默认 描述
draw-error-box 布尔 true 时,放置在 pl-drawing-initial 内的对象将在答案面板中显示其各自的错误边界框。

问题的最终版本不应具有属性 draw-error-box。但是,此属性在创建问题的过程中可能会有所帮助。作者可以选择启动可分级画布,包括 pl-drawing-initial 中的所有对象 draw-error-box=true,查看分级对象如何放置在画布中,以及默认容差对于特定问题是否合理,或者是否需要调整。问题完成后,可以将预期评分的对象从 pl-drawing-initial 中删除并添加到 pl-drawing-answer 中。作者可以决定当正确答案显示时学生是否应该看到错误框。默认情况下,draw-error-box="false"

pl-controls元件

元素 pl-controls 将添加允许学生在画布中放置对象的按钮。元素 pl-controls-group 可用于对具有相似属性的按钮进行分组,例如分级和非分级对象。

<pl-controls>
  <pl-controls-group label="Graded objects:">
    <pl-drawing-button type="pl-vector"></pl-drawing-button>
  </pl-controls-group>
  <pl-controls-group label="Delete button:">
    <pl-drawing-button type="delete"></pl-drawing-button>
  </pl-controls-group>
</pl-controls>

pl-controls 元素仅需要一个属性 type,它与上面定义的元素名称相对应。当用户单击控制按钮时,将生成具有所有默认值的元素。要覆盖任何默认值,可以在要创建的元素上设置的任何属性(在 type 中指定)都可以作为可选属性添加到 pl-controls 中。 (参见下面的 demoDrawingCustomizedButtons 示例)

示例实现

示例 demo/drawing/gradeVector 说明了所有已实施分级例程的 pl-drawing-button

示例 [演示/绘图/按钮] 说明了所有可以创建可放置对象的 pl-drawing-button

示例 demo/drawing/customizedButtons 说明了如何通过按钮生成自定义对象。

所有 pl-drawing-button 元素的屏幕截图

pl-drawing-buttons元件

插入一个点

<pl-drawing-button type="pl-point"></pl-drawing-button>

此按钮向画布添加一个点。评分算法将检查提交的分数是否在错误框中。默认情况下,pl-point 的错误框是一个以正确点为中心、边长为 tol = 0.5*grid-size 的正方形。容差 tolpl-drawing 的一个属性,用于确保所有元素使用相同的容差。

pl-drawing-button 设置为 pl-point 的屏幕截图

插入向量

<pl-drawing-button type="pl-vector"></pl-drawing-button>

此按钮将矢量添加到画布。当锚点(矢量尾部)的位置位于误差边界框内并且角度的绝对误差小于 angle-tol 时,矢量被标记为正确。

默认情况下,pl-vector 的错误框是与矢量方向对齐的矩形。矩形的宽度为tol,高度为hb + hf,如下图所示。 hb = offset-backward + tolhf = offset-forward + tol。属性 offset-backward 默认设置为向量的长度。默认情况下,属性 offset-forward 设置为零。公差 tolangle-tolpl-drawing 的属性,用于确保所有元素使用相同的公差。

显示 pl 向量元素的错误框的屏幕截图

如果矢量的方向不重要,因此矢量 p-p 都被认为是正确的,则属性 disregard-sense 应设置为 true

如果期望向量作为正确答案,但作者不想为其分配等级,则可以将属性 optional-grading 设置为 true。在这种情况下,评分算法不会将分数分配给向量,但也不会通过将其视为额外对象来惩罚学生。

插入圆弧向量

<pl-drawing-button type="pl-arc-vector-CCW"></pl-drawing-button>
<pl-drawing-button type="pl-arc-vector-CW"></pl-drawing-button>

此按钮将圆弧矢量添加到画布。当锚点的位置(弧向量的中心)位于错误边界框内并且方向正确时,弧向量被标记为正确。

默认情况下,pl-arc-vector 的错误框是一个以锚点为中心、边长为 tol = 0.5*grid-size 的正方形。容差 tolpl-drawing 的一个属性,用于确保所有元素使用相同的容差。

如果圆弧矢量的方向不重要(顺时针和逆时针方向均可接受),则属性 disregard-sense 应设置为 true

插入分布式负载

<pl-drawing-button type="pl-distributed-load" w1="20" anchor-is-tail="true"></pl-drawing-button>
<pl-drawing-button type="pl-distributed-load" w1="20" anchor-is-tail="false"></pl-drawing-button>
<pl-drawing-button type="pl-distributed-load"></pl-drawing-button>

此按钮向画布添加分布式负载。当锚点(基线中心)的位置位于误差边界框内、角度的绝对误差小于 angle-tol、范围 (interval) 的绝对误差小于 tol 且预期分布匹配(如果是均匀分布,则为 w1 = w2,对于三角形载荷,提交的答案中的 w1>w2w2>w1 与正确答案匹配)。

pl-distributed-load 的误差框的定义方式与 pl-vector 相同,但将锚点视为基线的中心。如果分布式负载的方向不重要,则属性 disregard-sense 应设置为 true

对于许多问题,需要通过设置属性 offset-forwardoffset-backward 来微调错误边界框。合适的值取决于问题的上下文,例如梁在分布载荷方向上的尺寸。

插入“帮助”行

<pl-drawing-button type="help-line"></pl-drawing-button>

此按钮将在画布上添加一条未分级的线,但学生可以使用它来方便放置其他对象。

删除先前放置在画布中的任何对象

<pl-drawing-button type="delete"></pl-drawing-button>

此按钮删除先前放置在画布上的对象。

组织和格式元素

pl-coordinates元件

pl-coordinates 元素添加 2D 坐标系。

样品元素

<pl-drawing width="200" height="200">
  <pl-drawing-initial>
    <pl-coordinates x1="60" y1="80" label="0" angle="30"></pl-coordinates>
  </pl-drawing-initial>
</pl-drawing>

pl-坐标元素的屏幕截图

定制

属性 类型 默认 描述
x1 浮动 40 40 x 坐标系原点相对于画布原点(上/左上角)的位置,即距画布左边框的水平距离。
y1 浮动 40 40 y 坐标系原点相对于画布原点(上/左上角)的位置,即距画布上边框的垂直距离。
width 浮动 30 箭头向量的长度。
angle 浮动 0 坐标系的角度。顺时针方向时角度为正。
label 字符串 - 用于标记坐标系中心的文本
offsetx 浮动 -16 -16 label 距坐标系原点的水平距离。
offsety 浮动 -10 label 距坐标系原点的垂直距离。
label-x 字符串 x 用于标记水平箭头向量的文本 (x-axis)
offsetx-label-x 浮动 0 label-x 距水平箭头矢量 (x-axis) 尖端的水平距离。
offsety-label-x 浮动 0 label-x 距水平箭头矢量 (x-axis) 尖端的垂直距离。
label-y 字符串 y 用于标记垂直箭头向量的文本 (y-axis)
offsetx-label-y 浮动 -20 -20 label-y 距垂直箭头矢量 (y-axis) 尖端的水平距离。
offsety-label-y 浮动 -10 label-y 距垂直箭头矢量 (y-axis) 尖端的垂直距离。
color 字符串 黑色 设置坐标系的颜色(PL颜色HTML颜色
stroke-width 浮动 2 设置描边的宽度。
arrow-head-width 浮动 1 箭头宽度的比例因子。
arrow-head-length 浮动 1 箭头长度的比例因子。

示例实现

pl-text元件

样品元素

<pl-drawing width="200" height="200" grid-size="0">
  <pl-drawing-initial>
    <pl-text x1="20" y1="40" label="Moment of inertia:" latex="false"></pl-text>
    <pl-text x1="20" y1="80" label="\\int_A y^2 dA"></pl-text>
  </pl-drawing-initial>
</pl-drawing>

pl-text 元素的屏幕截图

定制

属性 类型 默认 描述
label 字符串 “文字” 要添加的文本。
latex 布尔 真实 使用乳胶在 label 中添加文本。否则,使用 Times New Romans。
font-size 浮动 16 16字体大小。
x1 浮动 40 40 x 文本左上角的位置,即距画布左边框的水平距离。
y1 浮动 40 40 y 文本左上角的位置,即距画布上边框的垂直距离
offsetx 浮动 0 x1 沿 x 方向偏移
offsety 浮动 0 y1

示例实现

pl-dimensions元件

样品元素

<pl-drawing width="200" height="200">
  <pl-drawing-initial>
    <pl-rod x1="60" y1="100" x2="120" y2="40" height="60"></pl-rod>
    <pl-dimensions x1="60" y1="100" x2="120" y2="40"></pl-dimensions>
    <pl-dimensions
      x1="60"
      y1="100"
      x2="120"
      y2="40"
      dim-offset="-40"
      stroke-color="brown"
      start-support-line="true"
      end-support-line="true"
    ></pl-dimensions>
    <pl-dimensions
      x1="60"
      y1="100"
      x2="120"
      y2="40"
      dim-offset="60"
      dim-offset-angle="0"
      stroke-color="blue3"
      start-support-line="true"
      end-support-line="true"
    ></pl-dimensions>
    <pl-dimensions
      x1="60"
      y1="100"
      x2="120"
      y2="40"
      dim-offset="100"
      dim-offset-angle="-90"
      stroke-color="green3"
    ></pl-dimensions>
    <pl-dimensions x1="60" y1="100" width="60" stroke-color="pink3" label="a"></pl-dimensions>
  </pl-drawing-initial>
</pl-drawing>

pl-dimensions 元素的屏幕截图

定制

属性 类型 默认 描述
x1 浮动 40 40 x 线条起点的位置,即距画布左边框的水平距离。
y1 浮动 40 40 y 线条起点的位置,即距画布上边框的垂直距离。
width 浮动 30 线的宽度。
angle 浮动 0 绕线起点旋转的角度。角度是从水平轴开始测量的,顺时针方向为正。
x2 浮动 - x 线条终点的位置,即距画布左边框的水平距离。默认情况下,(x2,y2)anglewidth 确定。如果提供了 x2y2,则替换 anglewidth
y2 浮动 - y 线条终点的位置,即距画布上边框的垂直距离。默认情况下,(x2,y2)anglewidth 确定。如果提供了 x2y2,则替换 anglewidth
dim-offset 浮动 0 默认情况下,尺寸放置在点 (x1,y1)(x2,y2) 之间。当 dim-offset 不为零时,尺寸将平行于 (x1,y1)(x2,y2) 定义的方向平移,偏移距离为 dim-offset
dim-offset-angle 浮动 - 定义 dim-offset-angle 时,尺寸具有由 dim-offset-angle 围绕点 (x1,y1) 定义的方向,而 dim-offset 是距 (x1,y1) 的距离。
start-support-line 布尔 true 时,它绘制一条连接参考点 (x1,y1) 和尺寸线起点的虚线(当 dim-offset 不为零时,这是不同的)。
end-support-line 布尔 true 时,它绘制一条连接参考点 (x2,y2) 和尺寸线终点的虚线(当 dim-offset 不为零时,这是不同的)。
label 字符串 - 用于标记尺寸的文本。
offsetx 浮动 0 label 距默认标签位置的水平距离,垂直于尺寸线中心 10 像素。
offsety 浮动 0 label 距默认标签位置的垂直距离,即垂直于尺寸线中心的 10 像素。
stroke-color 字符串 黑色 设置线条的颜色( PL 颜色HTML 颜色 )。
stroke-width 浮动 1 设置描边的宽度。
draw-start-arrow 布尔 真实 在线的起点处画一个箭头。
draw-end-arrow 布尔 真实 在线的终点处画一个箭头。
arrow-head-width 浮动 1.5 1.5箭头宽度的比例因子。
arrow-head-length 浮动 1.5 1.5箭头长度的比例因子。

示例实现

pl-arc-dimensions元件

<pl-drawing width="200" height="200">
  <pl-drawing-initial>
    <pl-fixed-pin x1="80" y1="100" angle="50" color="turquoise1"></pl-fixed-pin>
    <pl-coordinates x1="80" y1="100" width="80"></pl-coordinates>
    <pl-arc-dimensions
      x1="80"
      y1="100"
      end-angle="50"
      label="\\theta"
      offsetx="5"
      offsety="-5"
      end-support-line="true"
    ></pl-arc-dimensions>
  </pl-drawing-initial>
</pl-drawing>

pl-arc-dimensions 元素的屏幕截图

定制

属性 类型 默认 描述
x1 浮动 40 40 x 圆弧中心的位置,即距画布左边框的水平距离。
y1 浮动 40 40 y 圆弧中心的位置,即距画布上边框的垂直距离。
radius 浮动 20 圆弧半径。
start-angle 浮动 0 圆弧的起始角度。角度是从水平轴开始测量的,顺时针方向为正。
end-angle 浮动 60 圆弧的结束角。角度是从水平轴开始测量的,顺时针方向为正。从 start-angleend-angle 形成顺时针方向的圆弧。
start-support-line 布尔 true 时,它从参考点 (x1,y1) 绘制一条虚线,宽度为 1.5*radius,方向由 start-angle 给出,
end-support-line 布尔 true 时,它从参考点 (x2,y2) 绘制一条虚线,宽度为 1.5*radius,方向由 end-angle 给出,
draw-center 布尔 画出圆弧的中心。
draw-start-arrow 布尔 start-angle 处绘制箭头。
draw-end-arrow 布尔 真实 end-angle 处绘制箭头。
label 字符串 - 用于标记弧角的文本。
offsetx 浮动 0 label 距圆弧中点的水平距离。
offsety 浮动 0 label 距圆弧中点的垂直距离。
stroke-color 字符串 黑色 设置圆弧的描边颜色( PL 颜色HTML 颜色 )。
stroke-width 浮动 1 设置描边的宽度。
arrow-head-width 浮动 1 箭头宽度的比例因子。
arrow-head-length 浮动 1 箭头长度的比例因子。

示例实现

pl-drawing-group元件

元素 pl-drawing-group 将多个元素组合为一个组,以允许元素组变得可见或不可见。

<pl-drawing>
  <pl-drawing-initial>

      <pl-drawing-group visible="true">
          <!-- objects here will be displayed -->
      </pl-drawing-group>

      <pl-drawing-group visible="false">
          <!-- objects here will not be displayed -->
      </pl-drawing-group>
</pl-drawing>

示例实现

几何形状

pl-line元件

样品元素

<pl-drawing width="200" height="200">
  <pl-drawing-initial>
    <pl-line x1="60" y1="80" x2="140" y2="120"></pl-line>
  </pl-drawing-initial>
</pl-drawing>

pl-line 元素的屏幕截图

定制

属性 类型 默认 描述
x1 浮动 40 40 x 线条起点的位置,即距画布左边框的水平距离。
y1 浮动 40 40 y 线条起点的位置,即距画布上边框的垂直距离。
width 浮动 60 线的宽度。
angle 浮动 0 绕线起点旋转的角度。角度是从水平轴开始测量的,顺时针方向为正。
x2 浮动 - x 线条终点的位置,即距画布左边框的水平距离。默认情况下,(x2,y2)anglewidth 确定。如果提供了 x2y2,则替换 anglewidth
y2 浮动 - y 线条终点的位置,即距画布上边框的垂直距离。默认情况下,(x2,y2)anglewidth 确定。如果提供了 x2y2,则替换 anglewidth
opacity 浮动 1 设置线条的不透明度
stroke-color 字符串 黑色 设置线条的颜色(PL颜色HTML颜色
stroke-width 浮动 2 设置描边的宽度。
dashed-size 浮动 _ 创建具有等间距 dashed-sizepx 填充的虚线。

示例实现

pl-controlled-line元件

样品元素

<pl-drawing width="200" height="200">
  <pl-drawing-initial>
    <pl-controlled-line
      x1="40"
      y1="40"
      x2="120"
      y2="80"
      draw-error-box="true"
      offset-tol-x="20"
    ></pl-controlled-line>
    <pl-controlled-line
      x1="60"
      y1="140"
      x2="160"
      y2="140"
      color="blue"
      stroke-width="6"
      handle-radius="8"
    ></pl-controlled-line>
  </pl-drawing-initial>
</pl-drawing>

pl-control-line 元素的屏幕截图

定制

属性 类型 默认 描述
x1 浮动 20 x 端点之一相对于画布原点(上/左上角)的位置,即距画布左边框的水平距离。
y1 浮动 40 40 y 端点之一相对于画布原点(上/左上角)的位置,即距画布上边框的垂直距离。
x2 浮动 40 40 x 端点之一相对于画布原点(上/左上角)的位置,即距画布左边框的水平距离。
y2 浮动 40 40 y 端点之一相对于画布原点(上/左上角)的位置,即距画布上边框的垂直距离。
color 字符串 红色 设置坐标系的颜色(PL颜色HTML颜色
stroke-width 浮动 4 设置描边的宽度。
handle-radius 浮动 6 设置定义终点和控制点的圆形控柄的半径。
draw-error-box 布尔 - 绘制错误边界框,其中端点和控制点的位置被认为是正确的。
offset-tol-x 浮动 0 水平方向的公差偏移。误差边界框的水平尺寸等于 2*(tol + offset-tol-x),其中 tol 被定义为 pl-drawing 的属性(或默认为 1/2 网格)。终点位于边界框的中心。
offset-tol-y 浮动 0 垂直方向的公差偏移。错误边界框的垂直尺寸等于 2*(tol + offset-tol-y),其中 tol 被定义为 pl-drawing 的属性(或默认为 1/2 网格)。终点位于边界框的中心。

示例实现

pl-arc元件

样品元素

<pl-drawing width="200" height="200">
  <pl-drawing-initial>
    <pl-line x1="0" y1="80" x2="60" y2="80" stroke-color="red"></pl-line>
    <pl-arc
      x1="60"
      y1="120"
      radius="40"
      start-angle="270"
      end-angle="0"
      stroke-color="green"
    ></pl-arc>
    <pl-line x1="100" y1="120" x2="100" y2="200" stroke-color="blue"></pl-line>
  </pl-drawing-initial>
</pl-drawing>

pl-arc 元素的屏幕截图

定制

属性 类型 默认 描述
x1 浮动 40 40 x 圆弧中心位置,即距圆弧左边框的水平距离。
y1 浮动 40 40 y 圆心的位置,即距画布上边框的垂直距离。
radius 浮动 20 圆的半径。
start-angle 浮动 0 圆弧的起始角度。角度是从水平轴开始测量的,顺时针方向为正。
end-angle 浮动 60 圆弧的结束角。角度是从水平轴开始测量的,顺时针方向为正。从 start-angleend-angle 形成顺时针方向的圆弧。
opacity 浮动 1 设置圆弧的不透明度。
stroke-color 字符串 黑色 设置线条的描边颜色( PL 颜色HTML 颜色 )。
stroke-width 浮动 2 设置描边的宽度。
dashed-size 浮动 _ 创建一条具有等间距 dashed-sizepx 填充的虚线。

示例实现

pl-controlled-curved-line元件

样品元素

<pl-drawing width="200" height="200">
  <pl-drawing-initial>
    <pl-controlled-curved-line
      x1="20"
      y1="20"
      x2="160"
      y2="20"
      x3="40"
      y3="140"
      draw-error-box="true"
      offset-control-tol-x="20"
      offset-control-tol-y="30"
    ></pl-controlled-curved-line>
  </pl-drawing-initial>
</pl-drawing>

pl-control-curved-line 元素的屏幕截图

定制

属性 类型 默认 描述
x1 浮动 20 x 端点之一相对于画布原点(上/左上角)的位置,即距画布左边框的水平距离。
y1 浮动 40 y 端点之一相对于画布原点(上/左上角)的位置,即距画布上边框的垂直距离。
x2 浮动 60 x 端点之一相对于画布原点(上/左上角)的位置,即距画布左边框的水平距离。
y2 浮动 40 y 端点之一相对于画布原点(上/左上角)的位置,即距画布上边框的垂直距离。
x3 浮动 40 40 x 二次曲线控制点(中点)相对于画布原点(上/左上角)的位置,即距画布左边框的水平距离。
y3 浮动 60 y 二次曲线控制点(中点)相对于画布原点(上/左上角)的位置,即距画布上边框的垂直距离。
color 字符串 红色 设置坐标系的颜色( PL 颜色HTML 颜色 )。
stroke-width 浮动 4 设置描边的宽度。
handle-radius 浮动 6 设置定义终点和控制点的圆形控柄的半径。
draw-error-box 布尔 - 绘制错误边界框,其中端点和控制点的位置被认为是正确的。
offset-tol-x 浮动 0 端点水平方向的公差偏移。误差边界框的水平尺寸等于 2*(tol + offset-tol-x),其中 tol 被定义为 pl-drawing 的属性(或默认为 1/2 网格)。终点位于边界框的中心。
offset-tol-y 浮动 0 端点垂直方向的公差偏移。错误边界框的垂直尺寸等于 2*(tol + offset-tol-y),其中 tol 被定义为 pl-drawing 的属性(或默认为 1/2 网格)。终点位于边界框的中心。
offset-control-tol-x 浮动 0 控制点水平方向的公差偏移。误差边界框的水平尺寸等于 2*(tol + offset-tol-x),其中 tol 被定义为 pl-drawing 的属性(或默认为 1/2 网格)。控制点位于边界框的中心。
offset-control-tol-y 浮动 0 控制点垂直方向的公差偏移。错误边界框的垂直尺寸等于 2*(tol + offset-tol-y),其中 tol 被定义为 pl-drawing 的属性(或默认为 1/2 网格)。控制点位于边界框的中心。

示例实现

pl-point元件

样品元素

<pl-drawing width="200" height="200">
  <pl-drawing-initial>
    <pl-point x1="60" y1="120" label="A"></pl-point>
    <pl-point x1="160" y1="60" label="B"></pl-point>
  </pl-drawing-initial>
</pl-drawing>

pl-point 元素的屏幕截图

定制

属性 类型 默认 描述
x1 浮动 20 x 点的位置,即距画布左边框的水平距离。
y1 浮动 20 y 点的位置,即距画布上边框的垂直距离。
radius 浮动 4 定义点的圆的半径。
label 字符串 - 用于标记点的文本。
offsetx 浮动 5 label 距该点的水平距离。
offsety 浮动 5 label 距该点的垂直距离。
opacity 浮动 1 设置点的不透明度。
color 字符串 黑色 设置点的填充颜色( PL 颜色HTML 颜色 )。
draw-error-box 布尔 - 绘制错误边界框,其中点的位置被认为是正确的。

示例实现

pl-triangle元件

样品元素

<pl-drawing width="200" height="200">
  <pl-drawing-initial>
    <pl-triangle x1="40" y1="180" x2="160" y2="180" x3="160" y3="40"></pl-triangle>
  </pl-drawing-initial>
</pl-drawing>

pl-三角形元素的屏幕截图

定制

属性 类型 默认 描述
x1 浮动 40 40 x 顶点 1 的位置,即距画布左边框的水平距离。
y1 浮动 40 40 y 顶点 1 的位置,即距画布上边框的垂直距离。
x2 浮动 60 x 顶点 2 的位置,即距画布左边框的水平距离。
y2 浮动 40 40 y 顶点 2 的位置,即距画布上边框的垂直距离。
x3 浮动 40 40 x 顶点 3 的位置,即距画布左边框的水平距离。
y3 浮动 20 y 顶点 3 的位置,即距画布上边框的垂直距离。
opacity 浮动 1 设置整个元素(线条和填充)的不透明度。
color 字符串 红色1 设置三角形的填充颜色( PL 颜色HTML 颜色 )。
stroke-color 字符串 黑色 设置三角形的描边颜色。
stroke-width 浮动 1 设置描边的宽度。

示例实现

pl-rectangle元件

样品元素

<pl-drawing width="200" height="200">
  <pl-drawing-initial>
    <pl-rectangle x1="80" y1="50" width="100" height="40"></pl-rectangle>
    <pl-rectangle x1="120" y1="140" width="120" height="20" angle="30" color="pink1"></pl-rectangle>
  </pl-drawing-initial>
</pl-drawing>

pl-矩形元素的屏幕截图

定制

属性 类型 默认 描述
x1 浮动 40 40 x 矩形中心的位置,即距画布左边框的水平距离。
y1 浮动 40 40 y 矩形中心的位置,即距画布上边框的垂直距离。
height 浮动 40 40矩形的高度。
width 浮动 30 矩形的宽度。
angle 浮动 0 绕矩形中心旋转的角度。角度是从水平轴开始测量的,顺时针方向为正。
opacity 浮动 1 设置整个元素(线条和填充)的不透明度。
color 字符串 绿色1 设置矩形的填充颜色( PL 颜色HTML 颜色 )。
stroke-color 字符串 黑色 设置矩形的描边颜色。
stroke-width 浮动 1 设置描边的宽度。

示例实现

pl-circle元件

样品元素

<pl-drawing width="200" height="200">
  <pl-drawing-initial>
    <pl-circle x1="40" y1="100" radius="30" color="#95A5A6" stroke-width="3"></pl-circle>
    <pl-circle x1="120" y1="100" radius="50" color="#D0D3D4"></pl-circle>
  </pl-drawing-initial>
</pl-drawing>

pl-circle 元素的屏幕截图

定制

属性 类型 默认 描述
x1 浮动 40 40 x 圆心的位置,即距画布左边框的水平距离。
y1 浮动 40 40 y 圆心的位置,即距画布上边框的垂直距离。
radius 浮动 20 圆的半径。
opacity 浮动 1 设置整个元素(线条和填充)的不透明度。
color 字符串 灰色 设置圆的填充颜色(PL颜色HTML颜色)。
stroke-color 字符串 黑色 设置圆的描边颜色。
stroke-width 浮动 1 设置描边的宽度。
label 字符串 - 用于标记圆心的文本。
offsetx 浮动 5 label 距圆心的水平距离。
offsety 浮动 5 label 距圆心的垂直距离。

示例实现

pl-polygon元件

样品元素

<pl-drawing width="200" height="200">
  <pl-drawing-initial>
    <pl-polygon plist='[{"x": 40, "y": 40}, {"x": 140,"y": 80}, {"x": 60,"y": 180}]'></pl-polygon>
  </pl-drawing-initial>
</pl-drawing>

pl-polygon 元素的屏幕截图

定制

属性 类型 默认 描述
plist 字符串 默认的 5 顶点五边形 形成多边形的顶点列表。
opacity 浮动 1 设置整个元素(线条和填充)的不透明度。
color 字符串 白色 设置圆的填充颜色(PL颜色HTML颜色)。
stroke-color 字符串 黑色 设置圆的描边颜色。
stroke-width 浮动 1 设置描边的宽度。

要绘制具有 n 顶点的多边形,每个顶点的坐标为 (xi,yi),字符串 plist 以字典形式给出,格式如下:

plist = '[{"x": x1, "y": y1}, {"x": x2,"y": x2}, ... , {"x": xn,"y": yn}]'

有关使用 server.py 生成 plist 的示例,请参阅 QID:Example-pl-drawing-beam-cross-section

示例实现

向量和载荷

pl-vector元件

样品元素

<pl-drawing width="200" height="200">
  <pl-drawing-initial>
    <pl-point x1="100" y1="100"></pl-point>
    <pl-line x1="20" y1="20" angle="45" width="240" dashed-size="4" stroke-width="1"></pl-line>
    <pl-vector x1="100" y1="100" width="80" angle="45" label="F"></pl-vector>
    <pl-vector
      x1="100"
      y1="100"
      width="80"
      angle="45"
      color="green3"
      anchor-is-tail="false"
    ></pl-vector>
  </pl-drawing-initial>
</pl-drawing>

pl-向量元素的屏幕截图

定制

属性 类型 默认 描述
x1 浮动 30 x 矢量锚点的位置,即距画布左边框的水平距离。
y1 浮动 10 10 y 向量锚点的位置,即距画布上边框的垂直距离。
anchor-is-tail 布尔 真实 锚点 (x1,y1) 是向量的尾部。
width 浮动 60 向量的长度。
angle 浮动 0 绕矢量起点旋转的角度。角度是从水平轴开始测量的,顺时针方向为正。
label 字符串 - 用于标记向量的文本。
offsetx 浮动 2 label 距向量头部的水平距离。
offsety 浮动 2 label 距矢量头部的垂直距离。
color 字符串 红3 设置矢量的颜色( PL 颜色HTML 颜色 )。
stroke-width 浮动 3 设置描边的宽度。
arrow-head-width 浮动 1 箭头宽度的比例因子。
arrow-head-length 浮动 1 箭头长度的比例因子。
disregard-sense 布尔 disregard-sense=false 时,锚固件的位置和角度应在公差范围内匹配。当disregard-sense=true时,矢量的正确性只考虑锚点的位置和方向(即相反方向的矢量也被认为是正确的)。
draw-error-box 布尔 - 绘制错误边界框,其中锚点的位置被认为是正确的。
offset-forward 浮动 0 从向量相同方向的锚点测量的边界框长度。当 disregard-sense=true 时,默认为 width
offset-backward 浮动 宽度 从向量相反方向的锚点测量的边界框长度。
optional-grading 布尔 true时,评分算法不会为对象分配分值,但也不会进行惩罚。

有关评分属性的更多信息,请参阅下面的评分部分。

示例实现

pl-double-headed-vector元件

样品元素

<pl-drawing width="200" height="200">
  <pl-drawing-initial>
    <pl-double-headed-vector
      x1="40"
      y1="120"
      width="120"
      color="blue"
      angle="-30"
    ></pl-double-headed-vector>
  </pl-drawing-initial>
</pl-drawing>

pl-double-headed-vector 元素的屏幕截图

定制

属性 类型 默认 描述
x1 浮动 30 x 矢量锚点的位置,即距画布左边框的水平距离。
y1 浮动 10 10 y 向量锚点的位置,即距画布上边框的垂直距离。
anchor-is-tail 布尔 真实 锚点 (x1,y1) 是向量的尾部。
width 浮动 60 向量的长度。
angle 浮动 0 绕矢量起点旋转的角度。角度是从水平轴开始测量的,顺时针方向为正。
label 字符串 - 用于标记向量的文本。
offsetx 浮动 2 label 距向量头部的水平距离。
offsety 浮动 2 label 距矢量头部的垂直距离。
color 字符串 红3 设置矢量的颜色( PL 颜色HTML 颜色 )。
stroke-width 浮动 3 设置描边的宽度。
arrow-head-width 浮动 1 箭头宽度的比例因子。
arrow-head-length 浮动 1 箭头长度的比例因子。
disregard-sense 布尔 disregard-sense=false 时,锚固件的位置和角度应在公差范围内匹配。当disregard-sense=true时,矢量的正确性只考虑锚点的位置和方向(即相反方向的矢量也被认为是正确的)。
draw-error-box 布尔 - 绘制错误边界框,其中锚点的位置被认为是正确的。
offset-forward 浮动 0 从向量相同方向的锚点测量的边界框长度。当 disregard-sense=true 时,默认为 width
offset-backward 浮动 宽度 从向量相反方向的锚点测量的边界框长度。
optional-grading 布尔 true时,评分算法不会为对象分配分值,但也不会进行惩罚。

示例实现

pl-paired-vector元件

样品元素

<pl-drawing width="200" height="200">
  <pl-drawing-initial>
    <pl-point x1="40" y1="40"></pl-point>
    <pl-point x1="140" y1="140"></pl-point>
    <pl-line x1="20" y1="20" angle="45" width="240" dashed-size="4" stroke-width="1"></pl-line>
    <pl-paired-vector
      x1="40"
      y1="40"
      x2="140"
      y2="140"
      width="60"
      angle1="45"
      angle2="225"
    ></pl-paired-vector>
  </pl-drawing-initial>
</pl-drawing>

pl-paired-vector 元素的屏幕截图

定制

属性 类型 默认 描述
x1 浮动 2 * 网格大小 x 第一个向量的锚点位置,即距画布左边框的水平距离。
y1 浮动 1 * 网格大小 y 第一个向量的锚点位置,即距画布上边框的垂直距离。
x2 浮动 3 * 网格大小 x 第二个向量的锚点位置,即距画布左边框的水平距离。
y2 浮动 2 * 网格大小 y 第二个向量的锚点位置,即距画布上边框的垂直距离。
anchor-is-tail 布尔 真实 锚点 (x1,y1)(x2,y2) 是向量的尾部。
width 浮动 60 向量的长度。
angle1 浮动 0 围绕第一个矢量起点的旋转角度。角度是从水平轴开始测量的,顺时针方向为正。
angle2 浮动 0 围绕第二个向量起点的旋转角度。角度是从水平轴开始测量的,顺时针方向为正。
label 字符串 - 用于标记向量的文本。
offsetx 浮动 2 label 距向量头部的水平距离。
offsety 浮动 2 label 距向量头部的垂直距离。
color 字符串 红3 设置矢量的颜色( PL 颜色HTML 颜色 )。
stroke-width 浮动 3 设置描边的宽度。
arrow-head-width 浮动 1 箭头宽度的比例因子。
arrow-head-length 浮动 1 箭头长度的比例因子。
disregard-sense 布尔 真实 disregard-sense=true时,矢量的正确性只考虑锚点的位置和方向(即相反方向的矢量也被认为是正确的)。当 disregard-sense=false 时,锚固件的位置和角度应在公差范围内匹配。
draw-error-box 布尔 - 绘制错误边界框,其中锚点的位置被认为是正确的。
offset-forward 浮动 宽度 从向量相同方向的锚点测量的边界框长度。当disregard-sense=true时默认为widthpl-paired-vector时默认为0),当disregard-sense=false时默认为0
offset-backward 浮动 宽度 从向量相反方向的锚点测量的边界框长度。
optional-grading 布尔 true时,评分算法不会为对象分配分值,但也不会进行惩罚。
weight 整数 1 计算元素的加权平均分数时使用的权重。

示例实现

pl-arc-vector元件

样品元素

<pl-drawing width="200" height="200">
  <pl-drawing-initial>
    <pl-arc-vector x1="80" y1="80" label="M" radius="60" stroke-width="2"></pl-arc-vector>
  </pl-drawing-initial>
</pl-drawing>

pl-arc-vector 元素的屏幕截图

定制

属性 类型 默认 描述
x1 浮动 40 40 x 圆弧向量中心的位置,即距画布左边框的水平距离。
y1 浮动 40 40 y 圆弧向量中心的位置,即距画布上边框的垂直距离。
radius 浮动 30 圆弧矢量的半径。
start-angle 浮动 0 圆弧的起始角度。角度是从水平轴开始测量的,顺时针方向为正。
end-angle 浮动 210 210圆弧矢量的结束角。角度是从水平轴开始测量的,顺时针方向为正。从 start-angleend-angle 形成顺时针方向的圆弧。
draw-center 布尔 真实 绘制圆弧矢量的中心。
clockwise-direction 布尔 真实 定义圆弧矢量的方向。默认按顺时针方向绘制圆弧矢量。
label 字符串 - 用于标记圆弧矢量角度的文本。
offsetx 浮动 0 label 距圆弧矢量中点的水平距离。
offsety 浮动 0 label 距圆弧矢量中点的垂直距离。
color 字符串 紫色 设置圆弧的描边颜色( PL 颜色HTML 颜色 )。
stroke-width 浮动 3 设置描边的宽度。
arrow-head-width 浮动 1 箭头宽度的比例因子。
arrow-head-length 浮动 1 箭头长度的比例因子。
disregard-sense 布尔 disregard-sense=true时,弧向量的正确性仅考虑锚点的位置。
draw-error-box 布尔 - 绘制错误边界框,其中锚点的位置被认为是正确的。
optional-grading 布尔 true时,评分算法不会为对象分配分值,但也不会进行惩罚。

示例实现

pl-distributed-load元件

样品元素

<pl-drawing width="200" height="200">
  <pl-drawing-initial>
    <pl-distributed-load x1="50" y1="40" width="60"></pl-distributed-load>
    <pl-distributed-load
      x1="100"
      y1="160"
      width="80"
      w1="0"
      w2="40"
      color="green3"
      anchor-is-tail="false"
      stroke-width="2"
    ></pl-distributed-load>
    <pl-distributed-load
      x1="160"
      y1="60"
      width="80"
      w1="30"
      w2="60"
      angle="90"
      color="brown"
    ></pl-distributed-load>
  </pl-drawing-initial>
</pl-drawing>

pl-distributed-load 元素的屏幕截图

定制

属性 类型 默认 描述
x1 浮动 30 x 基线中心的位置,即距画布左边框的水平距离。
y1 浮动 10 10 y 基线中心的位置,即距画布上边框的垂直距离。
anchor-is-tail 布尔 真实 锚点 (x1,y1) 是向量的尾部。
width 浮动 60 分布载荷的范围。
spacing 浮动 20 向量之间的间距。
w1 浮动 60 范围开始处分布载荷的高度。
w2 浮动 60 范围末端分布载荷的高度。
angle 浮动 0 绕基线中心(即点 (x1,y1))旋转的角度。角度是从水平轴开始测量的,顺时针方向为正。
label1 字符串 - 用于标记范围起始处向量高度的文本。
offsetx1 浮动 2 label1 距范围起始处向量的水平距离。
offsety1 浮动 2 label1 距范围起点处向量的垂直距离。
label2 字符串 - 用于标记范围末尾向量高度的文本。
offsetx2 浮动 2 label2 距范围末尾向量的水平距离。
offsety2 浮动 2 label2 距范围末尾向量的垂直距离。
color 字符串 红3 设置分布式负载的描边颜色(PL颜色HTML颜色)。
stroke-width 浮动 3 设置描边的宽度。
arrow-head-width 浮动 2 箭头宽度的比例因子。
arrow-head-length 浮动 3 箭头长度的比例因子。
disregard-sense 布尔 disregard-sense=false 时,锚固件的位置和角度应在公差范围内匹配。当disregard-sense=true时,矢量的正确性只考虑锚点的位置和方向(即相反方向的矢量也被认为是正确的)。
draw-error-box 布尔 - 绘制错误边界框,其中锚点的位置被认为是正确的。
offset-forward 浮动 0 从与分布载荷相同方向的锚点开始测量的边界框长度。当 disregard-sense=true 时,默认为 max(w1, w2) * 1.1
offset-backward 浮动 max(w1, w2) * 1.1 从分布载荷相反方向的锚点测量的边界框长度。
optional-grading 布尔 true时,评分算法不会为对象分配分值,但也不会进行惩罚。

示例实现

力学和结构

pl-rod元件

样品元素

<pl-drawing width="200" height="200">
  <pl-drawing-initial>
    <pl-rod x1="60" y1="80" x2="120" y2="100"></pl-rod>
  </pl-drawing-initial>
</pl-drawing>

pl-rod 元素的屏幕截图

定制

属性 类型 默认 描述
x1 浮动 40 40 x 杆第一端的位置,即距画布左边框的水平距离。
y1 浮动 40 40 y 杆第一端的位置,即距画布上边框的垂直距离。
x2 浮动 80 x 杆第二端的位置,即距画布左边框的水平距离。
y2 浮动 20 y 杆第二端的位置,即距画布上边框的垂直距离。
width 浮动 20 杆的厚度。
draw-pin 布尔 真实 在杆的两端画出销钉的位置。
label1 字符串 - 用于标记杆第一端的文本。
offsetx1 浮动 2 label1 距杆第一端的水平距离。
offsety1 浮动 2 label1 距杆第一端的垂直距离。
label2 字符串 - 用于标记杆第二端的文本。
offsetx2 浮动 2 label2距杆第二端的水平距离。
offsety2 浮动 2 label2 距杆第二端的垂直距离。
color 字符串 白色 设置杆的填充颜色(PL颜色HTML颜色)。
stroke-color 字符串 黑色 设置杆的描边颜色。
stroke-width 浮动 2 设置描边的宽度。

示例实现

pl-3pointrod元件

样品元素

<pl-drawing width="200" height="200">
  <pl-drawing-initial>
    <pl-3pointrod x1="40" y1="100" x2="100" y2="100" x3="100" y3="180"></pl-3pointrod>
  </pl-drawing-initial>
</pl-drawing>

ZJUI-Learn 中的 3 点杆元件

定制

属性 类型 默认 描述
x1 浮动 40 40 x 杆第一端的位置,即距画布左边框的水平距离。
y1 浮动 100 100 y 杆第一端的位置,即距画布上边框的垂直距离。
x2 浮动 100 100 x 杆中心点的位置,即距画布左边框的水平距离。
y2 浮动 100 100 y 杆中心点的位置,即距画布上边框的垂直距离。
x3 浮动 100 100 x 杆第二端的位置,即距画布左边框的水平距离。
y3 浮动 140 140 y 杆第二端的位置,即距画布上边框的垂直距离。
width 浮动 20 杆的厚度。
draw-pin 布尔 真实 在杆的所有三个点处绘制销钉位置。
label1 字符串 - 用于标记杆第一端的文本。
offsetx1 浮动 0 label1 距杆第一端的水平距离。
offsety1 浮动 -20 -20 label1 距杆第一端的垂直距离。
label2 字符串 - 用于标记杆中点的文本。
offsetx2 浮动 0 label2距杆中点的水平距离。
offsety2 浮动 -20 -20 label2距杆中点的垂直距离。
label3 字符串 - 用于标记杆第二端的文本。
offsetx3 浮动 0 label3距杆第二端的水平距离。
offsety3 浮动 -20 -20 label3 距杆第二端的垂直距离。
color 字符串 白色 设置杆的填充颜色(PL颜色HTML颜色)。
stroke-color 字符串 黑色 设置杆的描边颜色。
stroke-width 浮动 2 设置描边的宽度。

示例实现

pl-4pointrod元件

样品元素

<pl-drawing width="200" height="200">
  <pl-drawing-initial>
    <pl-4pointrod></pl-4pointrod>
  </pl-drawing-initial>
</pl-drawing>

pl-4pointrod 元素的屏幕截图

定制

属性 类型 默认 描述
x1 浮动 40 40 x 杆第一端的位置,即距画布左边框的水平距离。
y1 浮动 100 100 y 杆第一端的位置,即距画布上边框的垂直距离。
x2 浮动 100 100 x 杆中心点的位置,即距画布左边框的水平距离。
y2 浮动 100 100 y 杆中心点的位置,即距画布上边框的垂直距离。
x3 浮动 100 100 x 杆第二端的位置,即距画布左边框的水平距离。
y3 浮动 160 160 y 杆第二端的位置,即距画布上边框的垂直距离。
x4 浮动 140 140 x 杆第三端的位置,即距画布左边框的水平距离。
y4 浮动 60 y 杆第三端的位置,即距画布上边框的垂直距离。
width 浮动 20 杆的厚度。
draw-pin 布尔 真实 在杆的所有四个点处绘制销钉位置。
label1 字符串 - 用于标记杆第一端的文本。
offsetx1 浮动 0 label1 距杆第一端的水平距离。
offsety1 浮动 -20 -20 label1 距杆第一端的垂直距离。
label2 字符串 - 用于标记杆中点的文本。
offsetx2 浮动 0 label2距杆中点的水平距离。
offsety2 浮动 -20 -20 label2距杆中点的垂直距离。
label3 字符串 - 用于标记杆第二端的文本。
offsetx3 浮动 0 label3距杆第二端的水平距离。
offsety3 浮动 -20 -20 label3 距杆第二端的垂直距离。
label4 字符串 - 用于标记杆第三端的文本。
offsetx4 浮动 0 label4距杆第三端的水平距离。
offsety4 浮动 -20 -20 label4 距杆第三端的垂直距离。
color 字符串 白色 设置杆的填充颜色(PL颜色HTML颜色)。
stroke-color 字符串 黑色 设置杆的描边颜色。
stroke-width 浮动 2 设置描边的宽度。

示例实现

pl-collar-rod元件

样品元素

<pl-drawing width="200" height="200">
  <pl-drawing-initial>
    <pl-collar-rod x1="60" y1="100" x2="160" y2="100"></pl-collar-rod>
  </pl-drawing-initial>
</pl-drawing>

pl-collar-rod 元素的屏幕截图

定制

属性 类型 默认 描述
x1 浮动 40 40 x 杆第一端的位置,即距画布左边框的水平距离。
y1 浮动 40 40 y 杆第一端的位置,即距画布上边框的垂直距离。
x2 浮动 100 100 x 杆第二端的位置,即距画布左边框的水平距离。
y2 浮动 40 40 y 杆第二端的位置,即距画布上边框的垂直距离。
width 浮动 20 杆的厚度。
draw-pin 布尔 真实 在杆的两端画出销钉的位置。
label1 字符串 - 用于标记杆第一端的文本。
offsetx1 浮动 2 label1 距杆第一端的水平距离。
offsety1 浮动 2 label1 距杆第一端的垂直距离。
label2 字符串 - 用于标记杆第二端的文本。
offsetx2 浮动 2 label2距杆第二端的水平距离。
offsety2 浮动 2 label2 距杆第二端的垂直距离。
draw-collar-end1 布尔 真实 (x1,y1) 处画出衣领末端。
w1 浮动 1.5*宽度 末端衣领的宽度 1。
h1 浮动 2*宽度 末端 1 处衣领的高度。
draw-collar-end2 布尔 (x2,y2) 处画出衣领末端。
w2 浮动 1.5*宽度 末端衣领的宽度 2。
h2 浮动 2*宽度 末端 2 处衣领的高度。
color 字符串 白色 设置杆的填充颜色(PL颜色HTML颜色)。
stroke-color 字符串 黑色 设置杆的描边颜色。
stroke-width 浮动 2 设置描边的宽度。

示例实现

pl-fixed-pin元件

样品元素

<pl-drawing width="200" height="200">
  <pl-drawing-initial>
    <pl-fixed-pin x1="100" y1="100"></pl-fixed-pin>
  </pl-drawing-initial>
</pl-drawing>

pl-fixed-pin 元素的屏幕截图

定制

属性 类型 默认 描述
x1 浮动 20 x 引脚中心位置,即距画布左边框的水平距离。
y1 浮动 20 y 杆第一端的位置,即距画布上边框的垂直距离。
height 浮动 40 40引脚支撑的高度,从底座 (ground) 顶部到引脚中心测量。
width 浮动 30 销支撑的宽度。
angle 浮动 0 绕销中心旋转的角度。角度是从水平轴开始测量的,顺时针方向为正。
draw-pin 布尔 真实 画出引脚的位置。
draw-ground 布尔 真实 画出矩形底座/地面。
label 字符串 - 用于标记引脚支撑的文本。
offsetx 浮动 2 label 距引脚中心的水平距离。
offsety 浮动 2 label 距引脚中心的垂直距离。
color 字符串 棕色1 设置引脚支撑的填充颜色(PL颜色HTML颜色)。
stroke-color 字符串 黑色 设置引脚支撑的描边颜色。
stroke-width 浮动 2 设置描边的宽度。

示例实现

pl-roller元件

样品元素

<pl-drawing width="200" height="200">
  <pl-drawing-initial>
    <pl-roller x1="60" y1="100"></pl-roller>
    <pl-fixed-pin x1="140" y1="100" color="green1"></pl-fixed-pin>
  </pl-drawing-initial>
</pl-drawing>

pl-roller 元素的屏幕截图

定制

属性 类型 默认 描述
x1 浮动 20 x 引脚中心位置,即距画布左边框的水平距离。
y1 浮动 20 y 引脚第一端的位置,即距画布上边框的垂直距离。
height 浮动 40 40滚轮支撑高度,从底座 (ground) 顶部到销中心测量。
width 浮动 30 滚轮支撑的宽度。
angle 浮动 0 绕销中心旋转的角度。角度是从水平轴开始测量的,顺时针方向为正。
draw-pin 布尔 真实 画出引脚的位置。
draw-ground 布尔 真实 画出矩形底座/地面。
label 字符串 - 用于标记滚轮支撑的文本。
offsetx 浮动 2 label 距引脚中心的水平距离。
offsety 浮动 2 label 距引脚中心的垂直距离。
color 字符串 棕色1 设置滚轮支撑的填充颜色(PL 颜色HTML 颜色)。
stroke-color 字符串 黑色 设置滚轮的描边颜色。
stroke-width 浮动 2 设置描边的宽度。

示例实现

pl-clamped元件

样品元素

<pl-drawing width="200" height="200">
  <pl-drawing-initial>
    <pl-roller x1="140" y1="100" width="40" color="gray1"></pl-roller>
    <pl-rod x1="40" y1="100" x2="140" y2="100" draw-pin="false"></pl-rod>
    <pl-clamped x1="40" y1="100" height="60" width="20"></pl-clamped>
  </pl-drawing-initial>
</pl-drawing>

ZJUI-Learn 中的夹紧末端元素

定制

属性 类型 默认 描述
x1 浮动 20 x 夹紧点的位置,即距画布左边框的水平距离。
y1 浮动 20 y 夹紧点的位置,即距画布上边框的垂直距离。
height 浮动 40 40夹紧支架的高度 (rectangle)。
width 浮动 20 夹紧支架的宽度 (rectangle)。
angle 浮动 0 围绕夹紧点的旋转角度。角度是从水平轴开始测量的,顺时针方向为正。
label 字符串 - 用于标记夹紧支撑的文本。
offsetx 浮动 2 label距夹紧点的水平距离。
offsety 浮动 2 label 距夹紧点的垂直距离。
color 字符串 黑色 使用从白色到 color 的渐变填充夹紧支撑的颜色(PL 颜色HTML 颜色)。
stroke-width 浮动 2 设置描边的宽度。

示例实现

pl-spring元件

样品元素

<pl-drawing width="200" height="200" grid-size="20">
  <pl-drawing-initial>
    <pl-spring x1="50" y1="40" width="140" draw-pin="true"></pl-spring>
    <pl-spring x1="20" y1="80" angle="20" width="120" height="20" interval="5"></pl-spring>
    <pl-spring x1="20" y1="160" width="30" height="20" stroke-color="purple3"></pl-spring>
  </pl-drawing-initial>
</pl-drawing>

pl-spring 元素截图

定制

属性 类型 默认 描述
x1 浮动 20 x 弹簧起点的位置,即距画布左边框的水平距离。
y1 浮动 20 y 弹簧起点的位置,即距画布上边框的垂直距离。
width 浮动 60 弹簧的长度。
angle 浮动 0 围绕弹簧起点的旋转角度。角度是从水平轴开始测量的,顺时针方向为正。
height 浮动 40 40弹簧的高度。
interval 浮动 10 10每条斜线之间的间隔。如果弹簧宽度太短,则重新计算此间隔。
x2 浮动 - x 弹簧终点的位置,即距画布左边框的水平距离。默认情况下,(x2,y2)anglewidth 确定。如果提供了 x2y2,则替换 anglewidth
y2 浮动 - y 弹簧终点的位置,即距画布上边框的垂直距离。默认情况下,(x2,y2)anglewidth 确定。如果提供了 x2y2,则替换 anglewidth
stroke-color 字符串 黑色 设置弹簧的颜色(PL 颜色HTML 颜色)。
stroke-width 浮动 2 设置描边的宽度。
draw-pin 布尔 在弹簧末端画点。

示例实现

pl-coil元件

样品元素

<pl-drawing width="200" height="200" grid-size="20">
  <pl-drawing-initial>
    <pl-coil x1="50" y1="40" draw-pin="true"></pl-coil>
    <pl-coil x1="20" y1="100" angle="20" width="120" height="80"></pl-coil>
    <pl-coil x1="20" y1="180" width="40" height="20" stroke-color="purple3"></pl-coil>
  </pl-drawing-initial>
</pl-drawing>

pl-coil 元件截图

定制

属性 类型 默认 描述
x1 浮动 20 x 线圈起点的位置,即距画布左边框的水平距离。
y1 浮动 20 y 线圈起点的位置,即距画布上边框的垂直距离。
width 浮动 80 线圈的长度。
angle 浮动 0 绕线圈起点的旋转角度。角度是从水平轴开始测量的,顺时针方向为正。
height 浮动 30 线圈的高度。
x2 浮动 - x 线圈终点的位置,即距画布左边框的水平距离。默认情况下,(x2,y2)anglewidth 确定。如果提供了 x2y2,则替换 anglewidth
y2 浮动 - y 线圈终点的位置,即距画布上边框的垂直距离。默认情况下,(x2,y2)anglewidth 确定。如果提供了 x2y2,则替换 anglewidth
stroke-color 字符串 黑色 设置线圈的颜色(PL 颜色HTML 颜色)。
stroke-width 浮动 2 设置描边的宽度。
draw-pin 布尔 在线圈末端画点。

示例实现

pl-pulley元件

样品元素

<pl-drawing width="200" height="200">
  <pl-drawing-initial>
    <pl-pulley x1="100" y1="150" x2="20" y2="120" x3="140" y3="60" radius="40"></pl-pulley>
    <pl-pulley x1="50" y1="40" x2="50" y2="100" x3="160" y3="40" color="blue1"></pl-pulley>
  </pl-drawing-initial>
</pl-drawing>

pl-pulley 元件的屏幕截图

定制

属性 类型 默认 描述
x1 浮动 40 40 x 滑轮中心位置,即距画布左边框的水平距离。
y1 浮动 40 40 y 滑轮中心位置,即距画布上边框的垂直距离。
x2 浮动 10 10 x 定义滑轮线末端的第一个点的位置,即距画布左边框的水平距离。
y2 浮动 10 10 y 定义滑轮线末端的第一个点的位置,即距画布顶部边框的垂直距离。
x3 浮动 120 120 x 定义滑轮线末端的第二个点的位置,即距画布左边框的水平距离。
y3 浮动 60 y 定义滑轮线末端的第二个点的位置,即距画布顶部边框的垂直距离。
alternative-path 布尔 选择滑轮处连接到点 (x2,y2)(x3,y3) 的其他切点。默认情况下,它绘制最短路径。
radius 浮动 20 滑轮的半径。
label 字符串 - 用于标记滑轮的文本。
offsetx 浮动 2 label距滑轮中心的水平距离。
offsety 浮动 2 label距滑轮中心的垂直距离。
color 字符串 灰色 设置滑轮的填充颜色(PL 颜色HTML 颜色)。
stroke-color 字符串 黑色 设置滑轮的描边颜色。
stroke-width 浮动 2 设置描边的宽度。

示例实现

电路元件

pl-capacitor元件

样品元素

<pl-drawing width="200" height="200" grid-size="20">
  <pl-drawing-initial>
    <pl-capacitor x1="20" y1="40" x2="140" y2="40" label="20\\mu C"></pl-capacitor>
    <pl-capacitor
      x1="40"
      y1="180"
      x2="180"
      y2="100"
      stroke-color="blue"
      label="4\\mu C"
    ></pl-capacitor>
  </pl-drawing-initial>
</pl-drawing>

pl-电容元件截图

定制

属性 类型 默认 描述
x1 浮动 40 40 x 电容器第一端的位置,即距画布左边框的水平距离。
y1 浮动 40 40 y 电容器第一端的位置,即距画布上边框的垂直距离。
angle 浮动 0 绕电容器起点的旋转角度。角度是从水平轴开始测量的,顺时针方向为正。
width 浮动 60 电容器的长度
x2 浮动 - x 电容器终点的位置,即距画布左边框的水平距离。默认情况下,(x2,y2)anglewidth 确定。如果提供了 x2y2,则替换 anglewidth
y2 浮动 - y 电容器终点的位置,即距画布上边框的垂直距离。默认情况下,(x2,y2)anglewidth 确定。如果提供了 x2y2,则替换 anglewidth
height 浮动 15 15电容器极板的长度。
interval 浮动 10 10电容器板之间的距离。
polarized 布尔 通过添加“+”符号来设置电容器是否有极性。
label 字符串 - 用于标记电容器的文本。
font-size 浮动 16 16标签字体大小。
offsetx 浮动 2 label 的水平偏移。
offsety 浮动 2 label 的垂直偏移。
stroke-color 字符串 黑色 设置杆的描边颜色。
stroke-width 浮动 2 设置描边的宽度。

示例实现

pl-resistor元件

样品元素

<pl-drawing width="200" height="200" grid-size="20">
  <pl-drawing-initial>
    <pl-resistor x1="20" y1="40" x2="140" y2="40" label="2\\Omega"></pl-resistor>
    <pl-resistor
      x1="40"
      y1="80"
      x2="180"
      y2="120"
      stroke-color="red"
      label="14\\Omega"
    ></pl-resistor>
    <pl-resistor
      x1="80"
      y1="160"
      height="30"
      stroke-color="purple"
      label="30\\Omega"
      offsety="25"
    ></pl-resistor>
  </pl-drawing-initial>
</pl-drawing>

pl电阻元件的屏幕截图

定制

属性 类型 默认 描述
x1 浮动 40 40 x 电阻第一端的位置,即距画布左边框的水平距离。
y1 浮动 40 40 y 电阻器第一端的位置,即距画布上边框的垂直距离。
angle 浮动 0 绕电阻器起点的旋转角度。角度是从水平轴开始测量的,顺时针方向为正。
width 浮动 60 电阻器的长度
x2 浮动 - x 电阻终点的位置,即距画布左边框的水平距离。默认情况下,(x2,y2)anglewidth 确定。如果提供了 x2y2,则替换 anglewidth
y2 浮动 - y 电阻终点的位置,即距画布上边框的垂直距离。默认情况下,(x2,y2)anglewidth 确定。如果提供了 x2y2,则替换 anglewidth
height 浮动 10 10电阻器的弹簧区域的高度。
interval 浮动 30 电阻器的弹簧区域的长度。
label 字符串 - 用于标记电阻器的文本。
font-size 浮动 16 16标签字体大小。
offsetx 浮动 2 label 的水平偏移。
offsety 浮动 2 label 的垂直偏移。
stroke-color 字符串 黑色 设置杆的描边颜色。
stroke-width 浮动 2 设置描边的宽度。

示例实现

pl-battery元件

样品元素

<pl-drawing width="200" height="200" grid-size="20">
  <pl-drawing-initial>
    <pl-battery x1="20" y1="40" x2="140" y2="40" label="10 V"></pl-battery>
    <pl-battery x1="40" y1="120" angle="30" width="80" stroke-color="red" label="20 V"></pl-battery>
  </pl-drawing-initial>
</pl-drawing>

pl-电池元件截图

定制

属性 类型 默认 描述
x1 浮动 40 40 x 电池第一端的位置,即距画布左边框的水平距离。
y1 浮动 40 40 y 电池第一端的位置,即距画布上边框的垂直距离。
angle 浮动 0 绕电池起始点旋转的角度。角度是从水平轴开始测量的,顺时针方向为正。
width 浮动 60 电池长度
x2 浮动 - x 电池终点的位置,即距画布左边框的水平距离。默认情况下,(x2,y2)anglewidth 确定。如果提供了 x2y2,则替换 anglewidth
y2 浮动 - y 电池终点的位置,即距画布上边框的垂直距离。默认情况下,(x2,y2)anglewidth 确定。如果提供了 x2y2,则替换 anglewidth
height 浮动 20 最长电池板长度的一半。
interval 浮动 5 电池板之间的距离。
label 字符串 - 用于标记电池的文本。
font-size 浮动 16 16标签字体大小。
offsetx 浮动 2 label 的水平偏移。
offsety 浮动 2 label 的垂直偏移。
stroke-color 字符串 黑色 设置杆的描边颜色。
stroke-width 浮动 2 设置描边的宽度。

示例实现

pl-switch元件

样品元素

<pl-drawing width="200" height="200" grid-size="20">
  <pl-drawing-initial>
    <pl-switch x1="20" y1="20" x2="140" y2="20" label="A"></pl-switch>
    <pl-switch x1="180" y1="60" angle="90" width="120" label="B" stroke-color="blue"></pl-switch>
    <pl-switch
      x1="20"
      y1="120"
      angle="20"
      width="120"
      switch-angle="45"
      label="S_1"
      draw-pin="false"
    ></pl-switch>
    <pl-switch x1="20" y1="100" angle="0" width="120" switch-angle="0"></pl-switch>
  </pl-drawing-initial>
</pl-drawing>

pl-switch 元素的屏幕截图

定制

属性 类型 默认 描述
x1 浮动 40 40 x 开关第一端的位置,即距画布左边框的水平距离。
y1 浮动 40 40 y 开关第一端的位置,即距画布上边框的垂直距离。
angle 浮动 0 围绕开关起点的旋转角度。角度是从水平轴开始测量的,顺时针方向为正。
width 浮动 60 开关长度
x2 浮动 - x 开关终点的位置,即距画布左边框的水平距离。默认情况下,(x2,y2)anglewidth 确定。如果提供了 x2y2,则替换 anglewidth
y2 浮动 - y 开关终点的位置,即距画布上边框的垂直距离。默认情况下,(x2,y2)anglewidth 确定。如果提供了 x2y2,则替换 anglewidth
switch-angle 浮动 30 开关打开的角度。
interval 浮动 40 40开关打开的距离。
draw-pin 布尔 真实 画出开关两端的引脚位置。
label 字符串 - 用于标记开关的文本。
font-size 浮动 16 16标签字体大小。
offsetx 浮动 2 label 的水平偏移。
offsety 浮动 2 label 的垂直偏移。
stroke-color 字符串 黑色 设置杆的描边颜色。
stroke-width 浮动 2 设置描边的宽度。

示例实现

pl-inductor元件

样品元素

<pl-drawing width="200" height="200" grid-size="20">
  <pl-drawing-initial>
    <pl-inductor></pl-inductor>
    <pl-inductor x1="40" y1="80" x2="180" y2="120" stroke-color="red" label="4 H"></pl-inductor>
    <pl-inductor
      x1="30"
      y1="160"
      width="140"
      interval="60"
      height="30"
      stroke-color="purple"
      label="2 H"
    ></pl-inductor>
  </pl-drawing-initial>
</pl-drawing>

pl-inductor 元件的屏幕截图

定制

属性 类型 默认 描述
x1 浮动 40 40 x 电感器第一端的位置,即距画布左边框的水平距离。
y1 浮动 40 40 y 电感器第一端的位置,即距画布上边框的垂直距离。
angle 浮动 0 绕电感器起点的旋转角度。角度是从水平轴开始测量的,顺时针方向为正。
width 浮动 60 电感器长度
x2 浮动 - x 电感终点的位置,即距画布左边框的水平距离。默认情况下,(x2,y2)anglewidth 确定。如果提供了 x2y2,则替换 anglewidth
y2 浮动 - y 电感器终点的位置,即距画布上边框的垂直距离。默认情况下,(x2,y2)anglewidth 确定。如果提供了 x2y2,则替换 anglewidth
height 浮动 20 电感器的弹簧状区域的高度。
interval 浮动 40 40电感器的弹簧状区域的长度。
label 字符串 - 用于标记电感器的文本。
font-size 浮动 16 16标签字体大小。
offsetx 浮动 2 label 的水平偏移。
offsety 浮动 2 label 的垂直偏移。
stroke-color 字符串 黑色 设置杆的描边颜色。
stroke-width 浮动 2 设置描边的宽度。

示例实现

绘制绘图的元素

pl-graph 元素的屏幕截图

<pl-drawing-initial>
  <pl-axes
    origin='{"x": 80, "y": 200}'
    supporting-lines='[{"x":80},{"x":160},{"x":320}]'
    grid-label='[ {"axis": "x", "pos": 80,  "lab": "4" },
                       {"axis": "x", "pos": 160, "lab": "8" },
                       {"axis": "x", "pos": 320, "lab": "16" },
                       {"axis": "y", "pos": 40,  "lab": "2" },
                       {"axis": "y", "pos": -40, "lab": "-2" },
                       {"axis": "y", "pos": 80,  "lab": "4" },
                       {"axis": "y", "pos": -80, "lab": "-4" },
                       {"axis": "y", "pos": 120,"lab": "6" },
                       {"axis": "y", "pos": -120,"lab": "-6" }]'
  >
  </pl-axes>

  <pl-graph-line
    origin='{"x": 80, "y": 200}'
    end-points='[{"x": 0, "y": 0}, {"x": 80, "y": 80}, {"x": 40, "y": 80}]'
    offset-control-tol-x="20"
  >
  </pl-graph-line>

  <pl-graph-line
    origin='{"x": 80, "y": 200}'
    end-points='[{"x": 80, "y": -80}, {"x": 160, "y": -80}]'
    offset-control-tol-y="30"
    end-gradients="[-2,2]"
  >
  </pl-graph-line>

  <pl-graph-line
    origin='{"x": 80, "y": 200}'
    end-points='[{"x": 160, "y": -80}, {"x": 320, "y": 0}]'
  >
  </pl-graph-line>
</pl-drawing-initial>

示例实现

pl-axes元件

pl-axes 元素添加两个轴来定义绘制绘图的坐标平面。

定制

属性 类型 默认 描述
origin 字符串 '{“x”:0,“y”:0}' 坐标系原点相对于画布原点的位置(顶/左上角)。 “x”是距画布左边框的水平距离。 “y”是距画布上边框的垂直距离。
xneg 浮动 20 x 轴负值部分的长度。
yneg 浮动 160 160 y 轴负值部分的长度。
xpos 浮动 400 x 轴正值部分的长度。
ypos 浮动 160 160 y 轴正值部分的长度。
label-x 字符串 'x' 用于标记 x 轴的文本。
offsetx-label-x 浮动 0 label-x 的水平偏移距离。
offsety-label-x 浮动 0 label-x 的垂直偏移距离。
label-y 字符串 'y' 用于标记 y 轴的文本。
offsetx-label-y 浮动 -30 label-y 的水平偏移距离。
offsety-label-y 浮动 -10 label-y 的垂直偏移距离。
supporting-lines 字符串 添加额外的网格线以帮助绘制草图。例如,“[{“x”:80},{“y”:40}]”添加一条相对于 origin 穿过位置 x=80 的垂直线,即由绘图轴定义的坐标系的原点。它还相对于 origin 添加了一条穿过 y=40 的水平线。
grid-label 字符串 将标签添加到指定的网格点。例如,'[ {"axis": "x", "pos": 80, "lab": "4" } ]' 相对于 origin 在位置 x=80 处添加标签 4。如果需要额外调整标签的位置,该属性可以有两个额外的可选键:offsetxoffsety,即 '[ {"axis": "x", "pos": 80, "lab": "4", "offsetx": 10, "offsety":20 } ]'
color 字符串 黑色 设置坐标系的颜色( PL 颜色HTML 颜色 )。
stroke-width 浮动 2 设置描边的宽度。

pl-graph-line元件

pl-graph-line 元素向绘图添加直线或二次线。它包装了元素 pl-controlled-linepl-controlled-curved-line,以便可以根据绘图的原点(而不是画布的原点)定义结束点和控制点。当仅给出两个点时,它会绘制直线。如果给出三个点,则会绘制一条二次曲线。它还提供了使用端点的梯度信息创建二次曲线的选项,而不是给出控制点的位置。

定制

属性 类型 默认 描述
origin 字符串 '{“x”:0,“y”:0}' 坐标系原点相对于画布原点的位置(顶/左上角)。 “x”是距画布左边框的水平距离。 “y”是距画布上边框的垂直距离。
end-points 字符串 提供关于 origin 的直线端点的坐标,即由绘图轴定义的坐标系的原点。例如,直线由两个端点定义,由 end-points='[{"x": 80, "y": -80}, {"x": 160, "y": -80}]' 给出。要绘制二次曲线,可以提供控制点坐标作为列表的第三个元素,即 end-points='[{"x": 0, "y": 0}, {"x": 80, "y": 80}, {"x": 40, "y": 80}]'
end-gradients 字符串 提供直线在端点处的导数。此信息用于在绘制二次曲线时确定控制点的位置。请注意,只能使用其中一个选项来绘制二次曲线:提供 end-gradients 或列表中的第三个点 end-points
color 字符串 红色 设置坐标系的颜色( PL 颜色HTML 颜色 )。
stroke-width 浮动 4 设置描边的宽度。
draw-error-box 布尔 - 绘制错误边界框,其中端点和控制点的位置被认为是正确的。
offset-tol-x 浮动 0 x 方向上边界框长度的一半。终点位于边界框的中心。
offset-tol-y 浮动 0 y 方向边界框长度的一半。终点位于边界框的中心。
offset-control-tol-x 浮动 0 x 方向上边界框长度的一半。控制点位于边界框的中心。
offset-control-tol-y 浮动 0 y 方向边界框长度的一半。控制点位于边界框的中心。

无障碍

目前无法访问交互式 pl-drawing 元素。对于交互式图表,没有可行的键盘控制或合理的屏幕阅读器交互。但是,您可以使用 aria-label 属性提供静态图的简短描述(即短标题),并使用 aria-description 属性提供更长、更详细的描述。当 gradablefalse 时,屏幕阅读器将读取该内容。

扩展API

可以使用元素扩展 添加 pl-drawing 的自定义元素。元素在两个位置定义:在服务器端 Python 中处理 HTML 属性的生成和读取,在客户端 JavaScript 中实现用户交互并序列化回服务器。因此,您的扩展应至少包含一个 Python 文件和一个 JavaScript 文件。

Python

每个元素都定义为一个Python类,并继承自BaseElement。您可以使用以下命令导入所有相关的元素函数和类:

elements = pl.load_host_script("elements.py")

这将加载 BaseElement 类,其中包含以下方法定义:

class BaseElement:
    def generate(element)
    def is_gradable()
    def grade(ref, student, tol, angtol)
    def grading_name(element)
    def validate_attributes()
    def get_attributes()

任何元素都可以自由定义上述任何方法,每个方法的描述如下:

  • generate(element, data) 生成发送到客户端 JavaScript 的元素的表示形式。此函数应使用 prairielearn.get_x_attrib(el) 解析元素属性并返回描述该元素的字典。该字典的确切格式并不重要,因为稍后只有元素的 JavaScript 实现才会使用它。 data 是当前包含 clientFilesUrl 的字典,clientFilesUrl 是可以从中加载所有客户端文件的基本 URL。
  • is_gradable() 如果当前元素可评分,则返回 True,否则,如果元素不可评分并且应在评分阶段跳过,则返回 False
  • grade(ref, student, tol, angtol) 此元素的评分方法根据给定参考​​ (ref) 检查 student 提交。如果元素放置正确,则应返回 True,否则返回 Falsetol 指定以像素为单位的空间容差,而 angtol 指定以度为单位的旋转容差。 refstudent 提交内容将与 generate() 中给出的格式匹配。
  • grading_name(element) 以字符串形式返回此元素的分级名称。通常您不需要定义它,除非您知道自己在做什么。
  • validate_attributes() 如果应验证该元素的属性,则返回 True,否则返回 False。建议您将其保留为默认值 True,除非您有明确的理由。
  • get_attributes() 返回表示该元素可能已在 question.html 中定义的可能属性的字符串列表。

以下是 pl-point 元素的示例定义:

class Point(BaseElement):
    def generate(el, data):
        color = pl.get_color_attrib(el, "color", "black")

        return {
            "left": pl.get_float_attrib(el, "x1", 20),
            "top": pl.get_float_attrib(el, "y1", 20),
            "radius": pl.get_float_attrib(el, "radius", drawing_defaults["point-size"]),
            "originX": "center",
            "originY": "center",
            "fill": color,
            "selectable": drawing_defaults["selectable"],
            "evented": drawing_defaults["selectable"]
        }

    def is_gradable():
        return True

    def grade(ref, st, tol, angtol):
        epos = np.array([st["left"], st["top"]]).astype(np.float64)
        rpos = np.array([ref["left"], ref["top"]])
        relx, rely = epos - rpos
        if not (-tol <= relx <= tol) or not (-tol <= rely <= tol):
            return False
        return True

    def get_attributes():
        return ["x1", "y1", "radius", "label", "offsetx", "offsety", "color"]

然后,每个类都应放入全局 elements 字典中,将元素的名称映射到其类。当扩展加载时,elements 字典将被 pl-drawing 自动获取:

elements = {}
elements["pl-point"] = Point

JavaScript

pl-drawing 的客户端 JavaScript 部分构建在 Fabric.js 上,因此任何元素都应构建在 Fabric 的形状以及包含的 mechanicsObjects.js 文件中定义的形状之上。

与 Python 代码类似,每个元素都继承自 JavaScript 基类:

class PLDrawingBaseElement {
    static generate(canvas, options, submittedAnswer);
    static button_press(canvas, options, submittedAnswer);
    static get_button_icon(options);
    static get_button_tooltip(options);
}

任何元素都可以自由定义上述任何方法,每个方法的描述如下:

  • generate(canvas, options, submittedAnswer) 创建元素的 Fabric.js 表示并将其放置到画布上。传入的选项字典 与 Python generate() 函数中生成的相同。该函数还应该将元素注册为 答案状态(参见下面的示例以及答案状态类的定义)。
  • button_press(canvas, options, submittedAnswer) 每当按下该元素的侧边栏控制按钮时就会运行该函数。默认情况下,这将调用 generate(), 所以在大多数情况下你不需要实现这个。
  • get_button_icon(options) 以字符串形式返回此按钮图标相对于 clientFilesElement(或 clientFilesExtension)的路径。默认情况下,这将解析为与元素名称相同的文件名,因此如果您的图像具有相同的名称,则无需实现此操作。
  • get_button_tooltip(options) 返回当鼠标悬停在此元素的按钮上时显示的工具提示。

以下是 pl-point 元素的示例定义:

class Point extends PLDrawingBaseElement {
  static generate(canvas, options, submittedAnswer) {
    let obj = new fabric.Circle(options);

    // Disable all of the fabric resizing and rotating buttons for this element
    obj.setControlVisible('bl', false);
    obj.setControlVisible('tl', false);
    obj.setControlVisible('br', false);
    obj.setControlVisible('tr', false);
    obj.setControlVisible('mt', false);
    obj.setControlVisible('mb', false);
    obj.setControlVisible('ml', false);
    obj.setControlVisible('mr', false);
    obj.setControlVisible('mtr', false);

    // Generate a numeric ID for this element if it does not have one yet.
    // Each element is identified by a unique ID, this is important for answer
    // submissions.
    if (!('id' in obj)) {
      obj.id = window.PLDrawingApi.generateID();
    }
    canvas.add(obj);

    // Selectable is automatically set to true if it is spawned with a button.
    // If the object is not selectable (i.e. it is static and part of the background),
    // then we do not need to register it with the submitted answer.
    if (options.selectable) {
      // Register the object with the submitted answer state
      submittedAnswer.registerAnswerObject(options, obj);
    }

    return obj;
  }

  static get_button_tooltip() {
    return 'Add point';
  }
}

此后,所有元素都必须显式注册到 pl-drawing 元素才能使用。这可以通过以下代码片段来实现:

// This should exactly match the folder in `elementExtensions/`
const my_extension_name = 'extension';
const my_extensions = {
  'pl-point': Point,
};
PLDrawingApi.registerElements(my_extension_name, my_extension);

JavaScript API

pl-drawing 元素具有一些预定义的辅助函数,可以通过 PLDrawingApi 进行访问。这里给出了其中的列表:

window.PLDrawingApi = {
    /**
     * Generates a new numeric ID for a submission object.
     * Each submitted object is uniquely identified by its ID.
     */
    generateID: function();

    /**
     * Register a dictionary of elements.  These should map element names
     * to a static class corresponding to the element itself.
     * @param extensionName Name of the extension/group of elements.
     * @param dictionary Dictionary of elements to register.
     */
    registerElements: function(extensionName, dictionary);

    /**
     * Generate an element from an options dictionary.
     * @param canvas Canvas to create the element on.
     * @param options Element options.  Must contain a 'type' key.
     * @param submittedAnswer Answer state object.
     */
    createElement: function(canvas, options, submittedAnswer);

    /**
     * Get an element definition by its name.
     * @param name Name of the element to look up.
     * @returns The element, if found.  Silently fails with the base element otherwise.
     */
    getElement: function(name);

    /**
     * Restore the drawing canvas state from a submitted answer.
     * @param canvas Canvas to restore state onto.
     * @param submittedAnswer Answer state to restore from.
     */
    restoreAnswer: function(canvas, submittedAnswer);

    /**
     * Main entrypoint for the drawing element.
     * Creates canvas at a given root element.
     * @param root_elem DIV that holds the canvas.
     * @param elem_options Any options to give to the element
     * @param existing_answer_submission Existing submission to place on the canvas.
     */
    setupCanvas: function(root_elem, elem_options, existing_answer_submission);
}

此处给出了答案绘图状态 (submittedAnswer) 的定义。在大多数情况下,仅需要 registerAnswerObject(),但如果您的对象足够复杂,则可以使用 updateObject()。 (有关示例,请参阅 mechanicsObjects.js 中的 pl-controlled-line。)

class PLDrawingAnswerState {
    /**
     * Update an object in the submitted answer state.
     * @param object Object to update.
     */
    updateObject(object);

    /**
     * Find an object by its ID.
     * @param id Numeric id to search by.
     * @returns The object, if found.  Null otherwise.
     */
    getObject(id);

    /**
     * Remove an object from the submitted answer.
     * @param object The object to delete, or its ID.
     */
    deleteObject(object);

    /**
     * Registers an object to save to the answer when modified.
     * This maintains a "submission" object that is separate from the canvas object.
     * By default, all properties from the canvas object are copied to the submission object.
     *
     * @options options Options that were passed to the 'generate()' function.
     * @options object Canvas object that was created and should be saved.
     * @modifyHandler {optional} Function that is run whenever the canvas object is modified.
     * This has the signature of (submitted_object, canvas_object).
     * Any properties that should be saved should be copied from canvas_object into
     * submitted_object.  If this is omitted, all properties from the canvas object
     * are copied as-is.
     * @removeHandler {optional} Function that is run whenever the canvas object is deleted.
     */
    registerAnswerObject(options, object, modifyHandler, removeHandler);
}

按钮图标

按钮图标应为 38px×38px .svg 文件,并放置在扩展程序的 clientFilesExtension 目录中。如果您没有安装 SVG 编辑器,Inkscape 可以产生合理的结果。

然后,可以通过在元素的 JavaScript 类中设置 get_button_icon() 函数将这些按钮图标附加到您的元素。该函数返回一个字符串,其中包含按钮图标的文件名_相对于clientFilesElement_。