fl-web-component 0.1.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/README.md +35 -24
  2. package/dist/fl-web-component.common.js +27308 -65
  3. package/dist/fl-web-component.common.js.map +1 -1
  4. package/dist/fl-web-component.css +1 -1
  5. package/dist/fl-web-component.umd.js +27308 -65
  6. package/dist/fl-web-component.umd.js.map +1 -1
  7. package/dist/fl-web-component.umd.min.js +13 -1
  8. package/dist/fl-web-component.umd.min.js.map +1 -1
  9. package/package.json +80 -47
  10. package/packages/components/button/index.vue +16 -12
  11. package/packages/components/com-card/card-page.vue +102 -0
  12. package/packages/components/com-card/index.vue +53 -0
  13. package/packages/components/com-dialogWrapper/Readme.md +53 -0
  14. package/packages/components/com-dialogWrapper/index.vue +98 -0
  15. package/packages/components/com-flcanvas/components/bspline.js +91 -0
  16. package/packages/components/com-flcanvas/components/entityFormatting.js +503 -0
  17. package/packages/components/com-flcanvas/components/round10.js +24 -0
  18. package/packages/components/com-flcanvas/index.vue +259 -0
  19. package/packages/components/com-formDialog/Readme.md +409 -0
  20. package/packages/components/com-formDialog/index.vue +471 -0
  21. package/packages/components/com-graphics/index.vue +1073 -0
  22. package/packages/components/com-graphics/per-control.vue +109 -0
  23. package/packages/components/com-graphics/pid.vue +168 -0
  24. package/packages/components/com-page/index.vue +101 -0
  25. package/packages/components/com-selectTree/Readme.md +17 -0
  26. package/packages/components/com-selectTree/index.vue +236 -0
  27. package/packages/components/com-table/column-default.vue +71 -0
  28. package/packages/components/com-table/column-dynamic.vue +36 -0
  29. package/packages/components/com-table/column-menu.vue +71 -0
  30. package/packages/components/com-table/column-slot.vue +53 -0
  31. package/packages/components/com-table/column.vue +41 -0
  32. package/packages/components/com-table/config.js +21 -0
  33. package/packages/components/com-table/index.vue +281 -0
  34. package/packages/components/com-table/table-page.vue +106 -0
  35. package/packages/components/com-tabs/index.vue +50 -0
  36. package/packages/components/com-treeDynamic/Readme.md +271 -0
  37. package/packages/components/com-treeDynamic/index.vue +207 -0
  38. package/packages/components/model/api/index.js +59 -67
  39. package/packages/components/model/api/mock/detecttree.js +38 -38
  40. package/packages/components/model/api/mock/getmodel-line.js +15830 -79332
  41. package/packages/components/model/api/mock/init.js +1 -1
  42. package/packages/components/model/api/mock/pbstree.js +486 -495
  43. package/packages/components/model/components/TextOverTooltip/index.vue +3 -3
  44. package/packages/components/model/components/annotation-toolbar.vue +4 -19
  45. package/packages/components/model/components/check-proofing-model.vue +26 -29
  46. package/packages/components/model/components/clipping-type.vue +22 -14
  47. package/packages/components/model/components/com-dialogWrapper/index.vue +22 -25
  48. package/packages/components/model/components/detect-panel.vue +38 -26
  49. package/packages/components/model/components/detect-tree.vue +9 -24
  50. package/packages/components/model/components/firstPer-panel.vue +23 -25
  51. package/packages/components/model/components/header-button.vue +31 -107
  52. package/packages/components/model/components/imageViewer/index.vue +34 -35
  53. package/packages/components/model/components/import-model.vue +127 -127
  54. package/packages/components/model/components/location-panel.vue +25 -29
  55. package/packages/components/model/components/measure-type.vue +15 -15
  56. package/packages/components/model/components/pbs-tree.vue +139 -144
  57. package/packages/components/model/components/proof-config.vue +2 -10
  58. package/packages/components/model/components/proof-for-pc.vue +35 -32
  59. package/packages/components/model/components/proof-history.vue +136 -154
  60. package/packages/components/model/components/proof-panel-detail.vue +166 -165
  61. package/packages/components/model/components/proof-panel.vue +281 -205
  62. package/packages/components/model/components/proof-project-user.vue +13 -50
  63. package/packages/components/model/components/proof-publish.vue +130 -130
  64. package/packages/components/model/components/proof-role.vue +93 -124
  65. package/packages/components/model/components/props-panel.vue +63 -54
  66. package/packages/components/model/index.vue +3225 -3213
  67. package/packages/components/model/utils/annotation-tool.js +75 -82
  68. package/packages/components/model/utils/cursor.js +15 -10
  69. package/packages/components/model/utils/detect-v1.js +23 -35
  70. package/packages/components/model/utils/index.js +25 -25
  71. package/packages/components/model/utils/threejs/measure-angle.js +180 -180
  72. package/packages/components/model/utils/threejs/measure-area.js +196 -184
  73. package/packages/components/model/utils/threejs/measure-distance.js +154 -152
  74. package/packages/components/model/utils/threejs/measure-volume.js +64 -61
  75. package/patches/camera-controls+2.9.0.patch +63 -0
  76. package/src/assets/test.png +0 -0
  77. package/src/assets/worker.glb +0 -0
  78. package/src/main.js +27 -0
  79. package/src/utils/flgltf-parser.js +141 -0
  80. package/src/utils/instance-parser.js +402 -0
  81. package/src/utils/mock.js +84746 -0
  82. package/src/utils/threejs/measure-angle.js +240 -0
  83. package/src/utils/threejs/measure-area.js +249 -0
  84. package/src/utils/threejs/measure-distance.js +195 -0
  85. package/packages/index.js +0 -24
package/package.json CHANGED
@@ -1,47 +1,80 @@
1
- {
2
- "name": "fl-web-component",
3
- "version": "0.1.0",
4
- "scripts": {
5
- "dev": "vue-cli-service serve",
6
- "lint": "vue-cli-service lint",
7
- "build": "vue-cli-service build --target lib --name fl-web-component ./packages/index.js",
8
- "release": "bumpp && npm publish"
9
- },
10
- "files": [
11
- "dist",
12
- "packages"
13
- ],
14
- "main": "dist/fl-web-component.common.js",
15
- "dependencies": {
16
- "core-js": "^3.6.5",
17
- "vue": "^2.6.11"
18
- },
19
- "devDependencies": {
20
- "@vue/cli-plugin-babel": "~4.4.0",
21
- "@vue/cli-plugin-eslint": "~4.4.0",
22
- "@vue/cli-service": "~4.4.0",
23
- "babel-eslint": "^10.1.0",
24
- "eslint": "^6.7.2",
25
- "eslint-plugin-vue": "^6.2.2",
26
- "vue-template-compiler": "^2.6.11"
27
- },
28
- "eslintConfig": {
29
- "root": true,
30
- "env": {
31
- "node": true
32
- },
33
- "extends": [
34
- "plugin:vue/essential",
35
- "eslint:recommended"
36
- ],
37
- "parserOptions": {
38
- "parser": "babel-eslint"
39
- },
40
- "rules": {}
41
- },
42
- "browserslist": [
43
- "> 1%",
44
- "last 2 versions",
45
- "not dead"
46
- ]
47
- }
1
+ {
2
+ "name": "fl-web-component",
3
+ "version": "1.0.0",
4
+ "scripts": {
5
+ "dev": "vue-cli-service serve",
6
+ "lint": "eslint \"{src,packages}/**/*.{vue,js}\" --fix",
7
+ "prettier": "prettier --write \"packages/**/*.{js,css,less,scss,vue,html}\"",
8
+ "watch": "npm run lint && vue-cli-service build --watch --mode production --target lib --name fl-web-component ./src/main.js",
9
+ "build": "npm run lint && vue-cli-service build --target lib --name fl-web-component ./src/main.js"
10
+ },
11
+ "files": [
12
+ "dist",
13
+ "packages",
14
+ "src",
15
+ "patches"
16
+ ],
17
+ "main": "dist/fl-web-component.common.js",
18
+ "dependencies": {
19
+ "camera-controls": "^2.9.0",
20
+ "core-js": "^3.6.5",
21
+ "element-ui": "2.15.14",
22
+ "html2canvas": "^1.4.1",
23
+ "konva": "^9.3.14",
24
+ "lodash": "^4.17.21",
25
+ "meshline": "^3.3.1",
26
+ "three": "^0.176.0",
27
+ "three.path": "^1.0.1",
28
+ "vue": "^2.6.11"
29
+ },
30
+ "devDependencies": {
31
+ "@babel/core": "^7.12.16",
32
+ "@babel/plugin-proposal-class-properties": "^7.0.0",
33
+ "@babel/plugin-proposal-decorators": "^7.0.0",
34
+ "@babel/plugin-proposal-export-namespace-from": "^7.0.0",
35
+ "@babel/plugin-proposal-function-sent": "^7.0.0",
36
+ "@babel/plugin-proposal-json-strings": "^7.0.0",
37
+ "@babel/plugin-proposal-numeric-separator": "^7.0.0",
38
+ "@babel/plugin-proposal-object-rest-spread": "^7.0.0",
39
+ "@babel/plugin-proposal-optional-chaining": "^7.17.12",
40
+ "@babel/plugin-proposal-throw-expressions": "^7.0.0",
41
+ "@babel/plugin-syntax-dynamic-import": "^7.0.0",
42
+ "@babel/plugin-syntax-import-meta": "^7.0.0",
43
+ "@babel/plugin-syntax-jsx": "^7.17.12",
44
+ "@babel/plugin-transform-object-rest-spread": "^7.25.9",
45
+ "@babel/plugin-transform-runtime": "^7.0.0",
46
+ "@babel/preset-env": "^7.0.0",
47
+ "@babel/runtime-corejs2": "^7.18.3",
48
+ "@vue/cli-plugin-babel": "~4.4.0",
49
+ "@vue/cli-plugin-eslint": "~4.4.0",
50
+ "@vue/cli-service": "~4.4.0",
51
+ "babel-eslint": "^10.1.0",
52
+ "babel-loader": "^8.0.0",
53
+ "copy-webpack-plugin": "^4.0.1",
54
+ "eslint": "^6.7.2",
55
+ "eslint-plugin-vue": "^6.2.2",
56
+ "patch-package": "^6.4.7",
57
+ "sass": "1.32.13",
58
+ "sass-loader": "10.1.1",
59
+ "vue-template-compiler": "^2.6.11"
60
+ },
61
+ "eslintConfig": {
62
+ "root": true,
63
+ "env": {
64
+ "node": true
65
+ },
66
+ "extends": [
67
+ "plugin:vue/essential",
68
+ "eslint:recommended"
69
+ ],
70
+ "parserOptions": {
71
+ "parser": "babel-eslint"
72
+ },
73
+ "rules": {}
74
+ },
75
+ "browserslist": [
76
+ "> 1%",
77
+ "last 2 versions",
78
+ "not dead"
79
+ ]
80
+ }
@@ -1,22 +1,26 @@
1
1
  <template>
2
+ <div>
2
3
  <button class="my-button" @click="handleClick">
3
- {{ text }}
4
+ {{ text }}
4
5
  </button>
6
+ </div>
5
7
  </template>
6
8
  <script>
7
9
  export default {
8
- name: 'MyButton',
9
- props: {
10
- text: { type: String, default: 'Click Me' }
10
+ name: 'MyButton',
11
+ props: {
12
+ text: { type: String, default: 'Click Me' },
13
+ },
14
+ methods: {
15
+ handleClick() {
16
+ this.$emit('click');
11
17
  },
12
- methods: {
13
- handleClick() { this.$emit('click'); }
14
- }
15
- }
18
+ },
19
+ };
16
20
  </script>
17
- <style scoped>
21
+ <style lang="scss" scoped>
18
22
  .my-button {
19
- padding: 8px 16px;
20
- background: #42b983;
23
+ padding: 8px 16px;
24
+ background: #42b983;
21
25
  }
22
- </style>
26
+ </style>
@@ -0,0 +1,102 @@
1
+ <template>
2
+ <el-pagination
3
+ v-if="pageFlag"
4
+ :small="comCard.size == 'mini'"
5
+ :disabled="defaultPage.disabled"
6
+ :hide-on-single-page="defaultPage.single"
7
+ :pager-count="defaultPage.pagerCount"
8
+ :current-page.sync="defaultPage.currentPage"
9
+ :background="defaultPage.background"
10
+ :page-size="defaultPage.pageSize"
11
+ :page-sizes="defaultPage.pageSizes"
12
+ @size-change="sizeChange"
13
+ @prev-click="prevClick"
14
+ @next-click="nextClick"
15
+ @current-change="currentChange"
16
+ :layout="defaultPage.layout"
17
+ :total="defaultPage.total"
18
+ ></el-pagination>
19
+ </template>
20
+
21
+ <script>
22
+ // import base from "../../utils/base.js";
23
+
24
+ export default {
25
+ name: 'comCard',
26
+ inject: ['comCard'],
27
+ // mixins: [base()],
28
+ data() {
29
+ return {
30
+ defaultPage: {
31
+ single: false,
32
+ total: 0, // 总页数
33
+ pagerCount: 7, //超过多少条隐藏
34
+ currentPage: 1, // 当前页数
35
+ pageSize: 10, // 每页显示多少条
36
+ pageSizes: [10, 20, 30, 40, 50, 100],
37
+ layout: 'total, sizes, prev, pager, next, jumper',
38
+ background: true, // 背景颜色
39
+ },
40
+ };
41
+ },
42
+ created() {
43
+ this.pageInit();
44
+ this.comCard.$emit('on-load', this.defaultPage);
45
+ },
46
+ watch: {
47
+ 'comCard.page': {
48
+ handler() {
49
+ this.pageInit();
50
+ },
51
+ deep: true,
52
+ },
53
+ },
54
+ computed: {
55
+ pageFlag() {
56
+ return this.defaultPage.total != 0;
57
+ },
58
+ },
59
+ methods: {
60
+ pageInit() {
61
+ this.defaultPage = Object.assign(this.defaultPage, this.comCard.page);
62
+ this.updateValue();
63
+ },
64
+ updateValue() {
65
+ console.log('updateValue defaultPage', this.defaultPage);
66
+ this.comCard.$emit('update:page', this.defaultPage);
67
+ },
68
+ //下一页事件
69
+ nextClick(val) {
70
+ console.log('nextClick', val);
71
+ this.comCard.$emit('next-click', val);
72
+ },
73
+ //上一页事件
74
+ prevClick(val) {
75
+ console.log('prevClick', val);
76
+ this.comCard.$emit('prev-click', val);
77
+ },
78
+ // 页大小回调
79
+ sizeChange(val) {
80
+ this.defaultPage.currentPage = 1;
81
+ this.defaultPage.pageSize = val;
82
+ this.updateValue();
83
+ console.log('sizeChange', val);
84
+ this.comCard.$emit('on-load', this.defaultPage);
85
+ this.comCard.$emit('size-change', val);
86
+ },
87
+ // 页码回调
88
+ currentChange(val) {
89
+ this.updateValue();
90
+ this.comCard.$emit('on-load', this.defaultPage);
91
+ this.comCard.$emit('current-change', val);
92
+ },
93
+ },
94
+ };
95
+ </script>
96
+
97
+ <style lang="scss" scoped>
98
+ .el-pagination {
99
+ text-align: right;
100
+ padding: 15px 10px 15px 20px !important;
101
+ }
102
+ </style>
@@ -0,0 +1,53 @@
1
+ <template>
2
+ <div class="card-container">
3
+ <!-- 列表区域-->
4
+ <div class="card-list">
5
+ <el-card
6
+ v-loading="loading"
7
+ class="card"
8
+ v-for="(item, index) in data"
9
+ :key="index"
10
+ :body-style="{ padding: '0px' }"
11
+ >
12
+ <slot :data="item"></slot>
13
+ </el-card>
14
+ </div>
15
+ <!-- 分页区域 -->
16
+ <card-page ref="cardPage"> </card-page>
17
+ </div>
18
+ </template>
19
+
20
+ <script>
21
+ import CardPage from './card-page';
22
+
23
+ export default {
24
+ name: 'comCard',
25
+ provide() {
26
+ return {
27
+ comCard: this,
28
+ };
29
+ },
30
+ components: {
31
+ CardPage, //分页
32
+ },
33
+ props: {
34
+ data: {
35
+ type: Array,
36
+ default: () => [],
37
+ require: true,
38
+ },
39
+ loading: {
40
+ type: Boolean,
41
+ default: false,
42
+ },
43
+ page: {
44
+ type: Object,
45
+ default() {
46
+ return {};
47
+ },
48
+ },
49
+ },
50
+ };
51
+ </script>
52
+
53
+ <style></style>
@@ -0,0 +1,53 @@
1
+ <!-- 使用方法 样例 -->
2
+ <template>
3
+ <div class="trigger_dialog">
4
+ <!-- 触发弹窗操作 -->
5
+ <el-button type="primary" @click="dialogVisible = true">触发对话框</el-button>
6
+ <!-- 弹窗组件 -->
7
+ <DialogWrapper
8
+ v-if="dialogVisible"
9
+ dialog-title="触发对话框"
10
+ :visible.sync="dialogVisible"
11
+ :popup-width="'35%'"
12
+ @handleClose="handleClose"
13
+ @submitDialogData="submitDialogData"
14
+ >
15
+ 弹窗内容
16
+ </DialogWrapper>
17
+ </div>
18
+ </template>
19
+
20
+ <script>
21
+ export default {
22
+ components: {
23
+ // 弹窗引入,如注册全局组件则克直接使用
24
+ DialogWrapper: () => import('./DialogWrapper.vue')
25
+ },
26
+ props: {},
27
+ data() {
28
+ return {
29
+ dialogVisible: false // 弹框状态
30
+ }
31
+ },
32
+ computed: { },
33
+ watch: {},
34
+ created() {},
35
+ mounted() {},
36
+ methods: {
37
+ /* 弹窗 修改是否让页面显示与隐藏的事件 */
38
+ updateVisible(val) {
39
+ this.dialogVisible = val
40
+ },
41
+ /* 弹窗 确认 操作 */
42
+ submitDialogData() {
43
+ this.dialogVisible = false
44
+ },
45
+ /* 弹窗 关闭 操作 */
46
+ handleClose() {
47
+ this.dialogVisible = false
48
+ }
49
+ }
50
+ }
51
+ </script>
52
+ <style lang="scss" scoped>
53
+ </style>
@@ -0,0 +1,98 @@
1
+ <!--
2
+ * @Author: fengyang9326@163.com
3
+ * @Date: 2024-05-13 10:36:07
4
+ * @LastEditors: fengyang9326@163.com
5
+ * @LastEditTime: 2024-05-20 09:34:46
6
+ * @FilePath: /web/components/com-dialogWrapper/index.vue
7
+ * @Description: 弹窗封装
8
+ -->
9
+ <template>
10
+ <el-dialog
11
+ :visible.sync="dialogVisible"
12
+ :title="dialogTitle"
13
+ :fullscreen="dialogFullScreen"
14
+ :close-on-click-modal="false"
15
+ :before-close="handleClose"
16
+ :width="popupWidth"
17
+ append-to-body
18
+ >
19
+ <!-- 弹窗title -->
20
+ <template slot="title">
21
+ <div class="custom_dialog_header">
22
+ <span class="el_dialog_title">{{ dialogTitle }}</span>
23
+ <div class="custom_dialog_menu" @click="dialogFullScreen = !dialogFullScreen">
24
+ <svg-icon :icon-class="dialogFullScreen ? 'exit-fullscreen' : 'fullscreen'" />
25
+ </div>
26
+ </div>
27
+ </template>
28
+
29
+ <!-- 弹窗插槽 -->
30
+ <slot>
31
+ <p>弹框自定义的内容</p>
32
+ </slot>
33
+
34
+ <!-- 弹窗操作 -->
35
+ <div slot="footer" class="dialog-footer">
36
+ <el-button @click="handleClose">取 消</el-button>
37
+ <el-button type="primary" @click="handleSubmit">确 定</el-button>
38
+ </div>
39
+ </el-dialog>
40
+ </template>
41
+
42
+ <script>
43
+ export default {
44
+ name: 'DialogWrapper',
45
+ components: {},
46
+ props: {
47
+ /* 弹窗 title标题 */
48
+ dialogTitle: {
49
+ type: String,
50
+ default: '标题',
51
+ },
52
+ /* 弹窗 width宽度 */
53
+ popupWidth: {
54
+ type: String,
55
+ default: '35%',
56
+ },
57
+ /* 弹窗 显示隐藏状态 */
58
+ visible: {
59
+ type: Boolean,
60
+ default: false,
61
+ },
62
+ },
63
+ data() {
64
+ return {
65
+ openDialog: false,
66
+ dialogFullScreen: false,
67
+ };
68
+ },
69
+ computed: {
70
+ dialogVisible: {
71
+ get() {
72
+ // 初始化数据
73
+ if (this.visible) Object.assign(this.$data, this.$options.data());
74
+ return this.visible;
75
+ },
76
+ set(val) {
77
+ // 当visible改变的时候,触发父组件的 updateVisible方法,
78
+ // 在该方法中更改传入子组件的 centerDialogVisible的值
79
+ this.$emit('updateVisible', val);
80
+ },
81
+ },
82
+ },
83
+ watch: {},
84
+ created() {},
85
+ mounted() {},
86
+ methods: {
87
+ /* 关闭弹窗 */
88
+ handleClose() {
89
+ this.$emit('handleClose');
90
+ },
91
+ /* 弹窗 确认 操作 */
92
+ handleSubmit() {
93
+ this.$emit('submitDialogData');
94
+ },
95
+ },
96
+ };
97
+ </script>
98
+ <style lang="scss" scoped></style>
@@ -0,0 +1,91 @@
1
+ import round10 from './round10'
2
+
3
+ /**
4
+ * Copied and ported to code standard as the b-spline library is not maintained any longer.
5
+ * Source:
6
+ * https://github.com/thibauts/b-spline
7
+ * Copyright (c) 2015 Thibaut Séguy <thibaut.seguy@gmail.com>
8
+ */
9
+ export default (t, degree, points, knots, weights) => {
10
+ const n = points.length // points count
11
+ const d = points[0].length // point dimensionality
12
+
13
+ if ((t < 0) || (t > 1)) {
14
+ throw new Error('t out of bounds [0,1]: ' + t)
15
+ }
16
+ if (degree < 1) throw new Error('degree must be at least 1 (linear)')
17
+ if (degree > (n - 1)) throw new Error('degree must be less than or equal to point count - 1')
18
+
19
+ if (!weights) {
20
+ // build weight vector of length [n]
21
+ weights = []
22
+ for (let i = 0; i < n; i++) {
23
+ weights[i] = 1
24
+ }
25
+ }
26
+
27
+ if (!knots) {
28
+ // build knot vector of length [n + degree + 1]
29
+ knots = []
30
+ for (let i = 0; i < n + degree + 1; i++) {
31
+ knots[i] = i
32
+ }
33
+ } else {
34
+ if (knots.length !== n + degree + 1) throw new Error('bad knot vector length')
35
+ }
36
+
37
+ const domain = [
38
+ degree,
39
+ knots.length - 1 - degree
40
+ ]
41
+
42
+ // remap t to the domain where the spline is defined
43
+ const low = knots[domain[0]]
44
+ const high = knots[domain[1]]
45
+ t = t * (high - low) + low
46
+
47
+ // Clamp to the upper & lower bounds instead of
48
+ // throwing an error like in the original lib
49
+ // https://github.com/bjnortier/dxf/issues/28
50
+ t = Math.max(t, low)
51
+ t = Math.min(t, high)
52
+
53
+ // find s (the spline segment) for the [t] value provided
54
+ let s
55
+ for (s = domain[0]; s < domain[1]; s++) {
56
+ if (t >= knots[s] && t <= knots[s + 1]) {
57
+ break
58
+ }
59
+ }
60
+
61
+ // convert points to homogeneous coordinates
62
+ const v = []
63
+ for (let i = 0; i < n; i++) {
64
+ v[i] = []
65
+ for (let j = 0; j < d; j++) {
66
+ v[i][j] = points[i][j] * weights[i]
67
+ }
68
+ v[i][d] = weights[i]
69
+ }
70
+
71
+ // l (level) goes from 1 to the curve degree + 1
72
+ let alpha
73
+ for (let l = 1; l <= degree + 1; l++) {
74
+ // build level l of the pyramid
75
+ for (let i = s; i > s - degree - 1 + l; i--) {
76
+ alpha = (t - knots[i]) / (knots[i + degree + 1 - l] - knots[i])
77
+
78
+ // interpolate each component
79
+ for (let j = 0; j < d + 1; j++) {
80
+ v[i][j] = (1 - alpha) * v[i - 1][j] + alpha * v[i][j]
81
+ }
82
+ }
83
+ }
84
+
85
+ // convert back to cartesian and return
86
+ const result = []
87
+ for (let i = 0; i < d; i++) {
88
+ result[i] = round10(v[s][i] / v[s][d], -9)
89
+ }
90
+ return result
91
+ }