(in-package :rbt-test) (use-package :oli) (sd-defdialog 'RBT_TEST_SHA_BASIC_ATTACH_MATERIAL_EN :dialog-title "TEST -- sha_basic_attach_material with a real material" :variables '( (test_parts :value-type :part :multiple-items t :title "Select part" :prompt-text "Select ONE test part") ("-") (test_family :range ("(Loading...)") :title "Material family" :after-input (rbt_test_refresh_thicknesses)) (test_thickness :range ("(Select a family first)") :title "Thickness (mm)" :after-input (rbt_test_refresh_code)) (test_real_code :value-type :string :toggle-type :invisible) ("-") (take_it :title "Apply" :push-action (do_it) :toggle-type :wide-toggle) ) :local-functions '( (rbt_test_families () (if (sd-logical-table-p "COMPANY-SHEET_METALS") (let ((n (sd-get-logical-table-number-of-rows "COMPANY-SHEET_METALS")) (result (make-list 0))) (dotimes (cont n) (let* ((row (sd-read-logical-table-row "COMPANY-SHEET_METALS" :row cont)) (fam (getf row :MAT_ID)) (already-there nil)) (when fam (dolist (x result) (when (equal x fam) (setq already-there t))) (when (not already-there) (setf result (push fam result))) ) ) ) (sort result #'string-lessp) ) nil ) ) (rbt_test_thicknesses (fam) (if (sd-logical-table-p "COMPANY-SHEET_METALS") (let ((n (sd-get-logical-table-number-of-rows "COMPANY-SHEET_METALS")) (result (make-list 0))) (dotimes (cont n) (let* ((row (sd-read-logical-table-row "COMPANY-SHEET_METALS" :row cont)) (th (getf row :THICK)) (already-there nil)) (when (and th (equal (getf row :MAT_ID) fam)) (dolist (x result) (when (sd-num-equal-p x th) (setq already-there t))) (when (not already-there) (setf result (push th result))) ) ) ) (sort result #'<) ) nil ) ) (rbt_test_lookup_code (fam th) (if (sd-logical-table-p "COMPANY-SHEET_METALS") (let ((n (sd-get-logical-table-number-of-rows "COMPANY-SHEET_METALS")) (result nil) (cont 0)) (loop (when (or result (>= cont n)) (return)) (let ((row (sd-read-logical-table-row "COMPANY-SHEET_METALS" :row cont))) (when (and (equal (getf row :MAT_ID) fam) (sd-num-equal-p (getf row :THICK) th)) (setq result (getf row :MATERIAL))) ) (setq cont (+ cont 1)) ) result ) nil ) ) (rbt_test_refresh_thicknesses () (setq test_thickness nil test_real_code nil) (if test_family (let ((values (rbt_test_thicknesses test_family))) (if values (progn (sd-set-range 'test_thickness values) (setq test_thickness (first values)) (rbt_test_refresh_code) ) (sd-set-range 'test_thickness '("(No thickness found for this family)")) ) ) ) ) (rbt_test_refresh_code () (setq test_real_code nil) (when (and test_family test_thickness (numberp test_thickness)) (setq test_real_code (rbt_test_lookup_code test_family test_thickness)) ) ) ;; ===== BLOCK BELOW DOES NOT WORK AS EXPECTED (see forum post) ===== (do_it () (dolist (part test_parts) (sd-call-cmds (oli::sha_basic_attach_material :sheet_part part :yes :material test_real_code :yes :thickness test_thickness :yes ) ) ) (sd-set-variable-status 'test_parts :value nil) ) ;; ===== END OF BLOCK THAT DOES NOT WORK AS EXPECTED ===== ) :after-initialization '(progn (if (sd-logical-table-p "COMPANY-SHEET_METALS") (let ((fams (rbt_test_families))) (when fams (sd-set-range 'test_family fams) (setq test_family (first fams)) (rbt_test_refresh_thicknesses) ) ) ) ) ) (ignore-errors (sd-fluentui-add-ribbon-tab "COMPANY_TOOLS_TAB" :application "SolidDesigner" :title "Company Tools" :appendUtilitiesGroup nil ) ) (ignore-errors (sd-fluentui-add-ribbon-group "TestGroup" :parent "COMPANY_TOOLS_TAB" :title "Test" ) ) (ignore-errors (sd-fluentui-add-ribbon-button :parent '("COMPANY_TOOLS_TAB" "TestGroup") :label "Test Material" :image "C:/path/to/icon.bmp" :largeImage t :pushAction "RBT_TEST_SHA_BASIC_ATTACH_MATERIAL_EN" ) )