mirror of
https://github.com/xibyte/jsketcher
synced 2025-12-11 02:45:52 +01:00
45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
import {CallCommand} from "cad/craft/e0/interact";
|
|
import {MObject} from "cad/model/mobject";
|
|
import {OCCCommands} from "cad/craft/e0/OCI";
|
|
|
|
export type OCCCommandInterface = OCCCommands;
|
|
|
|
const pushedModels = new Set();
|
|
|
|
export function clearImplicitModels() {
|
|
pushedModels.clear();
|
|
}
|
|
|
|
export const OCI: OCCCommandInterface = new Proxy({}, {
|
|
get: function (target, prop: string, receiver) {
|
|
return prop in target ? target[prop] : function(...argums) {
|
|
if (typeof prop !== 'string') {
|
|
return undefined;
|
|
}
|
|
prop = prop.replace(/^_/, '');
|
|
const args = argums.map(arg => {
|
|
const type = typeof arg;
|
|
if (type === 'object') {
|
|
if (arg instanceof MObject) {
|
|
if (!pushedModels.has(arg.id)) {
|
|
pushedModels.add(arg.id)
|
|
__CAD_APP.occService.io.pushModel(arg, arg.id);
|
|
}
|
|
return arg.id;
|
|
}
|
|
return JSON.stringify(arg);
|
|
} else {
|
|
return arg + "";
|
|
}
|
|
});
|
|
console.log("ARGUMENTS:", args);
|
|
const returnCode = CallCommand(prop, [prop, ...args]);
|
|
// if (returnCode !== 0) {
|
|
// throw 'command execution fail: ' + prop;
|
|
// }
|
|
return returnCode;
|
|
};
|
|
},
|
|
}) as any;
|
|
|
|
|