Автор: Dmitry Rudenko
Скрипт автоматически проставляет нумерацию "страниц" в правом верхнем углу листа
Тестировалось на:
Необходимые условия для работы скрипта:
on error resume next Dim ms Set ms = ThisDrawing.ModelSpace Dim ut Set ut = ThisDrawing.Utility ut.Prompt "Нумерация в правом верхнем углу" Dim myObj Dim ppt0, pt0 Dim list(999), Xpos(999), Ypos(999) '999 листов должно хватить, ятд Dim i, m m = 0 dim first first = ut.getinteger("Введите номер первого листа") first = first - 1 'прогоняем все объекты модели. если среди них есть блоки с определёнными названиями, сохраняем номер и точку вставки for i=0 to ms.count-1 set myObj = ms.Item(i) if (myObj.ObjectName = "AcDbBlockReference") then if (myobj.name = "КЖ-А1" OR myobj.name = "КЖ-А2" OR myobj.name = "КЖ-А3" OR myobj.name = "КЖ-А4") then m = m+1 'счётчик листов nabor myobj, i 'сохраняем координаты рамок и номер элемента в списке end if end if next Xsort 'запускаем функцию сортировки листов по положению в модели (слева направо) Ysort 'сортируем листы по Y 'нумеруем листы for i=1 to m set myObj = ms.Item(list(i)) CreateLayout myobj next ut.Prompt "Готово, проверяй!" ' ===== КОНЕЦ. Дальше функции ===== 'сохраняем координаты рамок и номер элемента в списке выбора Function nabor(myobj, i) pt0 = myobj.InsertionPoint ppt0 = ut.CreateSafeArrayFromVector(pt0) list(m)=i Xpos(m)=int(ppt0(0)) Ypos(m)=int(ppt0(1)/1000)*1000 End Function 'сортируем листы по X Function Xsort() on error resume next ut.Prompt "Сортировка по горизонтали" Dim a, b for a=1 to m-1 for b=1 to m-1 if Xpos(b)>Xpos(b+1) then temp = Xpos(b) Xpos(b) = Xpos(b+1) Xpos(b+1) = temp temp = list(b) list(b) = list(b+1) list(b+1) = temp temp = Ypos(b) Ypos(b) = Ypos(b+1) Ypos(b+1) = temp end if next next End Function 'сортируем листы по Y Function Ysort() on error resume next ut.Prompt "Сортировка по вертикали" Dim a, b for a=1 to m-1 for b=1 to m-1 if Ypos(b)<Ypos(b+1) then temp = Xpos(b) Xpos(b) = Xpos(b+1) Xpos(b+1) = temp temp = list(b) list(b) = list(b+1) list(b+1) = temp temp = Ypos(b) Ypos(b) = Ypos(b+1) Ypos(b+1) = temp end if next next End Function 'нумеруем листы Function CreateLayout(myobj) dim att att = myobj.GetAttributes() if att(0).TagString = "num" then att(0).TextString = first + i else att(1).TextString = first + i end if End Function