(in-package :custom) (use-package :oli) (sd-defdialog 'pattern-rename :dialog-title "Rename by pattern" :toolbox-button t :variables '( (selection :title "Selection" :value-type :part-assembly :initial-value nil :multiple-items t :modifies nil :prompt-text "Select parts or assemblies.") ("-") (search-string :title "Search string" :value-type :string :initial-value "Foo" :persistent-data-storage t) (replace-string :title "Replace string" :value-type :string :initial-value "Bar" :persistent-data-storage t) ("-") (instance-rename :title "Instance rename" :value-type :grouped-boolean :initial-value t) (contents-rename :title "Contents rename" :value-type :grouped-boolean :initial-value t) (viewset-rename :title "Viewset rename" :value-type :grouped-boolean :initial-value t) ("-") (rename-func-btn :title "Rename" :toggle-type :wide-toggle :push-action (rename-by-matching-pattern :items selection :search-string search-string :replace-string replace-string :viewset-rename viewset-rename :instance-rename instance-rename :contents-rename contents-rename))) :help-action '(sd-display-message "Rename selected parts or assemblies by matching string pattern." :title "Help: Rename")) (defun rename-by-matching-pattern (&key items search-string replace-string instance-rename contents-rename viewset-rename) (when (and items (and search-string (> (length search-string) 0)) (and replace-string (> (length replace-string) 0)) (or instance-rename contents-rename)) (let ( (rename-instance-cnt 0) (rename-contents-cnt 0)) (dolist (item items) (dolist (sub-item (inq-obj-tree-list item)) (when viewset-rename (when (sd-am-view-set-p sub-item) (let ((viewset-name (sd-inq-obj-basename sub-item))) (when viewset-name (let ((new-viewset-name (sd-string-replace viewset-name search-string replace-string))) (when (string-not-equal viewset-name new-viewset-name ) (sd-call-cmds (change_layout_name sub-item new-viewset-name)))))))) (when (or (sd-inq-part-p sub-item) (sd-inq-assembly-p sub-item)) (when instance-rename (let ((sub-item-name-instance-name (sd-inq-obj-basename sub-item))) (when sub-item-name-instance-name (let ((new-instance-name (sd-string-replace sub-item-name-instance-name search-string replace-string))) (sd-call-cmds (change_name_pa :part_asmb sub-item :name new-instance-name)) (display (format nil "Instance Rename: ~a -> ~a" (sd-inq-obj-pathname sub-item) new-instance-name)) (incf rename-instance-cnt))))) (when contents-rename (let ((sub-item-name-contents-name (sd-inq-obj-contents-name sub-item))) (when sub-item-name-contents-name (let ((new-contents-name (sd-string-replace sub-item-name-contents-name search-string replace-string))) (sd-call-cmds (change_name_pa :part_asmb sub-item :model_name new-contents-name)) (display (format nil "Contents Rename: ~a -> ~a" (sd-inq-obj-pathname sub-item) new-contents-name)) (incf rename-contents-cnt)))))))) (display (format nil "Instances rename total: ~a" rename-instance-cnt)) (display (format nil "Contents rename total: ~a" rename-contents-cnt))))) (defun inq-obj-tree-list (obj) (cons obj (apply #'nconc (mapcar #'inq-obj-tree-list (sd-inq-obj-children obj)))))