Коды на AutoLISP/VisualLISP, DCL для AutoCad
Коды рабочие, размер не позволяет выложить полностью, поэтому
пишите мне на почту divash@yandex.ru, пришлю полные листинги.
Очень полезные "лайфхаки" для проектирования мебели в Автокаде.
1. Программа автоматического создания таблиц Спецификации в AutoCad и одновременно в Excel
Для пояснения работы программы, сделал несколько Print Screen своего монитора. Для примера использую тумбу с фасадом, как вы понимаете, программа будет работать с любой мебелью.
Это может быть шкаф из МДФ со шпоном, стол из натурального дерева, буфет из массива, резной шкаф и т. д.
На первой картинке, тумба - вид с разделёнными частями и открытое диалоговое окно "Создание таблицы спецификации в Автокад".
Открытие диалога происходит по нажатию кнопки, ни каких дополнительных действий не нужно.
В диалоге можно задать номер изделия (мебели) в зависимости от объекта. Нажимаем копку "ОК" и переходим к выбору деталей.
Смотрим вторую картинку. Конструктор выбирает детали тумбы из дерева, или части шкафа ручной работы - все рамкой или по одной.
Количество деталей не ограничено.
Пробовал составлять таблицы из более 200 строк.
Через секунду программа выдаёт результат - таблицу, которую видно на третьей картинке.
Каждой детали присваивается номер и размеры деталей заносятся в таблицу.
Если деталь подходит под стандартную толщину МДФ, то происходит определение МДФ (не важно со шпоном или без).
Происходит подсчёт площади листовых материалов МДФ, фанеры.
Одновременно в Excel. также создаётся таблица. При этом открытия Excel. не требуется.
На четвёртой картинке открыта таблица Excel.
В таблице автоматически происходит сортировка по толщинам МДФ и подсчёт общих затрат листовых материалов.
;;Программа для создания таблицы Спецификация в AutoCAD и Excel.
;;на языке AutoLISP\Visual LISP,с применением технологии ActiveX и DCL.
;;Конструктор мебели выбирает детали (3D тела) в пространстве Модели, далее
;;программа присваивает номер каждой детали из выбранной сборки.
;;Вычисляются габаритные размеры каждой детали. Создает таблицу с занесением номера и
;;размеров (длина, ширина, толщина). Считает площадь и толщину МДФ.
;;Автоматически создаётся таблица Excel, открытие файла Excel не нужно.
;;В сводной таблице программа сортирует детали мебели по стандартной толщине МДФ.
;; Автор: Шинин Дмитрий, 2020
;;Замечания и предложения по адресу divash@yandex.ru
;; Глобальные переменные:
;; acad_object - VLA-объект программы AutoCAD;
;; active_document - VLA-объект активный документ AutoCAD;
;; model_space - VLA-объект пространства модели чертежа;
;; vla_obj - VLA-объект 3D тела
;; vla_obj_5
;; vla_obj_4
;; tbl
(defun c:mp_spec1
(/ old_osm old_echo 3DSOLID_lst cout_3DSOLID_lst
count_str_excel count_tel_n count_tel detal_lst name_obj
p_obj p_obj_1 p_obj_0 p_obj_4 p_obj_5 p_obj_9 k count_line
detal_lst_sum detal_nomer ob_nomer_str cancel1 to detal_mdf
pt0 X1 Y1 Z1 X2 Z2 X3 Y3 Z3 pmin pmax detal_mdf mdf MDFl2
MDFshl2 MDFtol2 MDFtoshl2 ncolumns widths types ugol msp
hcell nlines i j q val
) ;_ end /
(vl-load-com) ; Подгрузка библиотек, обеспечивающих работу с ActiveX
(setq acad_object (vlax-get-acad-object))
(setq active_document (vla-get-activedocument acad_object))
(setq model_space (vla-get-modelspace active_document))
;;----------------------------------------------------------------------------
(vla-startundomark active_document) ; начало группы отмены
(setq cancel1 0)
(setq to 1) ; коэффициент умножения для склейки МДФ
(lispru_0-spec) ;вызов и обработка главного диалога
(if (= cancel1 1) ; отмена программы по Cancel
(progn
(princ "отмена программы по Cancel")
(vl-exit-with-error msg)
) ;_ end progn
) ;_ конец if
(setq ncolumns 9 ; количество столбцов в будущей таблице спецификации, задаю 9 столбцов
hcell 8.0
hlet 5.0
ugol (/ (* (atof "-45") Pi) 180)
scalefactor (fix (atof scalefactor)) ; масштаб таблиц, из диалога
) ;_ конец setq
(setq old_echo (getvar "CMDECHO")) ; Отключение эхо-вывода
(setvar "CMDECHO" 0)
(setvar "regenmode" 0) ; Отключение регенерации
(setq old_osm (getvar "osmode")) ; сохраняю привязки включенные пользователем и отключаю все привязки
(setvar "osmode" 0)
(command "_.UCS" "_w") ;установка МСК
(setq 3DSOLID_lst 0 cout_3DSOLID_lst 0) ;обнуление счетчика
(setq 3DSOLID_lst ;Сохраним выбранные тела в списке 3DSOLID_lst
(vl-remove-if
'listp
(mapcar 'cadr
(ssnamex (ssget (list (cons 0 "3DSOLID"))))
) ;_ конец mapcar
) ;_ конец vl-remove-if
) ;_ конец setq
(setq count_tel (length 3DSOLID_lst)) ;количество выбранных тел, количество строк в таблицах
(setq count_tel_old
(vlax-ldata-get
model_space
"count_tel_old"
) ;_ конец vlax-ldata-get
) ;_ конец setq
(if (= tcou 1)
(progn (setq count_tel_n 1) (setq count_tel_old 0))
(setq count_tel_n (1+ count_tel_old))
;прибавляем цифру к номеру каждой детали, для преественности сводной таблицы
) ;_ конец if
(vlax-ldata-put
model_space;сохранение в словаре, по ключу - count_tel_old
"count_tel_old"
(setq count_tel_old (+ count_tel count_tel_old))
) ;_ конец vlax-ldata-put
(setq cout_3DSOLID_lst (1- count_tel));счетчик по количеству выбранных тел в сборке
(while (>= cout_3DSOLID_lst 0) ; начало основного цикла формирования списка спецификации для каждого тела
;(номер детали , длина, ширина, толщина)
(setq detal_lst nil) ; список спецификации для каждого тела (номер-длина-ширина-толщина-количество)
(setq detal_lst (list 1)) ;количество одинаковых деталей - всегда равно 1
(3DSOLID_gab);;; вызов функции определения габаритов 3D тела
;;----------------------------------------------------------------------------
;;рисую выноску с номером детали
(setq vla_obj_4 (vla-AddLine
model_space
(vlax-3D-point p_obj_0)
(vlax-3D-point p_obj_2)
) ;_ end vla-AddLine
) ;_ end setq
(setq vla_obj_5 (vla-AddText
model_space
(nth 0 detal_lst) ;результативный номер детали
(vlax-3D-point p_obj_2) ; точка вставки
24 ; высота текста выноски
) ;_ конец vla-AddText
) ;_ конец setq
;; поворот выноски и текста и таблицы на 90 градусов
(vla-Rotate3D
vla_obj_4
(vlax-3D-point p_obj_0)
(vlax-3D-point p_obj_4)
(/ Pi 2)
) ;_ end vla-Rotate3D
(vla-Rotate3D
vla_obj_5
(vlax-3D-point p_obj_0)
(vlax-3D-point p_obj_4)
(/ Pi 2)
) ;_ end vla-Rotate3D
;; поворот выноски и текста на UGOL градусов
(setq Z2 (+ Z1 5000))
(setq p_obj_9 (list X1 Y1 Z2))
(vla-Rotate3D
vla_obj_4
(vlax-3D-point p_obj_0)
(vlax-3D-point p_obj_9)
ugol
) ;_ end vla-Rotate3D
(vla-Rotate3D
vla_obj_5
(vlax-3D-point p_obj_0)
(vlax-3D-point p_obj_9)
ugol
) ;_ end vla-Rotate3D
(setq count_tel_n (1+ count_tel_n));увеличение номера детали
(setq cout_3DSOLID_lst (1- cout_3DSOLID_lst)) ;уменьшение счетчика
) ;_ конец while (основной цикл)
;;----------------------------------------------------------------------------
(setq nlines count_tel) ; количество строк в будущей таблице спецификации
(setq table_items ; в table_items задаём ширину столбцов таблицы, переменные и названия столбцов
'((70.0 55.0 40.0 40.0 40.0 30.0 60.0 35.0 30.0)
("str" "str" "int" "int" "int" "int" "str" "int" "str")
("№ детали" "Наименование" "Длина, мм" "Ширина, мм" "Толщина, мм"
"Кол-во" "Материал" "Площадь, кв.м" "Лист№"
)
)
) ;_ end setq
(setq pt0 p_obj_0) ; точка вставки левого верхнего угла таблицы
;; Список ширин колонок и список типов данных
(setq widths (nth 0 table_items)
types (nth 1 table_items)
) ;_ конец setq
(setq msp (vla-get-ModelSpace
(vla-get-activeDocument (vlax-get-acad-object))
) ;_ конец vla-get-ModelSpace
) ;_ конец setq
;; Создание стандартной таблицы с колонками равной ширины
(setq tbl (vla-AddTable
msp
(vlax-3d-point pt0)
(+ 2 nlines)
ncolumns
hcell
(car widths)
) ;_ конец vla-AddTable
) ;_ конец setq
;; поворот таблицы на UGOL градусов
(setq Z2 (+ Z1 5000))
(setq p_obj_9 (list X1 Y1 Z2))
(vla-Rotate3D
tbl
(vlax-3D-point p_obj_0)
(vlax-3D-point p_obj_9)
ugol
) ;_ end vla-Rotate3D
;; Корректировка ширин столбцов
(setq i -1)
(repeat ncolumns
(setq i (1+ i))
(vla-SetColumnWidth tbl i (nth i widths))
) ;_ конец repeat
;; Заголовок таблицы
(vla-SetTextHeight tbl acTitleRow hlet) ; Высота букв
(vla-SetText tbl 0 0 "Спецификация") ; Текст
;; Заголовки колонок
(vla-SetTextHeight tbl acHeaderRow hlet) ; Высота букв
(setq headers (nth 2 table_items)
i -1
) ;_ конец setq
(repeat ncolumns
(setq i (1+ i))
(vla-SetText tbl 1 i (nth i headers))
) ;_ конец repeat
;; Вписывание элементов таблицы
(vla-SetTextHeight tbl acDataRow hlet) ; Высота букв
(setq j 2)
(setq q 0)
(setq detal_lst_sum (reverse detal_lst_sum))
(repeat count_tel
(setq table_items1 (nth q detal_lst_sum))
(setq j (1+ j)
i -1
q (1+ q)
) ;_ конец setq
(repeat ncolumns
(setq i (1+ i)
val (nth i table_items1)
) ;_ конец setq
(if (= "str" (nth i types))
(progn
(vla-SetText tbl (1- j) i val)
(vla-SetCellAlignment
tbl
(1- j)
i
acBottomCenter
) ;_ конец vla-SetCellAlignment
; Выравнивание в ячейке по центру
) ;_ конец progn
(progn
(vla-SetText tbl (1- j) i (rtos val 2 2))
(vla-SetCellAlignment
tbl
(1- j)
i
acBottomRight
) ;_ конец vla-SetCellAlignment
; Выравнивание в ячейке
) ;_ конец progn
) ;_ конец if
) ;repeat ncolumns
) ;repeat по количеству выбранных деталей
(vla-Move tbl (vlax-3D-point pmin) (vlax-3D-point pmax));реальная точка вставки таблицы
(vla-ScaleEntity tbl (vlax-3D-point pmax) scalefactor)
(redraw)
;;----------------------------------------------------------------------------
(my_remove) ;; вызов сортировка по толщине МДФ
;;----------------------------------------------------------------------------
;;----------------------------------------------------------------------------
(writeex14_com ;; Вызов программа COM-связи AutoCAD - Excel
"C:\\Users\\Дмитрий\\Desktop\\MyLisp\\Спецификация_2" ; место нахождения файла Excel
"Спецификация" ; название листа Excel
) ;_ конец writeex14_com
;;----------------------------------------------------------------------------
(if (and vla_obj_5 (not (vlax-object-released-p vla_obj_5))) ; освобождение VLA объектов
(vlax-release-object vla_obj_5)
) ;_ конец if
(if (and vla_obj_4 (not (vlax-object-released-p vla_obj_4))); освобождение VLA объектов
(vlax-release-object vla_obj_4)
) ;_ конец if
(if (and tbl (not (vlax-object-released-p tbl))) ; освобождение VLA объектов
(vlax-release-object tbl)
) ;_ конец if
(if (and vla_obj (not (vlax-object-released-p vla_obj))); освобождение VLA объектов
(vlax-release-object vla_obj)
) ;_ конец if
;;----------------------------------------------------------------------------
(command "_.UCS" "_w") ;возврат в МСК
(setvar "CMDECHO" old_echo) ;восстановление режима эхо-вывода
(setvar "regenmode" 1) ; включение регенерации
(setvar "osmode" old_osm) ;включаю привязки
(setq old_osm nil)
(gc) ;; Сборка мусора
(vla-endundomark active_document) ; окончание группы отмены
) ; end_defun c:mp_spec1
;;----------------------------------------------------------------------------
;; функция определения габаритов 3D тела, подсчёт площади материалов
;;----------------------------------------------------------------------------
;;===============================================================================================
;;пересечение списков
;;===============================================================================================
;;===============================================================================================
;;функция для округления чисел.
;;===============================================================================================
;;==============================================================================================
;; Программа ex11_set_connect ( Установка связи с Excel)
;;==============================================================================================
;;==============================================================================================
;; Программа ex_break_connect ( Разрыв связи с Excel и выгрузка из памяти)
;; Освобождаем объекты, связанные с Excel, для корректной выгрузки Excel из памяти
;;==============================================================================================
;;==============================================================================================
;; Программа записи из AutoCAD в Excel
;;===============================================================================================
;End defun (Программа записи из AutoCAD в Excel )
;;===============================================================================================
;;определение толщины МДФ
;;===============================================================================================
(defun my_remove (/ d_l_s1 d_l_s4 d_l_s6 d_l_s8 d_l_s10 d_l_s12 d_l_s16 d_l_s18
d_l_s22 d_l_s25 detal_lst_1
) ;_ конец /
(setq d_l_s detal_lst_sum)
(repeat count_tel ;выбор совпадения по типу МДФ
(setq detal_lst_1 (car d_l_s))
(setq d_l_s (cdr d_l_s))
(cond ((= "---" (nth 6 detal_lst_1))
(setq d_l_s1 (cons detal_lst_1 d_l_s1))
)
(
(= "МДФ4" (nth 6 detal_lst_1))
(setq d_l_s4 (cons detal_lst_1 d_l_s4))
)
(
(= "МДФ6" (nth 6 detal_lst_1))
(setq d_l_s6 (cons detal_lst_1 d_l_s6))
)
(
(= "МДФ8" (nth 6 detal_lst_1))
(setq d_l_s8 (cons detal_lst_1 d_l_s8))
)
(
(= "МДФ10" (nth 6 detal_lst_1))
(setq d_l_s10 (cons detal_lst_1 d_l_s10))
)
(
(= "МДФ12" (nth 6 detal_lst_1))
(setq d_l_s12 (cons detal_lst_1 d_l_s12))
)
(
(= "МДФ16" (nth 6 detal_lst_1))
(setq d_l_s16 (cons detal_lst_1 d_l_s16))
)
(
(= "МДФ18" (nth 6 detal_lst_1))
(setq d_l_s18 (cons detal_lst_1 d_l_s18))
)
(
(= "МДФ22" (nth 6 detal_lst_1))
(setq d_l_s22 (cons detal_lst_1 d_l_s22))
)
(
(= "МДФ25" (nth 6 detal_lst_1))
(setq d_l_s25 (cons detal_lst_1 d_l_s25))
)
(
(= "МДФ4 + шпон" (nth 6 detal_lst_1))
(setq d_l_s4 (cons detal_lst_1 d_l_s4))
)
(
(= "МДФ6 + шпон" (nth 6 detal_lst_1))
(setq d_l_s6 (cons detal_lst_1 d_l_s6))
)
(
(= "МДФ8 + шпон" (nth 6 detal_lst_1))
(setq d_l_s8 (cons detal_lst_1 d_l_s8))
)
(
(= "МДФ10 + шпон" (nth 6 detal_lst_1))
(setq d_l_s10 (cons detal_lst_1 d_l_s10))
)
(
(= "МДФ12 + шпон" (nth 6 detal_lst_1))
(setq d_l_s12 (cons detal_lst_1 d_l_s12))
)
(
(= "МДФ16 + шпон" (nth 6 detal_lst_1))
(setq d_l_s16 (cons detal_lst_1 d_l_s16))
)
(
(= "МДФ18 + шпон" (nth 6 detal_lst_1))
(setq d_l_s18 (cons detal_lst_1 d_l_s18))
)
(
(= "МДФ22 + шпон" (nth 6 detal_lst_1))
(setq d_l_s22 (cons detal_lst_1 d_l_s22))
)
(
(= "МДФ25 + шпон" (nth 6 detal_lst_1))
(setq d_l_s25 (cons detal_lst_1 d_l_s25))
)
) ;_ конец cond
) ;_ конец repeat
;;; (setq d_l_s0 (cons '("" "" "" "" "" "" "" "" "") d_l_s0))
(setq
detal_lst_sum
(append d_l_s4 d_l_s6 d_l_s8 d_l_s10 d_l_s12 d_l_s16 d_l_s18 d_l_s22
d_l_s25 d_l_s1
) ;_ конец append
) ;_ конец setq
(setq count_tel (length detal_lst_sum))
) ;_ конец defun
;;===============================================================================================
;;диалог DCL
;;===============================================================================================
2. Программа автоматической нумерации листов
;| ********************************************
;* Нумерация листов в штампах и названиях layout(a)
;; Автор: Шинин Дмитрий, 2016
;;Замечания и предложения по адресу divash@yandex.ru
;* Большая благодарность Виталию Зуенко
;* Штамп должен быть блоком с атрибутом с тэгом "PAGE" или "ЛИСТ"
;* Вызов: кнопка: ^C^C_mp_nomer
;***********************************************|;
(defun c:mp_nomer (/
dcl_id
what_next
l_layout
t_nstart
t_ncount
tg_layout
tg_page
layout_lst
n
ss
ent
obj
string
name_list
custom_layout
string1
n_sum
layout_lst_s
n1
) ; после / временные переменные
(vl-load-com) ; Для того, чтобы начать работать с операторами,
; входящими в расширение языка
; AutoLISP, нам нужно запустить оператор (vl-load-com),
; которая их загружает
(vla-StartUndoMark
(vla-Get-ActiveDocument (vlax-Get-Acad-Object))
; (vla-startundomark active_document) - начало
; группы для отмены
) ;_ конец vla-StartUndoMark
(setvar "cmdecho" 0) ;Системная переменная CMDECHO определяет,
; будут ли отображаться в командной строке
; приглашения и параметры при работе функции COMMAND.
; По умолчанию режим отображения включен —
; текущее значение системной переменной равно 1. Если
; изменить это значение на 0, то режим
; отображения отключится.
;;; Составление списка листов layout_lst
(setq layout_lst ; в переменной layout_lst будет храниться
; результат
; выполнения
; оператора
(mapcar ;( MAPCAR 'f l1 l2 ... ln ), т.е. список имен листов
'car
(vl-sort ; (vl-sort <список> '<функция сравнения>) - сортирует элементы в списке
(mapcar ;возможность изменить значение отдельного элемента
; списка с помощью (mapcar). У нас список это (mapcar '(lambda (layout) (cons layout (vla-get-taborder
;(vla-item (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object) ) )
;Перед функцией '(lambda) нужно ставить апостроф, потому что MAPCAR нужна
; просто ссылка на то место в памяти, где эта функция находится, а не результат выполнения этой функции.
'(lambda
(layout)
(cons layout
(vla-get-taborder
(vla-item
(vla-get-layouts
(vla-get-activedocument
(vlax-get-acad-object)
) ;_ vla-get-activedocument
) ;_ vla-get-layouts
layout
) ;_ vla-item
) ;_ vla-get-taborder
) ;_ cons
) ;_ lambda
(layoutlist)
) ;_ mapcar
'(lambda (a1 a2) (< (cdr a1) (cdr a2))) ; а функция сравнения это '(lambda (a1 a2) (< (cdr a1) (cdr a2)))
) ;_ vl-sort
) ;_ mapcar
) ;_ setq завершение составление списка листов layout_lst
(lispru-dcl) ; вызов диалога
(if (= what_next 1)
(progn
(setq layout_lst
(mapcar '(lambda (n) (nth (atoi n) layout_lst))
(z-string-list-separator " " l_layout)
) ;_ mapcar
) ;_ setq
(setq n (atoi t_nstart))
(setq layout_lst_s layout_lst)
(setq n1 n)
(if (= sum_uzer "X") ; ;; если пользователь хочет сам задать общее количество листов, sum_uzer не равно Х
(setq n_sum (length layout_lst_s))
(setq n_sum (atoi sum_uzer))
) ;_ if
;;; Нумерация в штампе
;;; штамп должен быть блоком и содержать атрибут с тегом "PAGE" или "ЛИСТ"
(setq n (atoi t_nstart))
(if (= tg_page "1") ; список имен выбранных листов layout_lst_s
(foreach layout layout_lst_s ; (foreach) цикл , поочередно подставляет вместо layout элементы списка layout_lst_s
; в выполняемые выражения (if...
(if
(setq
ss (ssget
"x" ; выбор всех блоков
(list ; создает набор блоков у которых есть атрибут (66 . 1)
'(0 . "INSERT")
'(66 . 1)
(cons 410
(nth (- n (atoi t_nstart)) layout_lst_s)
) ;_ cons
) ;_ list
) ;_ ssget
) ;_ setq
(foreach ent
(vl-remove-if
'(lambda (a) (listp a))
(mapcar 'cadr (ssnamex ss))
) ;_ vl-remove-if
(while (setq ent (entnext ent))
(if (or (= (cdr (assoc 2 (entget ent))) "PAGE")
(= (cdr (assoc 2 (entget ent))) "ЛИСТ")
) ;_ конец or
(progn
(setq obj (vlax-ename->vla-object ent))
(vla-put-textstring obj (itoa n))
(vlax-release-object obj)
) ;_ progn
) ;_ if
) ;_ while
) ;_ foreach
) ;_ if
(setq n (1+ n))
) ;_ foreach
) ;_ if
;;; Нумерация в штампе
;;; штамп должен быть блоком и содержать атрибут с тегом "PAGES" или "ЛИСТОВ"
;общее количесво листов в штампе по маске n_sum_mask
(if (= n_sum_mask "1") ; список имен выбранных листов layout layout_lst_s
(foreach layout layout_lst_s ; (foreach) цикл , поочередно подставляет вместо layout элементы списка layout layout_lst_s
; в выполняемые выражения (if...
(if
(setq
ss (ssget
"x" ; выбор всех блоков
(list ; создает набор блоков у которых есть атрибут (67 . 1)
'(0 . "INSERT")
'(67 . 1)
(cons 410
(nth (- n1 (atoi t_nstart)) layout_lst_s)
) ;_ cons
) ;_ list
) ;_ ssget
) ;_ setq
(foreach ent ; (foreach) цикл , поочередно подставляет вместо ent
;элементы списка (vl-remove-if '(lambda (a) (listp a)) (mapcar 'cadr (ssnamex ss)))
; в выполняемые выражения (while...
(vl-remove-if
'(lambda (a) (listp a))
(mapcar 'cadr (ssnamex ss))
) ;_ vl-remove-if
(while (setq ent (entnext ent))
(if (or (= (cdr (assoc 2 (entget ent))) "PAGES")
(= (cdr (assoc 2 (entget ent))) "ЛИСТОВ")
) ;_ конец or
(progn
(setq obj (vlax-ename->vla-object ent))
(vla-put-textstring obj (itoa n_sum))
(vlax-release-object obj)
) ;_ progn
) ;_ if
) ;_ while
) ;_ foreach
) ;_ if
(setq n1 (1+ n1))
) ;_ foreach
) ;_ if
;;; Нумерация названий листов(Layout)
(setq n (atoi t_nstart))
(if (= tg_layout "1")
(foreach layout layout_lst
(setq obj
(vla-item
(vla-get-layouts
(vla-get-activedocument
(vlax-get-acad-object)
) ;_ vla-get-activedocument
) ;_ vla-get-layouts
layout
) ;_ vla-item
) ;_ setq
(if (= custom_layout "0") ; если не надо сохранить пользовательские имена листов
(progn
(vla-put-name obj "z")
(setq string (vla-get-name obj))
) ;_ progn
(setq string (vla-get-name obj))
) ;_ if
(if (=
(vl-string-left-trim "0123456789" string)
(vl-string-left-trim
" _"
(vl-string-left-trim "0123456789" string)
) ;_ vl-string-left-trim
) ;_ =
(setq string (strcat
(_z_number_mask n (atoi t_ncount))
" "
string
) ;_ strcat
) ;_ setq
(setq string
(strcat
(_z_number_mask n (atoi t_ncount))
" "
(vl-string-left-trim
" "
(vl-string-left-trim "0123456789" string)
) ;_ vl-string-left-trim
) ;_ strcat
) ;_ setq
) ;_ if
(if (= custom_layout "0") ; если не надо сохранить пользовательские имена листов
(setq string1 (vl-string-right-trim " z" string))
(setq string1 string)
) ;_ if
(vla-put-name obj string1)
(vlax-release-object obj)
(setq n (1+ n))
) ;_ foreach
) ;_ if
) ;_ progn
) ;_ if
(vla-EndUndoMark
|