3d模型
This commit is contained in:
1
__init__.py
Normal file
1
__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
# -*-coding:utf-8-*-
|
||||||
1
jikimo_model_viewer/__init__.py
Normal file
1
jikimo_model_viewer/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from . import models
|
||||||
22
jikimo_model_viewer/__manifest__.py
Normal file
22
jikimo_model_viewer/__manifest__.py
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"name": "Jikimo 3D模型展示模块",
|
||||||
|
"summary": "Jikimo 3D模型展示模块。",
|
||||||
|
"description": "Jikimo 3D模型展示模块(限odoo16)",
|
||||||
|
"author": "Van",
|
||||||
|
"website": "https://jikimo.com",
|
||||||
|
"category": "Tutorials",
|
||||||
|
"version": "16.0.0.1",
|
||||||
|
"depends": ['web','sale','sale_management'],
|
||||||
|
"demo": [],
|
||||||
|
"data": [
|
||||||
|
'views/views.xml', #这是为了测试的效果,可以删除
|
||||||
|
],
|
||||||
|
'assets': {
|
||||||
|
'web.assets_qweb': [
|
||||||
|
'jikimo_model_viewer/static/src/js/3d_viewer.xml',
|
||||||
|
],
|
||||||
|
'web.assets_backend': [
|
||||||
|
'jikimo_model_viewer/static/src/js/*',
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
||||||
25
jikimo_model_viewer/readme.md
Normal file
25
jikimo_model_viewer/readme.md
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
# 演示DEMO
|
||||||
|
## 先给销售订单添加一个Binary字段
|
||||||
|
|
||||||
|
class SaleOrder(models.Model):
|
||||||
|
_inherit = "sale.order"
|
||||||
|
|
||||||
|
step_file = fields.Binary("Step File")
|
||||||
|
|
||||||
|
## 然后在销售订单详情的表单视中增加一个带有widget的标签
|
||||||
|
|
||||||
|
<record id="sale_order_form_inherit" model="ir.ui.view">
|
||||||
|
<field name="name">sale.order.form.inherit</field>
|
||||||
|
<field name="model">sale.order</field>
|
||||||
|
<field name="inherit_id" ref="sale.view_order_form"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<!-- 以下仅用于演示效果 widget必需放在保存GLB文件内容的字段上 -->
|
||||||
|
<field name="payment_term_id" position="after">
|
||||||
|
<field name="step_file" widget="Viewer3D"/>
|
||||||
|
</field>
|
||||||
|
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
## 然后就可以到销售订单页面上查看效果
|
||||||
|

|
||||||
BIN
jikimo_model_viewer/static/src/images/img.png
Normal file
BIN
jikimo_model_viewer/static/src/images/img.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 140 KiB |
62
jikimo_model_viewer/static/src/js/3d_viewer.js
Normal file
62
jikimo_model_viewer/static/src/js/3d_viewer.js
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
/** @odoo-module **/
|
||||||
|
|
||||||
|
import { registry } from "@web/core/registry";//注册
|
||||||
|
import { _lt } from "@web/core/l10n/translation";//翻译
|
||||||
|
import { standardFieldProps } from "@web/views/fields/standard_field_props";
|
||||||
|
import { useInputField } from "@web/views/fields/input_field_hook";
|
||||||
|
import { FileUploader } from "@web/views/fields/file_handler";
|
||||||
|
import { session } from "@web/session";//登录会话
|
||||||
|
import { useService } from "@web/core/utils/hooks";
|
||||||
|
import { isBinarySize } from "@web/core/utils/binary";
|
||||||
|
import { download } from "@web/core/network/download";
|
||||||
|
import utils from 'web.utils';
|
||||||
|
|
||||||
|
import core from 'web.core';
|
||||||
|
import rpc from 'web.rpc';
|
||||||
|
|
||||||
|
var QWeb = core.qweb;
|
||||||
|
|
||||||
|
import { Component, onWillUpdateProps, useState, useRef, useEffect } from "@odoo/owl";
|
||||||
|
|
||||||
|
export class StepViewer extends Component {
|
||||||
|
setup() {
|
||||||
|
this.props.url = this.formatUrl();
|
||||||
|
}
|
||||||
|
|
||||||
|
formatUrl(){
|
||||||
|
var url = '';
|
||||||
|
if (this.props.value) {
|
||||||
|
if (utils.is_bin_size(this.props.value)) {
|
||||||
|
var url_props = {
|
||||||
|
base_url: session['web.base.url'],
|
||||||
|
model: this.props.record.resModel,
|
||||||
|
id: JSON.stringify(this.props.record.data['id']),
|
||||||
|
field: this.props.name}
|
||||||
|
url = url_props['base_url']+'/web/content/'+url_props['model']+'/'+url_props['id']+'/'+url_props['field']+'?download=true'
|
||||||
|
|
||||||
|
} else {
|
||||||
|
url = "data:model/gltf-binary;base64," + this.props.value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return url
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
StepViewer.template = "jikimo_model_viewer.BinaryField3d";
|
||||||
|
|
||||||
|
StepViewer.displayName = _lt("3D File");
|
||||||
|
StepViewer.supportedTypes = ["binary"];
|
||||||
|
|
||||||
|
StepViewer.props = {
|
||||||
|
...standardFieldProps,
|
||||||
|
url: { type: String, optional: true },
|
||||||
|
};
|
||||||
|
|
||||||
|
StepViewer.extractProps = ({ attrs }) => {
|
||||||
|
return {
|
||||||
|
url: attrs.options.url,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
registry.category("fields").add("Viewer3D", StepViewer);
|
||||||
43
jikimo_model_viewer/static/src/js/3d_viewer.xml
Normal file
43
jikimo_model_viewer/static/src/js/3d_viewer.xml
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<templates xml:space="preserve">
|
||||||
|
|
||||||
|
<t t-name="jikimo_model_viewer.BinaryField3d" owl="1">
|
||||||
|
|
||||||
|
<model-viewer
|
||||||
|
t-att-src='props.url'
|
||||||
|
name="3D model"
|
||||||
|
alt="3D model"
|
||||||
|
auto-rotate="1"
|
||||||
|
camera-controls="1"
|
||||||
|
style="
|
||||||
|
background-color: #0b009d;
|
||||||
|
--poster-color: #ffffff00;"
|
||||||
|
>
|
||||||
|
<!-- <div class="text-center mt-4 mb-4 mr-4">-->
|
||||||
|
<!-- <span-->
|
||||||
|
<!-- id="model-viewer-fullscreen"-->
|
||||||
|
<!-- title="View fullscreen"-->
|
||||||
|
<!-- role="img"-->
|
||||||
|
<!-- aria-label="Fullscreen"-->
|
||||||
|
<!-- >-->
|
||||||
|
<!-- <i class="fa fa-arrows-alt fa-2x"/>-->
|
||||||
|
<!-- </span>-->
|
||||||
|
<!-- </div>-->
|
||||||
|
</model-viewer>
|
||||||
|
|
||||||
|
<!-- <model-viewer-->
|
||||||
|
<!-- src='/jikimo_model_viewer/static/src/js/3d_viewer/test.glb'-->
|
||||||
|
<!-- name="Test 3D model"-->
|
||||||
|
<!-- alt="Test 3D model"-->
|
||||||
|
<!-- auto-rotate="1"-->
|
||||||
|
<!-- camera-controls="1"-->
|
||||||
|
<!-- />-->
|
||||||
|
|
||||||
|
<script type="module"
|
||||||
|
src="/jikimo_model_viewer/static/src/lib/model-viewer.min.js">
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</t>
|
||||||
|
|
||||||
|
|
||||||
|
</templates>
|
||||||
BIN
jikimo_model_viewer/static/src/js/test.glb
Normal file
BIN
jikimo_model_viewer/static/src/js/test.glb
Normal file
Binary file not shown.
19
jikimo_model_viewer/views/views.xml
Normal file
19
jikimo_model_viewer/views/views.xml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
<record id="sale_order_form_inherit" model="ir.ui.view">
|
||||||
|
<field name="name">sale.order.form.inherit</field>
|
||||||
|
<field name="model">sale.order</field>
|
||||||
|
<field name="inherit_id" ref="sale.view_order_form"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<field name="payment_term_id" position="after">
|
||||||
|
<!-- <field name="create_date" widget="show_units" options="{'units':'UTC'}" string="Create Date"/>-->
|
||||||
|
<!-- <group class="o_partner_order_summary" col="2"/>-->
|
||||||
|
<field name="step_file" widget="Viewer3D"/>
|
||||||
|
</field>
|
||||||
|
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</odoo>
|
||||||
@@ -1,2 +1 @@
|
|||||||
from . import models
|
|
||||||
from . import controllers
|
from . import controllers
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
"website": "https://topodoo.com",
|
"website": "https://topodoo.com",
|
||||||
"category": "Tutorials",
|
"category": "Tutorials",
|
||||||
"version": "15.0.0.1",
|
"version": "15.0.0.1",
|
||||||
"depends": ["sale", "sale_management"],
|
"depends": ["sale", "sale_management","web_widget_model_viewer"],
|
||||||
"demo": [],
|
"demo": [],
|
||||||
"data": [
|
"data": [
|
||||||
#'report/test_sale_report.xml',
|
#'report/test_sale_report.xml',
|
||||||
|
|||||||
@@ -1,33 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<odoo>
|
|
||||||
<record id="sale_order_form_inherit" model="ir.ui.view">
|
|
||||||
<field name="name">sale.order.form.inherit</field>
|
|
||||||
<field name="model">sale.order</field>
|
|
||||||
<field name="inherit_id" ref="sale.view_order_form"/>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<field name="payment_term_id" position="after">
|
|
||||||
<!-- <field name="create_date" widget="show_units" options="{'units':'UTC'}" string="Create Date"/>-->
|
|
||||||
<!-- <group class="o_partner_order_summary" col="2"/>-->
|
|
||||||
<field name="step_file" widget="Viewer3D" readonly="True"/>
|
|
||||||
</field>
|
|
||||||
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="sale_order_tree_inherit" model="ir.ui.view">
|
|
||||||
<field name="name">sale.order.tree.inherit</field>
|
|
||||||
<field name="model">sale.order</field>
|
|
||||||
<field name="inherit_id" ref="sale.view_order_tree"/>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<field name="partner_id" position="attributes">
|
|
||||||
<attribute name="widget">CTemplate</attribute>
|
|
||||||
<attribute name="options">{'template':'owl_demo.field_partner_id'}</attribute>
|
|
||||||
</field>
|
|
||||||
<field name="team_id" position="before">
|
|
||||||
<field name="order_line" widget="CTemplate" options="{'template':'owl_demo.field_order_line'}"/>
|
|
||||||
</field>
|
|
||||||
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
</odoo>
|
|
||||||
Reference in New Issue
Block a user