diff --git a/src/Obj/Base/PolylineObject/_element.js b/src/Obj/Base/PolylineObject/_element.js
index c1356e5..17c8b9e 100644
--- a/src/Obj/Base/PolylineObject/_element.js
+++ b/src/Obj/Base/PolylineObject/_element.js
@@ -96,10 +96,9 @@ function html(that) {
diff --git a/src/Obj/Base/PolylineObject/index.js b/src/Obj/Base/PolylineObject/index.js
index 1f5d1f8..96c6f64 100644
--- a/src/Obj/Base/PolylineObject/index.js
+++ b/src/Obj/Base/PolylineObject/index.js
@@ -177,7 +177,8 @@ class PolylineObject extends Base {
}
set speed(v) {
- this.options.speed = v
+ // this.options.speed = v
+ this.options.speed = v !== 0 ? Math.pow(v, -1) * 100 : 0
this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, this.options)
}
get dashSize() {
@@ -1321,6 +1322,7 @@ class PolylineObject extends Base {
}
})
that.entity.polyline.oriWidth = that.options.width
+ that.judgeLine(that.entity, that.options)
that.sdk._entityZIndex++
PolylineObject.createLabel(that)
// that.entity.polyline.positionsLngLat = positions
@@ -1355,7 +1357,102 @@ class PolylineObject extends Base {
let scene = that.sdk.viewer.scene
}
+ judgeLine(entity, newParam) {
+ if (!entity.polyline.oriRepeat) {
+ let param = {
+ color: newParam.color,
+ image: this.getSourceRootPath() + `/img/arrow/1.png`,
+ space: newParam.space,
+ speed: newParam.speed
+ }
+ param.speed = newParam.rotate ? param.speed : 0 - param.speed
+
+ const canvasEle = document.createElement('canvas');
+ const ctx = canvasEle.getContext('2d')
+ const myImg = new Image()
+ // myImg.src = that.getSourceRootPath() + '/img/arrow/1.png'
+ myImg.src = param.image
+ let that = this
+ myImg.onload = function () {
+ canvasEle.width = myImg.width * (param.space + 1)
+ canvasEle.height = myImg.height
+
+ let oriRepeat = that.getSceenLine(entity, param, canvasEle)
+ oriRepeat && (entity.polyline.oriRepeat = oriRepeat)
+
+
+ var positionProperty = entity.polyline.positions;
+ var positions = positionProperty.getValue(that.sdk.viewer.clock.currentTime);
+
+ if (!Cesium.defined(positions)) {
+ return new Cesium.Cartesian2(1.0, 1.0);
+ // return 1.0;
+ }
+
+ var distance = 0;
+ for (var i = 0; i < positions.length - 1; ++i) {
+ distance += Cesium.Cartesian3.distance(positions[i], positions[i + 1]);
+ }
+
+ var repeatX = distance / entity.polyline.width.getValue();
+ // 根据地图缩放程度调整repeatX
+ var cameraHeight = that.sdk.viewer.camera.positionCartographic.height;
+ var boundingSphere = new Cesium.BoundingSphere(
+ new Cesium.Cartesian3(-1000000, 0, 0), // 中心点坐标
+ 500000 // 半径(距离)
+ );
+
+ // 获取绘图缓冲区的宽度和高度(通常是屏幕的分辨率)
+ var drawingBufferWidth = that.sdk.viewer.canvas.clientWidth;
+ var drawingBufferHeight = that.sdk.viewer.canvas.clientHeight;
+
+ // 使用 getPixelSize 方法获取包围球在屏幕上的像素大小
+ var groundResolution = that.sdk.viewer.scene.camera.getPixelSize(boundingSphere, drawingBufferWidth, drawingBufferHeight)
+ repeatX *= groundResolution / cameraHeight / (param.space * (canvasEle.width / canvasEle.height * 5) + 1);
+ // if (entity.polyline.material.oriRepeat) {
+ let speed = repeatX / entity.polyline.oriRepeat
+ entity.polyline.oriSpeed = speed
+ entity.polyline.oriRepeatX = repeatX
+ }
+
+
+
+
+ }
+ }
+ /**获取当前满屏横线速度 */
+ getSceenLine(entity, options, canvasEle) {
+ let point1 = new Cesium.Cartesian2(0, this.sdk.viewer.canvas.clientHeight)
+ let point2 = new Cesium.Cartesian2(this.sdk.viewer.canvas.clientWidth / 2, this.sdk.viewer.canvas.clientHeight)
+ var cartesian1 = this.sdk.viewer.scene.pickPosition(point1)
+ var cartesian2 = this.sdk.viewer.scene.pickPosition(point2)
+
+ var distance = Cesium.Cartesian3.distance(cartesian1, cartesian2);
+
+ var repeatX = distance / entity.polyline.width.getValue();
+ // 根据地图缩放程度调整repeatX
+ var cameraHeight = this.sdk.viewer.camera.positionCartographic.height;
+ var boundingSphere = new Cesium.BoundingSphere(
+ new Cesium.Cartesian3(-1000000, 0, 0), // 中心点坐标
+ 500000 // 半径(距离)
+ );
+
+ // 获取绘图缓冲区的宽度和高度(通常是屏幕的分辨率)
+ var drawingBufferWidth = this.sdk.viewer.canvas.clientWidth;
+ var drawingBufferHeight = this.sdk.viewer.canvas.clientHeight;
+
+ // 使用 getPixelSize 方法获取包围球在屏幕上的像素大小
+ var groundResolution = this.sdk.viewer.scene.camera.getPixelSize(boundingSphere, drawingBufferWidth, drawingBufferHeight)
+ // repeatX *= groundResolution / cameraHeight / ((myImg.width / myImg.height * 5) + 1);
+ if (groundResolution > 700) {
+ repeatX *= groundResolution / cameraHeight / (options.space * (canvasEle.width / canvasEle.height * 5) + 1);
+ } else {
+ repeatX = undefined;
+ }
+
+ return repeatX
+ }
/**
* 编辑框
* @param {boolean} state true打开,false关闭
diff --git a/src/Obj/Materail/FlowDashedLineFlowMaterialProperty.js b/src/Obj/Materail/FlowDashedLineFlowMaterialProperty.js
index 546cda6..dddc50f 100644
--- a/src/Obj/Materail/FlowDashedLineFlowMaterialProperty.js
+++ b/src/Obj/Materail/FlowDashedLineFlowMaterialProperty.js
@@ -10,12 +10,14 @@ function FlowDashedLine() {
this._uType = undefined;
this._space = undefined;
this._dashSize = undefined;
+ this._scale = undefined;
this.color = new Cesium.Color.fromCssColorString(options.color || "rgba(255,255,255,1)");
this.speed = options.speed != undefined ? options.speed : 1.0;//速度
this.space = options.space || 0.0;//速度
this.dashSize = options.dashSize || 0.03;//速度
this.uType = options.uType === undefined ? 1 : options.uType;//类型:0:普通流动线 1:虚化虚线
this.lineBackAlpha = options.lineBackAlpha || 0.05;
+ this.scale = options.scale || 1.0;
}
get isConstant() {
@@ -65,6 +67,12 @@ function FlowDashedLine() {
1,
result.uType
);
+ result.scale = Cesium.Property.getValueOrDefault(
+ this._scale,
+ time,
+ 1.0,
+ result.scale
+ );
result.lineBackAlpha = this.lineBackAlpha;
result.frameNumber = Cesium.getTimestamp();
return result;
@@ -77,7 +85,8 @@ function FlowDashedLine() {
Cesium.Property.equals(this._color, other._color) &&
Cesium.Property.equals(this._speed, other.speed) &&
Cesium.Property.equals(this._uType, other.uType) &&
- Cesium.Property.equals(this.lineBackAlpha, other.lineBackAlpha))
+ Cesium.Property.equals(this._lineBackAlpha, other.lineBackAlpha) &&
+ Cesium.Property.equals(this._scale, other.scale))
);
}
}
@@ -89,6 +98,7 @@ function FlowDashedLine() {
dashSize: Cesium.createPropertyDescriptor("dashSize"),
uType: Cesium.createPropertyDescriptor("uType"),
transparency: Cesium.createPropertyDescriptor("lineBackAlpha"),
+ scale: Cesium.createPropertyDescriptor("scale"),
});
Cesium.FlowDashedLineFlowMaterialProperty = FlowDashedLineFlowMaterialProperty;
@@ -108,7 +118,7 @@ function FlowDashedLine() {
float dashSize = 0.1;
float gapSize = space;
// speed现在表示完成一次完整动画循环的秒数
- float progress = speed==0.0 ? 0.0 : fract(frameNumber / 1000.0 / speed);
+ float progress = speed==0.0 ? 0.0 : fract(frameNumber / 1000.0 / speed * scale);
float pattern = fract(st.x / dashSize * (1.0 + gapSize) + progress / dashSize * (1.0 + gapSize));
float dash1 = step(0.0, pattern) - step(1.0/(1.0 + gapSize), pattern);
float dash2 = smoothstep(0.0, 0.2, pattern) -
@@ -131,6 +141,7 @@ function FlowDashedLine() {
color: new Cesium.Color(1.0, 1.0, 1.0, 1.0),
speed: 1,
space: 0.0,
+ scale: 1.0,
dashSize: 0.03,
frameNumber: Cesium.getTimestamp(),
uType: 1,
diff --git a/src/Tools/index.js b/src/Tools/index.js
index dc707b1..8fc5006 100644
--- a/src/Tools/index.js
+++ b/src/Tools/index.js
@@ -202,7 +202,7 @@ class Tools {
return length.toFixed(fractionDigits)
}
}
-
+
computeDistance2(positions = [], fractionDigits = 2, ground = true) {
if (positions.length < 2) {
return 0
@@ -586,6 +586,17 @@ class Tools {
getMaterial(color = '#2ab0c2', type = 0, entity = null, newParam = {}) {
let material = ''
+ let arr = {
+ '7': 10,
+ '8': 3,
+ '9': 4,
+ '10': 4,
+ '11': 4,
+ '12': 2
+ }
+ if (entity) {
+ arr[type + ''] ? (entity.polyline.width = entity.polyline.oriWidth + arr[type + '']) : (entity.polyline.width = entity.polyline.oriWidth)
+ }
switch (Number(type)) {
@@ -616,22 +627,48 @@ class Tools {
})
break
case 5: //普通流动虚线
- material = new Cesium.FlowDashedLineFlowMaterialProperty({
- color: color,
- uType: 0,
- speed: newParam.rotate ? newParam.speed : 0 - newParam.speed,
- // dashSize: newParam.dashSize,
- space: newParam.space
- })
- break
+ // material = new Cesium.FlowDashedLineFlowMaterialProperty({
+ // color: color,
+ // uType: 0,
+ // speed: newParam.rotate ? newParam.speed : 0 - newParam.speed,
+ // // dashSize: newParam.dashSize,
+ // space: newParam.space,
+ // scale: 1.0
+ // })
+ // break
case 6: //流动虚线2
+ let that = this
+
material = new Cesium.FlowDashedLineFlowMaterialProperty({
color: color,
- uType: 1,
+ uType: type == 5 ? 0 : 1,
speed: newParam.rotate ? newParam.speed : 0 - newParam.speed,
// dashSize: newParam.dashSize,
- space: newParam.space
+ space: newParam.space,
+ scale: new Cesium.CallbackProperty(function () {
+ var oriPositions = entity.polyline.positions.getValue();
+
+ if (!Cesium.defined(oriPositions)) {
+ return 1.0;
+ }
+ var distance = 0;
+ for (var i = 0; i < oriPositions.length - 1; ++i) {
+ distance += Cesium.Cartesian3.distance(oriPositions[i], oriPositions[i + 1]);
+ }
+ //屏幕坐标
+ let point1 = new Cesium.Cartesian2(0, that.sdk.viewer.canvas.clientHeight)
+ let point2 = new Cesium.Cartesian2(that.sdk.viewer.canvas.clientWidth / 2, that.sdk.viewer.canvas.clientHeight)
+ var cartesian1 = that.sdk.viewer.scene.pickPosition(point1)
+ var cartesian2 = that.sdk.viewer.scene.pickPosition(point2)
+
+ var distance2 = Cesium.Cartesian3.distance(cartesian1, cartesian2);
+
+ let repeatX = distance2 * 2 / distance
+
+ return repeatX;
+ })
})
+
break
case 7: //流动箭头1
case 8: //流动箭头2
@@ -645,17 +682,8 @@ class Tools {
space: newParam.space,
speed: newParam.speed
}
- let arr = {
- '7': 10,
- '8': 3,
- '9': 4,
- '10': 4,
- '11': 4,
- '12': 2
- }
+
param.speed = newParam.rotate ? param.speed : 0 - param.speed
- console.log(entity.polyline.oriWidth, arr[type + ''], type, 'oriWidth')
- entity.polyline.width = entity.polyline.oriWidth + arr[type + '']
this.getFlowTexture(this, param, entity)
@@ -666,6 +694,7 @@ class Tools {
}
return material
}
+
getFlowTexture(that, options, entity) {
const canvasEle = document.createElement('canvas');
@@ -693,17 +722,15 @@ class Tools {
// let repeat = getRepeat()
// }, false)
- entity.polyline.material.oriRepeat = undefined
- entity.polyline.material.oriSpeed = undefined
+ // entity.polyline.material.oriRepeat = that.getSceenLine(entity, options, canvasEle)
+ // entity.polyline.material.oriSpeed = undefined
+ let beforeSpeed = 0, repeat = 0
entity.polyline.material = new Cesium.LineTextureMaterialProperty(
{
color: options.color,
- // image: options.image,
image: canvasEle,
speed: options.speed,
- // repeat: repeat
repeat: new Cesium.CallbackProperty(function () {
- // function getRepeat() {
var positionProperty = entity.polyline.positions;
var positions = positionProperty.getValue(that.sdk.viewer.clock.currentTime);
@@ -731,25 +758,64 @@ class Tools {
// 使用 getPixelSize 方法获取包围球在屏幕上的像素大小
var groundResolution = that.sdk.viewer.scene.camera.getPixelSize(boundingSphere, drawingBufferWidth, drawingBufferHeight)
- // repeatX *= groundResolution / cameraHeight / ((myImg.width / myImg.height * 5) + 1);
- repeatX *= groundResolution / cameraHeight / (options.space * (canvasEle.width / canvasEle.height * 5) + 1);
- let speed
- if (entity.polyline.material.oriRepeat) {
- speed = repeatX / entity.polyline.material.oriRepeat
+ let result
+ if (groundResolution > 700) {
+ repeatX *= groundResolution / cameraHeight / (options.space * (canvasEle.width / canvasEle.height * 5) + 1);
+ // if (entity.polyline.material.oriRepeat) {
+ let speed = repeatX / entity.polyline.oriRepeat
+ entity.polyline.oriSpeed = speed
+ entity.polyline.oriRepeatX = repeatX
+ // } else {
+ // entity.polyline.material.oriRepeat = repeatX
+ // }
+ beforeSpeed = speed
+ repeat = repeatX
+ result = new Cesium.Cartesian2(repeatX, speed || 1.0)
} else {
- entity.polyline.material.oriRepeat = repeatX
+ result = new Cesium.Cartesian2(repeat || entity.polyline.oriRepeatX, beforeSpeed || entity.polyline.oriSpeed)
}
- // if (repeatX < 3) {
- // repeatX = 3
- // }
- return new Cesium.Cartesian2(repeatX, speed || 1.0);
+
+ return result;
// return repeatX;
})
}
)
- entity.polyline.material.oriSpeed = options.speed
+ let oriRepeat = that.getSceenLine(entity, options, canvasEle)
+ oriRepeat && (entity.polyline.oriRepeat = oriRepeat)
}
}
+ /**获取当前满屏横线速度 */
+ getSceenLine(entity, options, canvasEle) {
+ let point1 = new Cesium.Cartesian2(0, this.sdk.viewer.canvas.clientHeight)
+ let point2 = new Cesium.Cartesian2(this.sdk.viewer.canvas.clientWidth / 2, this.sdk.viewer.canvas.clientHeight)
+ var cartesian1 = this.sdk.viewer.scene.pickPosition(point1)
+ var cartesian2 = this.sdk.viewer.scene.pickPosition(point2)
+
+ var distance = Cesium.Cartesian3.distance(cartesian1, cartesian2);
+
+ var repeatX = distance / entity.polyline.width.getValue();
+ // 根据地图缩放程度调整repeatX
+ var cameraHeight = this.sdk.viewer.camera.positionCartographic.height;
+ var boundingSphere = new Cesium.BoundingSphere(
+ new Cesium.Cartesian3(-1000000, 0, 0), // 中心点坐标
+ 500000 // 半径(距离)
+ );
+
+ // 获取绘图缓冲区的宽度和高度(通常是屏幕的分辨率)
+ var drawingBufferWidth = this.sdk.viewer.canvas.clientWidth;
+ var drawingBufferHeight = this.sdk.viewer.canvas.clientHeight;
+
+ // 使用 getPixelSize 方法获取包围球在屏幕上的像素大小
+ var groundResolution = this.sdk.viewer.scene.camera.getPixelSize(boundingSphere, drawingBufferWidth, drawingBufferHeight)
+ // repeatX *= groundResolution / cameraHeight / ((myImg.width / myImg.height * 5) + 1);
+ if (groundResolution > 700) {
+ repeatX *= groundResolution / cameraHeight / (options.space * (canvasEle.width / canvasEle.height * 5) + 1);
+ } else {
+ repeatX = undefined;
+ }
+
+ return repeatX
+ }
/*创建直箭头图片*/
create_arrow1_picture(color) {
diff --git a/static/custom/css/index.css b/static/custom/css/index.css
index 86b9b1c..1ce7a5d 100644
--- a/static/custom/css/index.css
+++ b/static/custom/css/index.css
@@ -1674,7 +1674,7 @@
.YJ-custom-base-dialog>.content .cy_datalist dl dd.active {
color: rgba(var(--color-sdk-base-rgb)) !important;
- background-color: rgba(var(--color-sdk-base-rgb), 0.2);
+ /* background-color: rgba(var(--color-sdk-base-rgb), 0.2); */
}
.YJ-custom-base-dialog>.content .cy_datalist dl dd.active svg {
@@ -2714,6 +2714,122 @@
max-height: 185px;
}
+.YJ-custom-base-dialog.polyline>.content>div .input-select-unit-box textarea {
+ border-radius: unset!important;
+}
+
+.YJ-custom-base-dialog.polyline>.content>div .input-select-unit .datalist {
+ background-color:rgba(var(--color-sdk-base-rgb), 0.1)!important;
+ border-radius: 4px 0px 0px 4px !important;
+}
+.YJ-custom-base-dialog.polyline>.content>div .input-select-unit:nth-of-type(1) .datalist {
+ background-color:rgba(var(--color-sdk-base-rgb), 0.1)!important;
+ border-radius: 4px 0px, 0px, 4px!important;
+}
+.YJ-custom-base-dialog.polyline>.content>div .input-select-unit:nth-of-type(2) .datalist {
+ background-color:rgba(var(--color-sdk-base-rgb), 0.1)!important;
+ border-radius: 0px 4px 4px 0px!important;
+}
+
+.YJ-custom-base-dialog.polyline>.content>div .input-select-unit:nth-of-type(1) input {
+ border: 1px solid rgba(var(--color-sdk-base-rgb), 0.5)!important;
+}
+.YJ-custom-base-dialog.polyline>.content>div .input-select-unit:nth-of-type(2) input {
+ border: 1px solid rgba(var(--color-sdk-base-rgb), 0.5)!important;
+}
+
+.YJ-custom-base-dialog.polyline>.content input.input-text{
+ background-color: rgba(0, 0, 0, 0.5)!important;
+ border-radius: unset!important;
+ border-top: 1px solid rgba(var(--color-sdk-base-rgb), 0.5)!important;
+ border-bottom: 1px solid rgba(var(--color-sdk-base-rgb), 0.5) !important;
+}
+
+.YJ-custom-base-dialog.polyline>.content>div .input-select-line-type-box .cy_datalist input {
+ padding-left: 35px;
+}
+
+.YJ-custom-base-dialog.polyline>.content>div .input-select-line-type-box .icon-active {
+ position: absolute;
+ top: 11px;
+ left: 10px;
+ -webkit-pointer-events: none;
+ -moz-pointer-events: none;
+ -ms-pointer-events: none;
+ -o-pointer-events: none;
+ pointer-events: none;
+}
+
+.YJ-custom-base-dialog.polyline>.content>div .input-select-line-type-box .cy_datalist i.icon {
+ display: inline-block;
+ width: 22px;
+ height: 13px;
+ margin-right: 7px;
+}
+.YJ-custom-base-dialog.polyline>.content>div .input-select-line-type-box .cy_datalist i.line {
+ border: 1px solid rgba(var(--color-sdk-base-rgb), 1);
+ height: 0px;
+ margin-top: 4px;
+}
+.YJ-custom-base-dialog.polyline>.content>div .input-select-line-type-box .cy_datalist i.dash-line {
+ border: 1px dashed rgba(var(--color-sdk-base-rgb), 1);
+ height: 0px;
+ margin-top: 4px;
+}
+.YJ-custom-base-dialog.polyline>.content>div .input-select-line-type-box .cy_datalist i.light-line {
+ border: 1px solid rgba(var(--color-sdk-base-rgb), 1);
+ height: 0px;
+ margin-top: 4px;
+ box-shadow: 0 0 3px #fff
+}
+.YJ-custom-base-dialog.polyline>.content>div .input-select-line-type-box .cy_datalist i.tail-line {
+ background: url(../../img/arrow/tail.png) 100% 100% no-repeat;
+ background-size: 100% 100%;
+}
+.YJ-custom-base-dialog.polyline>.content>div .input-select-line-type-box .cy_datalist i.mult-tail-line {
+ background: url(../../img/arrow/tail.png) 100% 100% no-repeat;
+ background-size: 100% 100%;
+}
+.YJ-custom-base-dialog.polyline>.content>div .input-select-line-type-box .cy_datalist i.flow-dash-line1 {
+ border: 1px dashed rgba(var(--color-sdk-base-rgb), 1);
+ height: 0px;
+ margin-top: 4px;
+}
+.YJ-custom-base-dialog.polyline>.content>div .input-select-line-type-box .cy_datalist i.flow-dash-line2 {
+ border: 1px dashed rgba(var(--color-sdk-base-rgb), 1);
+ height: 0px;
+ margin-top: 4px;
+}
+.YJ-custom-base-dialog.polyline>.content>div .input-select-line-type-box .cy_datalist i.pic-line1 {
+ background: url(../../img/arrow/1.png);
+ background-size: cover;
+ background-position: center;
+}
+.YJ-custom-base-dialog.polyline>.content>div .input-select-line-type-box .cy_datalist i.pic-line2 {
+ background: url(../../img/arrow/2.png);
+ background-size: cover;
+ background-position: center;
+}
+.YJ-custom-base-dialog.polyline>.content>div .input-select-line-type-box .cy_datalist i.pic-line3 {
+ background: url(../../img/arrow/3.png);
+ background-size: cover;
+ background-position: center;
+}
+.YJ-custom-base-dialog.polyline>.content>div .input-select-line-type-box .cy_datalist i.pic-line4 {
+ background: url(../../img/arrow/4.png) ;
+ background-size: cover;
+ background-position: center;
+}
+.YJ-custom-base-dialog.polyline>.content>div .input-select-line-type-box .cy_datalist i.pic-line5 {
+ background: url(../../img/arrow/5.png);
+ background-size: cover;
+ background-position: center;
+}
+.YJ-custom-base-dialog.polyline>.content>div .input-select-line-type-box .cy_datalist i.pic-line6 {
+ background: url(../../img/arrow/6.png) 100% 100% no-repeat;
+ background-size: 100% 100%;
+}
+
/* 贴地图片 */
.YJ-custom-base-dialog.ground-image>.content {
width: 500px;
diff --git a/static/img/arrow/1.png b/static/img/arrow/1.png
index 62d84a0..0a4a5ae 100644
Binary files a/static/img/arrow/1.png and b/static/img/arrow/1.png differ
diff --git a/static/img/arrow/11.png b/static/img/arrow/11.png
deleted file mode 100644
index 650bc1f..0000000
Binary files a/static/img/arrow/11.png and /dev/null differ
diff --git a/static/img/arrow/2.png b/static/img/arrow/2.png
index b20bf3f..3e8967e 100644
Binary files a/static/img/arrow/2.png and b/static/img/arrow/2.png differ
diff --git a/static/img/arrow/222 (2).png b/static/img/arrow/222 (2).png
new file mode 100644
index 0000000..b20bf3f
Binary files /dev/null and b/static/img/arrow/222 (2).png differ
diff --git a/static/img/arrow/222.png b/static/img/arrow/222.png
deleted file mode 100644
index a92774d..0000000
Binary files a/static/img/arrow/222.png and /dev/null differ
diff --git a/static/img/arrow/3.png b/static/img/arrow/3.png
index 7da948e..01d363e 100644
Binary files a/static/img/arrow/3.png and b/static/img/arrow/3.png differ
diff --git a/static/img/arrow/33.png b/static/img/arrow/33.png
deleted file mode 100644
index ffd053d..0000000
Binary files a/static/img/arrow/33.png and /dev/null differ
diff --git a/static/img/arrow/333.png b/static/img/arrow/333.png
new file mode 100644
index 0000000..7da948e
Binary files /dev/null and b/static/img/arrow/333.png differ
diff --git a/static/img/arrow/4.png b/static/img/arrow/4.png
index 935d8ab..f126d66 100644
Binary files a/static/img/arrow/4.png and b/static/img/arrow/4.png differ
diff --git a/static/img/arrow/44.png b/static/img/arrow/44.png
deleted file mode 100644
index b3cbe70..0000000
Binary files a/static/img/arrow/44.png and /dev/null differ
diff --git a/static/img/arrow/444.png b/static/img/arrow/444.png
new file mode 100644
index 0000000..935d8ab
Binary files /dev/null and b/static/img/arrow/444.png differ
diff --git a/static/img/arrow/5.png b/static/img/arrow/5.png
index bd1fa7f..da51e98 100644
Binary files a/static/img/arrow/5.png and b/static/img/arrow/5.png differ
diff --git a/static/img/arrow/55.png b/static/img/arrow/55.png
deleted file mode 100644
index 374af4a..0000000
Binary files a/static/img/arrow/55.png and /dev/null differ
diff --git a/static/img/arrow/555.png b/static/img/arrow/555.png
new file mode 100644
index 0000000..bd1fa7f
Binary files /dev/null and b/static/img/arrow/555.png differ
diff --git a/static/img/arrow/6.png b/static/img/arrow/6.png
index 7eb7923..bda2525 100644
Binary files a/static/img/arrow/6.png and b/static/img/arrow/6.png differ
diff --git a/static/img/arrow/666.png b/static/img/arrow/666.png
new file mode 100644
index 0000000..7eb7923
Binary files /dev/null and b/static/img/arrow/666.png differ
diff --git a/static/img/arrow/分组 79.png b/static/img/arrow/分组 79.png
new file mode 100644
index 0000000..6651e8f
Binary files /dev/null and b/static/img/arrow/分组 79.png differ