Skip to content

Commit

Permalink
Reflector primitive-reference - editor & webgpu support
Browse files Browse the repository at this point in the history
  • Loading branch information
feiy committed Jul 18, 2023
1 parent d97c5a4 commit 7030851
Show file tree
Hide file tree
Showing 23 changed files with 614 additions and 81 deletions.
25 changes: 25 additions & 0 deletions QBin/project_template/document.js
Original file line number Diff line number Diff line change
Expand Up @@ -1322,6 +1322,31 @@ const reflector = {
const reflector = new Reflector();
reflector.width = width;
reflector.height = height;

if (props.hasOwnProperty('prim_refs'))
{
let arr_prim_refs = JSON.parse(props.prim_refs);
for (let obj_prim_ref of arr_prim_refs)
{
let name = obj_prim_ref.name;
let mesh_id = 0;
if ('mesh_id' in obj_prim_ref)
{
mesh_id = obj_prim_ref.mesh_id;
}
let prim_id = 0;
if ('prim_id' in obj_prim_ref)
{
prim_id = obj_prim_ref.prim_id;
}

let model = doc.scene.getObjectByName(name);
if (model!=null)
{
reflector.addPrimitiveReference(model, mesh_id, prim_id);
}
}
}

if (parent != null) {
parent.add(reflector);
Expand Down
95 changes: 92 additions & 3 deletions QBin/xmleditor/bundle_index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4673,7 +4673,7 @@ function genNode(node, level)
for(let att in attributes)
{
let value = attributes[att];
code+=` ${att}=\"${value}\"`;
code+=` ${att}=\'${value}\'`;
}

let children = node.children;
Expand Down Expand Up @@ -4707,7 +4707,7 @@ function genXML(nodes)
if (top.tagName =="?xml")
{
let version = top.attributes.version;
xml += `<?xml version=\"${version}\"?>\n`;
xml += `<?xml version=\'${version}\'?>\n`;
}
else
{
Expand Down Expand Up @@ -7179,6 +7179,31 @@ const reflector = {
const reflector = new Reflector();
reflector.width = width;
reflector.height = height;

if (props.hasOwnProperty('prim_refs'))
{
let arr_prim_refs = JSON.parse(props.prim_refs);
for (let obj_prim_ref of arr_prim_refs)
{
let name = obj_prim_ref.name;
let mesh_id = 0;
if ('mesh_id' in obj_prim_ref)
{
mesh_id = obj_prim_ref.mesh_id;
}
let prim_id = 0;
if ('prim_id' in obj_prim_ref)
{
prim_id = obj_prim_ref.prim_id;
}

let model = doc.scene.getObjectByName(name);
if (model!=null)
{
reflector.addPrimitiveReference(model, mesh_id, prim_id);
}
}
}

if (parent != null) {
parent.add(reflector);
Expand All @@ -7205,6 +7230,33 @@ const reflector = {
obj.width = width;
obj.height = height;
}
if ('prim_refs' in input)
{
props.prim_refs = input.prim_refs;
obj.clearPrimitiveReferences();

let arr_prim_refs = JSON.parse(input.prim_refs);
for (let obj_prim_ref of arr_prim_refs)
{
let name = obj_prim_ref.name;
let mesh_id = 0;
if ('mesh_id' in obj_prim_ref)
{
mesh_id = obj_prim_ref.mesh_id;
}
let prim_id = 0;
if ('prim_id' in obj_prim_ref)
{
prim_id = obj_prim_ref.prim_id;
}

let model = doc.scene.getObjectByName(name);
if (model!=null)
{
obj.addPrimitiveReference(model, mesh_id, prim_id);
}
}
}
tuning_object3d(doc, obj, input);
return "";
}
Expand Down Expand Up @@ -7756,6 +7808,37 @@ class Document

this.pick_obj("");
}

req_add_ref_prim()
{
gamePlayer.picking = true;
this.controls.enabled = false;
const prim_picking_pointerdown = (event)=>{
let x = event.clientX;
let y = event.clientY;
let intersect = gamePlayer.pickObject(x,y);
if (intersect!=null)
{
let key = intersect.uuid;
if (key != "")
{
let obj = this.internal_index[key].obj;
let name = obj.name;
if (name && name!="")
{
let mesh_id = intersect.mesh_id;
let prim_id = intersect.prim_id;
gamePlayer.message("add_ref_prim", JSON.stringify({name, mesh_id, prim_id}));
}
}
}
gamePlayer.picking = false;
this.controls.enabled = true;
view.removeEventListener("pointerdown", prim_picking_pointerdown);
};
view.addEventListener("pointerdown", prim_picking_pointerdown);

}
}

function picking_pointerdown(event)
Expand Down Expand Up @@ -7910,13 +7993,19 @@ function remove(key)
return "";
}

function add_prim_ref()
{
doc.req_add_ref_prim();
return "";
}

function init(width, height)
{
renderer = new GLRenderer();
doc = new Document(view);
clock = new Clock();

message_map = { isModified, setXML, getXML, picking, pick_obj, tuning, initialize, generate, create, remove};
message_map = { isModified, setXML, getXML, picking, pick_obj, tuning, initialize, generate, create, remove, add_prim_ref};
}

function render(width, height, size_changed)
Expand Down
83 changes: 83 additions & 0 deletions QBin/xmleditor/editor_document.js
Original file line number Diff line number Diff line change
Expand Up @@ -2668,6 +2668,31 @@ const reflector = {
const reflector = new Reflector();
reflector.width = width;
reflector.height = height;

if (props.hasOwnProperty('prim_refs'))
{
let arr_prim_refs = JSON.parse(props.prim_refs);
for (let obj_prim_ref of arr_prim_refs)
{
let name = obj_prim_ref.name;
let mesh_id = 0;
if ('mesh_id' in obj_prim_ref)
{
mesh_id = obj_prim_ref.mesh_id;
}
let prim_id = 0;
if ('prim_id' in obj_prim_ref)
{
prim_id = obj_prim_ref.prim_id;
}

let model = doc.scene.getObjectByName(name);
if (model!=null)
{
reflector.addPrimitiveReference(model, mesh_id, prim_id);
}
}
}

if (parent != null) {
parent.add(reflector);
Expand All @@ -2694,6 +2719,33 @@ const reflector = {
obj.width = width;
obj.height = height;
}
if ('prim_refs' in input)
{
props.prim_refs = input.prim_refs;
obj.clearPrimitiveReferences();

let arr_prim_refs = JSON.parse(input.prim_refs);
for (let obj_prim_ref of arr_prim_refs)
{
let name = obj_prim_ref.name;
let mesh_id = 0;
if ('mesh_id' in obj_prim_ref)
{
mesh_id = obj_prim_ref.mesh_id;
}
let prim_id = 0;
if ('prim_id' in obj_prim_ref)
{
prim_id = obj_prim_ref.prim_id;
}

let model = doc.scene.getObjectByName(name);
if (model!=null)
{
obj.addPrimitiveReference(model, mesh_id, prim_id);
}
}
}
tuning_object3d(doc, obj, input);
return "";
}
Expand Down Expand Up @@ -3245,6 +3297,37 @@ export class Document

this.pick_obj("");
}

req_add_ref_prim()
{
gamePlayer.picking = true;
this.controls.enabled = false;
const prim_picking_pointerdown = (event)=>{
let x = event.clientX;
let y = event.clientY;
let intersect = gamePlayer.pickObject(x,y);
if (intersect!=null)
{
let key = intersect.uuid;
if (key != "")
{
let obj = this.internal_index[key].obj;
let name = obj.name;
if (name && name!="")
{
let mesh_id = intersect.mesh_id;
let prim_id = intersect.prim_id;
gamePlayer.message("add_ref_prim", JSON.stringify({name, mesh_id, prim_id}));
}
}
}
gamePlayer.picking = false;
this.controls.enabled = true;
view.removeEventListener("pointerdown", prim_picking_pointerdown);
};
view.addEventListener("pointerdown", prim_picking_pointerdown);

}
}

function picking_pointerdown(event)
Expand Down
6 changes: 3 additions & 3 deletions QBin/xmleditor/genXML.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
function genNode(node, level)
function genNode(node, level)
{
let code = "";
for(let i=0;i<level;i++) code+="\t";
Expand All @@ -16,7 +16,7 @@
for(let att in attributes)
{
let value = attributes[att];
code+=` ${att}=\"${value}\"`;
code+=` ${att}=\'${value}\'`;
}

let children = node.children;
Expand Down Expand Up @@ -50,7 +50,7 @@ export function genXML(nodes)
if (top.tagName =="?xml")
{
let version = top.attributes.version;
xml += `<?xml version=\"${version}\"?>\n`;
xml += `<?xml version=\'${version}\'?>\n`;
}
else
{
Expand Down
8 changes: 7 additions & 1 deletion QBin/xmleditor/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -67,13 +67,19 @@ function remove(key)
return "";
}

function add_prim_ref()
{
doc.req_add_ref_prim();
return "";
}

function init(width, height)
{
renderer = new GLRenderer();
doc = new Document(view);
clock = new Clock();

message_map = { isModified, setXML, getXML, picking, pick_obj, tuning, initialize, generate, create, remove};
message_map = { isModified, setXML, getXML, picking, pick_obj, tuning, initialize, generate, create, remove, add_prim_ref};
}

function render(width, height, size_changed)
Expand Down
Loading

0 comments on commit 7030851

Please sign in to comment.