Skip to content

Commit 2fbd72a

Browse files
Update jcad exporting mechanism (#355)
* Make convert endpoint configurable * Fix edge selection * Update Playwright Snapshots --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 parent 122b4a3 commit 2fbd72a

File tree

8 files changed

+21
-16
lines changed

8 files changed

+21
-16
lines changed

packages/base/src/3dview/mainview.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,6 @@ export class MainView extends React.Component<IProps, IStates> {
515515
const selectedMeshesNames = new Set(
516516
this._selectedMeshes.map(sel => sel.name)
517517
);
518-
519518
if (selection) {
520519
const selectionName = selection.mesh.name;
521520
if (e.ctrlKey) {
@@ -540,7 +539,6 @@ export class MainView extends React.Component<IProps, IStates> {
540539
newSelection[name] = this._meshGroup?.getObjectByName(name)
541540
?.userData as ISelection;
542541
}
543-
544542
this._updateSelected(newSelection);
545543
this._model.syncSelected(newSelection, this._mainViewModel.id);
546544
}

packages/base/src/commands.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -593,8 +593,13 @@ const EXPORT_FORM = {
593593
},
594594
syncData: (context: DocumentRegistry.IContext<IJupyterCadModel>) => {
595595
return (props: IDict) => {
596+
const endpoint = context.model?.sharedModel?.toJcadEndpoint;
597+
if (!endpoint) {
598+
showErrorMessage('Error', 'Missing endpoint.');
599+
return;
600+
}
596601
const { Name } = props;
597-
requestAPI<{ done: boolean }>('jupytercad/export', {
602+
requestAPI<{ done: boolean }>(endpoint, {
598603
method: 'POST',
599604
body: JSON.stringify({
600605
path: context.path,
@@ -895,9 +900,9 @@ export function addCommands(
895900
commands.addCommand(CommandIDs.exportJcad, {
896901
label: trans.__('Export to .jcad'),
897902
isEnabled: () => {
898-
return tracker.currentWidget
899-
? tracker.currentWidget.context.model.sharedModel.exportable
900-
: false;
903+
return Boolean(
904+
tracker.currentWidget?.context?.model?.sharedModel?.toJcadEndpoint
905+
);
901906
},
902907
iconClass: 'fa fa-file-export',
903908
execute: async () => {

packages/base/src/panelview/objectproperties.tsx

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -207,13 +207,8 @@ class ObjectPropertiesReact extends React.Component<IProps, IStates> {
207207
if (newState) {
208208
const selection = newState.selected.value;
209209
const selectedObjectNames = Object.keys(selection || {});
210-
211210
// Only show object properties if ONE object is selected and it's a shape
212-
if (
213-
selection === undefined ||
214-
selectedObjectNames.length !== 1 ||
215-
selection[selectedObjectNames[0]].type !== 'shape'
216-
) {
211+
if (selection === undefined || selectedObjectNames.length !== 1) {
217212
this.setState(old => ({
218213
...old,
219214
schema: undefined,
@@ -223,7 +218,14 @@ class ObjectPropertiesReact extends React.Component<IProps, IStates> {
223218
return;
224219
}
225220

226-
const selectedObject = selectedObjectNames[0];
221+
let selectedObject = selectedObjectNames[0];
222+
if (
223+
selection[selectedObject] &&
224+
selection[selectedObject].type !== 'shape'
225+
) {
226+
selectedObject = selection[selectedObject].parent as string;
227+
}
228+
227229
if (selectedObject !== this.state.selectedObject) {
228230
const objectData = this.props.cpModel.jcadModel?.getAllObject();
229231
if (objectData) {

packages/schema/src/doc.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,6 @@ export class JupyterCadDoc
187187
}
188188

189189
editable = true;
190-
exportable = false;
191190

192191
private _getObjectAsYMapByName(name: string): Y.Map<any> | undefined {
193192
for (const obj of this._objects) {

packages/schema/src/interfaces.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,9 @@ export interface IJupyterCadDoc extends YDocument<IJupyterCadDocChange> {
8585
options: JSONObject;
8686
metadata: JSONObject;
8787
outputs: JSONObject;
88+
8889
readonly editable: boolean;
89-
readonly exportable: boolean;
90+
readonly toJcadEndpoint?: string;
9091

9192
objectExists(name: string): boolean;
9293
getObjectByName(name: string): IJCadObject | undefined;

python/jupytercad_core/src/stepplugin/model.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export class JupyterCadStepDoc extends JupyterCadDoc {
5050
}
5151

5252
editable = false;
53-
exportable = true;
53+
toJcadEndpoint = 'jupytercad/export';
5454

5555
private _sourceObserver = (events: Y.YEvent<any>[]): void => {
5656
const changes: Array<{
5 Bytes
Loading
14 Bytes
Loading

0 commit comments

Comments
 (0)