Lisp. Работа с таблицами AutoCAD
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp. Работа с таблицами AutoCAD

Lisp. Работа с таблицами AutoCAD

Ответ
Поиск в этой теме
Непрочитано 19.12.2014, 11:43 #1
Lisp. Работа с таблицами AutoCAD
SNIIP
 
Регистрация: 04.05.2010
Сообщений: 338

Разбираюсь с созданием таблицы из под лиспа. Прочитал на форуме темы. Научился создавать таблицу, заполнять ее на основе лиспа:
Код:
[Выделить все]
(defun C:demo-tablo()
(vl-load-com)
;; Список наименований столбцов
(setq tabelle_ueberschrift (list "Столбец 1"
"Столбец 2"
"Столбец 3"
"Столбец 4"
)
)
; список текста порядно:
;;; (setq tabellen_liste
;;; (list (list "1.1" "2.1" "3.1" "4.1")
;;; (list "1.2" "2.2" "3.2" "4.2")
;;; (list "1.3" "2.3" "3.4" "4.3")
;;; (list "1.4" "2.4" "3.5" "4.4")
;;; )
;;; )

;список текста в ячейках построчно:
(setq tabellen_liste
(list (list "1.1" "1.2" "1.3" "1.4")
(list "2.1" "2.2" "2.3" "2.4")
(list "3.1" "3.2" "3.3" "3.4")
(list "4.1" "4.2" "4.3" "4.4")
)
)
;; вставка табличного объекта
(setq vlaxchen_tabelle
(vla-addtable
;; в пространство модели
(vla-get-modelspace (vla-get-activedocument 
(vlax-get-acad-object)))
;; точка вставки
(vlax-3d-point (list 0 0 0))
;; число ячеек
(+ (length tabellen_liste) 2)
;; число столбцов
(length tabelle_ueberschrift)
;; высота строки
500.0
;; ширина столбца
3000.0
)
)
;; заполнение заголовка таблицы
(vla-settext
vlaxchen_tabelle
0
0
"Название таблицы"
)
;; выравнивание в ячейке
(vla-setcellalignment vlaxchen_tabelle 0 0 acmiddlecenter);0 0
;; высота текста в ячейке
(vla-setcelltextheight vlaxchen_tabelle 0 0 300.);5
;; начальный индекс цикла
(setq spalte 0)
(foreach item tabelle_ueberschrift
;; шапка таблицы
(vla-settext vlaxchen_tabelle 1 spalte item)
;; выравнивание
(vla-setcellalignment vlaxchen_tabelle 1 spalte acmiddlecenter)
;; высота текста
(vla-setcelltextheight vlaxchen_tabelle 1 spalte 250.)
;; следующий цикл
(setq spalte (1+ spalte))
)
;; начало со 2-й ячейки (первая - нулевая - название таблицы)
(setq zeile 2);2
;; первая строка
(setq spalte 0)
;; цикл по ячейкам
(foreach zeilen tabellen_liste
;; Заполнение ячеек:
(foreach item zeilen
;; ввод текста
(vla-settext vlaxchen_tabelle zeile spalte item)
;; выравнивание
(vla-setcellalignment vlaxchen_tabelle zeile spalte 
acmiddlecenter)
;; высота текста
(vla-setcelltextheight vlaxchen_tabelle zeile spalte 250.);1.65
;; следующий цикл
(setq spalte (1+ spalte))
)
;; следующая ячейка
(setq zeile (1+ zeile))
;; обнуляем цикл
(setq spalte 0)
)

(princ)
)
(C:demo-tablo)
Теперь интересует следующее...
1 - как объединить некоторые ячейки,
2 как задать разные ширины столбцов
3 как настроить границы у ячеек?? или у всей таблицы?
4 и как еще удалить столбцы или строки?

Последний раз редактировалось SNIIP, 19.12.2014 в 11:52.
Просмотров: 22667
 
Непрочитано 19.12.2014, 11:55
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,378


Цитата:
Сообщение от SNIIP Посмотреть сообщение
1 - как объединить некоторые ячейки,
См.Merge
Цитата:
Сообщение от SNIIP Посмотреть сообщение
2 как задать разные ширины столбцов
См.свойство Width у колонки
Цитата:
Сообщение от SNIIP Посмотреть сообщение
3 как настроить границы у ячеек?? или у всей таблицы?
Насколько я помню, только через стиль
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.12.2014, 12:01
#3
SNIIP


 
Регистрация: 04.05.2010
Сообщений: 338


Алексей, я пока плохо понимаю vla методы, можно для чайника:
(vla-settext vlaxchen_tabelle zeile spalte item)
vla-settext - функция записи - возникает вопрос... а где посмотреть функции работы с таблицами? в справке что то я не нашел


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
См.Merge
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
См.свойство Width у колонки
я так понимаю задается типа ("функция_установки_свойства" Width 400) .. в общем опять вернулся к первому вопросу ) :
а где посмотреть функции работы с таблицами? (и синтаксис их описания)
SNIIP вне форума  
 
Непрочитано 19.12.2014, 12:02
1 | #4
trir


 
Регистрация: 18.12.2010
Сообщений: 5,101


RTFM
1
2
3
4 Columns, Rows

Update: офф. 1
trir вне форума  
 
Автор темы   Непрочитано 19.12.2014, 12:02
#5
SNIIP


 
Регистрация: 04.05.2010
Сообщений: 338


одна маленькая проблема: на работе доступ только к форуму DWG и не могу перейти по вашим ссылкам)
SNIIP вне форума  
 
Непрочитано 19.12.2014, 12:13
#6
trir


 
Регистрация: 18.12.2010
Сообщений: 5,101


VBA стоит?

http://knowledge.autodesk.com то же закрыт???

Update: Вообщем это справка к VBA, в последних версиях там есть примеры на Lisp'е

Последний раз редактировалось trir, 19.12.2014 в 12:20.
trir вне форума  
 
Автор темы   Непрочитано 19.12.2014, 12:24
#7
SNIIP


 
Регистрация: 04.05.2010
Сообщений: 338


этот открыт сайт... блин, а можно ссылку тыкнуть про таблицы где там? ато я потерялся что то
SNIIP вне форума  
 
Непрочитано 19.12.2014, 12:28
#8
trir


 
Регистрация: 18.12.2010
Сообщений: 5,101


таблицы
trir вне форума  
 
Автор темы   Непрочитано 19.12.2014, 12:47
#9
SNIIP


 
Регистрация: 04.05.2010
Сообщений: 338


Разобрался с шириной, спасибо.. с удаление затупил, написано:
VBA:

object.DeleteRows row, Rows


пишу так:
(vla-Deleterows vlaxchen_tabelle 0)

что не так?
SNIIP вне форума  
 
Непрочитано 19.12.2014, 12:51
#10
trir


 
Регистрация: 18.12.2010
Сообщений: 5,101


Цитата:
row

Long; the row index

Rows

Long; the number of rows to delete from the table
Удаляешь 0 строк
trir вне форума  
 
Непрочитано 19.12.2014, 14:40
#11
nolte

спринклеры, сантехника
 
Регистрация: 26.01.2010
Сообщений: 190
Отправить сообщение для nolte с помощью Skype™


поможет надеюсь
Вложения
Тип файла: rar samopal.rar (5.92 Мб, 453 просмотров)
__________________
Знание лисп: со справочником Н. Полещука
nolte вне форума  
 
Автор темы   Непрочитано 22.12.2014, 11:44
#12
SNIIP


 
Регистрация: 04.05.2010
Сообщений: 338


Да, полезная штука) Еще вопрос немного не разобрался как ячейке настроить суффикс, префикс, и количество знаков после точки?

----- добавлено через ~3 ч. -----
И можно поделится книжечкой с корой накопированы те картинки?... желательно в сообщении прикрепить, ато как я писал уже.. нет доступа к Доунлоаду

----- добавлено через ~18 ч. -----
Алексей во 2м посте писал,что можно через стиль... В принципе покоповшись там я понял что можно вделать все, что мне нужно, остался один вопрос, как сохранить стиль в каком-нибудь файле и подгружать его ЛИСПом???
SNIIP вне форума  
 
Непрочитано 26.12.2014, 16:35
#13
DimaVP


 
Регистрация: 25.02.2014
Сообщений: 2


Код:
[Выделить все]
 (vla-SetCellDataType <Таблица> <Строка> <Столбец>  2 1);меняем формат ячейки
(vla-SetCellFormat <Таблица> <Строка> <Столбец>  "%lu2%pr2");меняем кол-во десятичных знаков 
DimaVP вне форума  
 
Автор темы   Непрочитано 29.12.2014, 05:34
#14
SNIIP


 
Регистрация: 04.05.2010
Сообщений: 338


Еще такая задача встала: Спрашваю у пользователя: выберите объекты: Он выбирает несколько текстов и мтекстов. Я беру этот набор, вытаскиваю из него текстовые значения и друг за другом записываю в таблицу. С таблицей я уже разобрался что да как... записать смогу. А как пробежаться по выбранным объектам" и вытащить из них текстовые значения?

----- добавлено через ~4 ч. -----
Разобрался сам по примерам... получилось так:
Код:
[Выделить все]
 (setq ssq (ssget))
(setq primlst nil)
(repeat  (setq item (sslength ssq))
(setq primlst (cons (ssname ssq (setq item (1- item))) primlst)))
(setq i -1)
(setq listok nil)
(repeat  (setq item (sslength ssq)) 
(setq listok (cons (vla-get-TextString (vlax-ename->vla-object (nth (setq i (+ i 1)  ) primlst))) listok)))
Много раз слышал про очень хорошую книгу Полещука про лисп и Activex. К сожалению нет доступа с доунлоаду и никаким другим сайтам... Можно ее прикрепить в этой теме? буду очень признателен.

----- добавлено через ~5 ч. -----
Еще проблеам возникла: пытаюсь вытащить Y точки вставки у тексат:

Код:
[Выделить все]
 (vla-get-InsertionPoint (vlax-ename->vla-object (nth (setq i (+ i 1)  ) primlst)))
выдается: #<variant 8197 ...>
а как мне в таком виде получить? : (-325552.0 147274.0 5.16988e-025)
в описании так: InsertionPoint = (-325552.0 147274.0 5.16988e-025)
SNIIP вне форума  
 
Непрочитано 29.12.2014, 11:24
#15
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,378


Цитата:
Сообщение от SNIIP Посмотреть сообщение
а как мне в таком виде получить? : (-325552.0 147274.0 5.16988e-025)
http://forum.dwg.ru/showthread.php?t...E2%E0%ED%E8%E5
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.02.2015, 12:35
#16
Wolkodaw


 
Регистрация: 21.04.2009
Тюмень
Сообщений: 97


Код:
[Выделить все]
(vla-SetCellDataType <Таблица> <Строка> <Столбец>  2 1);меняем формат ячейки
(vla-SetCellFormat <Таблица> <Строка> <Столбец>  "%lu2%pr2");меняем кол-во десятичных знаков
У меня после применения первой строчки кода значение становится типа "1,7750", после второй строчки - "1.78" (пропадает запятая). Как можно привести к виду "1,778"? И что означает "%lu2%pr2"? Где посмотреть другие варианты этого значения?
Wolkodaw вне форума  
 
Непрочитано 11.02.2015, 14:33
#17
trir


 
Регистрация: 18.12.2010
Сообщений: 5,101


методом научного тыка
Код:
[Выделить все]
RetVal = object.GetCellFormat(row, col)
trir вне форума  
 
Непрочитано 11.02.2015, 14:55
#18
Wolkodaw


 
Регистрация: 21.04.2009
Тюмень
Сообщений: 97


Цитата:
Сообщение от trir Посмотреть сообщение
методом научного тыка
Код:
[Выделить все]
RetVal = object.GetCellFormat(row, col)
Я не настолько силен в лиспе, но эта функция по-моему только читаешь текущий формат. Но ты навел меня на мысль - прочитать формат нужный мне. Получил вот такую конструкцию - "%lu2%pr3%ds44". Вот теперь все получается)))
Wolkodaw вне форума  
 
Непрочитано 26.10.2018, 09:20
#19
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 613


Всем привет!

Подскажите, плиз, как получить точку положения текста в ячейке?
Ту, которая (10 Х У Z). Это в идеале.
Если очень сложно - подойдёт и нижний-левый угол ячейки таблицы.

Вот, есть у нас, скажем, указатель на таблицу:

(setq obj (vlax-EName->vla-Object (car (entsel "Выбери:"))))

и интересует ячейка 3:4

Как должна выглядеть строка?

(vla-Get_чего_здесь_указать obj 3 4)

----- добавлено через ~3 ч. -----
Да, получив через (entget) коды 10, 91, 92 и соответствующие
группы кодов 141 и 142 все четыре угла "необъединённой"
ячейки я вычислить могу, но, может быть, можно проще?
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 12.12.2018, 19:23
#20
tsetse

Инженер-конструктор
 
Регистрация: 25.12.2015
Москва
Сообщений: 77


Цитата:
Сообщение от SNIIP Посмотреть сообщение
Разбираюсь с созданием таблицы из под лиспа. Прочитал на форуме темы. Научился создавать таблицу, заполнять ее на основе лиспа:
Теперь интересует следующее...
1 - как объединить некоторые ячейки,
2 как задать разные ширины столбцов
3 как настроить границы у ячеек?? или у всей таблицы?
4 и как еще удалить столбцы или строки?
Код:
[Выделить все]
 
(vla-MergeCells table i j i1 j1 )
; i j - строка и столбец начала объединения
; i1 j1 - строка и столбец конца объединения
;  table - таблица, в которой объединяем



(vla-SetCellGridVisibility table i j (+ actopMask acBottomMask acLeftMask acRightMask) p)
; настройка видимости borders
; i j - строка и столбец ячейки
;  acTopMask acBottomMask acLeftMask acRightMask верх низ лево право соответственно лишнее убрать
; p=0 скрыть  p=1 показать 


(vla-setCellGridColor table i j (+ actopMask acBottomMask acLeftMask acRightMask) color)
; настройка цвета borders
; color - задаем цвет

(vla-setColumnWidth arm_table i b)
; установка ширины столбца i
; b - число

(vla-setRowHeight arm_table i b)
; установка высоты строки i
; b - число
tsetse вне форума  
 
Непрочитано 10.07.2020, 11:09
#21
FatherAlexy


 
Регистрация: 10.07.2020
Сообщений: 1


Возможно, я не совсем по теме данной ветки, но при работе с таблицей автокада есть следующая проблема.
Имеются связанные таблицы в автокаде и экселе. При обновлении связей в автокаде в таблице некоторые ячейки меняют свой размер (в частности высоту ячейки) из-за того что текст ячейки не помешается при данном коэффициенте сжатия текста. Возможно ли сделать так, чтобы при выборе "проблемной" ячейки и нажатии написанного лиспа или макроса, коэффициент сжатия текста подбирался бы таким образом, чтобы он автоматически помещался в ячейку автокада заданной ширины и высоты. Сначала, конечно, нужно разблокировать ячейку...Если у кого есть какие мысли, буду признателен, если подскажите. Спасибо!
FatherAlexy вне форума  
 
Непрочитано 13.07.2020, 12:21
#22
Alexeipost


 
Регистрация: 07.12.2010
Уфа
Сообщений: 427
<phrase 1=


Я с помощью макроса редактирую таблицу.
Сначала делаю связь с таблицей эксель, вставляю таблицу в модель. Потом запускаю макрос. Он выставляет ширину каждого столбца, высоту текста и прочие настройки.
Пока только так
Alexeipost вне форума  
 
Непрочитано 26.10.2022, 14:14
#23
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 613


Всем привет!

Напомните, плиз, метод, позволяющий установить в ячейке
таблицы отступ текста по вертикали и горизонтали.

Не тип выравнивания SetCellAlignment, а именно сдвижку
текста по ячейке.

Собственно, борюсь со сдвижкой текста по вертикали, если
в нем попадается прописная "р" (с хвостиком ниже базовой
линии).
__________________
Счастливо, Алексей!

Последний раз редактировалось ===AAA===, 26.10.2022 в 14:40.
===AAA=== вне форума  
 
Непрочитано 26.10.2022, 14:47
1 | #24
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,378


Кажется, что-то связанное с Margin. Поищи в справке по ActiveX
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.03.2023, 11:31
#25
Sege


 
Регистрация: 05.07.2007
Санкт-Петебург
Сообщений: 110


Можно ли установить выравнивание ячеек во всей таблице? Т.е. без указание конкретного "адреса" ячейки методом vla-SetCellAlignment

UPD: после обновления данных Excel часто слетает выравнивание в таблице (сохранять форматирование excel - не всегда хорошо с точки зрения времени обновления)

Хочу к определенным колонкам таблицы применить требуемое выравнивание.
Если перебирать ВСЕ ячейки и применять к ним выравнивание, процесс может занять определенное время

Т.е. допустим
- после обновления связи с данными выравнивание становится рандомным
- делаю выравнивание ВСЕХ ячеек таблицы по центру
- а далее последовательное производим выравнивание ячеек определенного столбца таблицы "влево по центру" vla-SetCellAlignment (путем перебирания всех строк таблицы)

Последний раз редактировалось Sege, 24.03.2023 в 12:41.
Sege вне форума  
 
Непрочитано 24.03.2023, 18:14
#26
Alexeipost


 
Регистрация: 07.12.2010
Уфа
Сообщений: 427
<phrase 1=


Цитата:
Сообщение от Sege Посмотреть сообщение
Если перебирать ВСЕ ячейки и применять к ним выравнивание, процесс может занять определенное время
Надо отключать обновление экрана и обновление таблиц (какие именно команды смогу сказать в понедельник, когда буду на работе).
А так, да, именно перебором всё устанавливается
Alexeipost вне форума  
 
Непрочитано 24.03.2023, 18:29
#27
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,378


vla-put-tablesuppressed, кажется.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.03.2023, 08:11
#28
Sege


 
Регистрация: 05.07.2007
Санкт-Петебург
Сообщений: 110


vla-put-RegenerateTableSuppressed
она?
Sege вне форума  
 
Непрочитано 27.03.2023, 08:24
1 | #29
Alexeipost


 
Регистрация: 07.12.2010
Уфа
Сообщений: 427
<phrase 1=


Отключение регенерации таблицы: MyTable.RegenerateTableSuppressed=true
Потом включение регенерации (False) и регенерация таблицы: MyTable.RecomputeTableBlock
Alexeipost вне форума  
 
Непрочитано 27.03.2023, 09:19
#30
Sege


 
Регистрация: 05.07.2007
Санкт-Петебург
Сообщений: 110


Спасибо!
Отключил на время исполнения программы REGENMODE и RegenerateTableSuppressed
Все заработало в разы быстрее.
Sege вне форума  
 
Непрочитано 27.03.2023, 14:38
#31
csi


 
Регистрация: 02.04.2016
Сообщений: 12


Может кто подскажет, каким будет Lisp для:

1. Запуск Lisp
2. Выбор таблиц (если можно — все таблицы)
3. Вкл/Выкл регенерацию/тормоза (on/off)
csi вне форума  
 
Непрочитано 28.03.2023, 07:31
#32
Alexeipost


 
Регистрация: 07.12.2010
Уфа
Сообщений: 427
<phrase 1=


Не lisp конечно, но vba (хоть что-то)
Sub Sort_table_SKS()
Dim sSetObj As AcadSelectionSet
If ThisDrawing.SelectionSets.Count > 0 Then​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ 'Удаляем все наборы таблиц
​ ​ ​ For i = 0 To ThisDrawing.SelectionSets.Count - 1
​ ​ ​ ​ ​ ​ ​ If ThisDrawing.SelectionSets.Item(i).Name = "SSET" Then
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ThisDrawing.SelectionSets("SSET").Delete
​ ​ ​ ​ ​ ​ ​ End If
​ ​ ​ Next
End If
​ ​ ​ ​ Set sSetObj = ThisDrawing.SelectionSets.Add("SSET")​ ​ ​ ​ ​ ​ ​ ​ 'Создаем новый набор таблиц
Dim mode As Integer
Dim gpCode(0) As Integer
Dim dataValue(0) As Variant
Dim groupCode As Variant, dataCode As Variant
Dim oTab As AcadTable
Dim MyTable As AcadTable
Dim Proverka As String
Dim j As Integer
Dim KCells As Integer
Dim k As Integer
Dim S2 As String
mode = acSelectionSetAll
gpCode(0) = 0
dataValue(0) = "Acad_Table"
groupCode = gpCode
dataCode = dataValue
sSetObj.Select mode, , , groupCode, dataCode
For Each oTab In sSetObj 'Перебираем все таблицы в Модели
​ ​ ​ Set MyTable = oTab
​ ​ ​ ​ MyTable.RegenerateTableSuppressed = True 'Отключаем регенерацию таблиц для увеличения скорости работы
With MyTable​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ 'Форматируем таблицу (начало)
​ ​ ​ .SetColumnWidth 0, 20​ ​ ​ ​ ​ ​
​ ​ ​ ​ .SetColumnWidth 1, 80
​ ​ ​ .SetColumnWidth 2, 57
​ ​ ​ .SetColumnWidth 3, 28
​ ​ ​ .HorzCellMargin = 2
End With
For i = 0 To MyTable.Rows - 1
​ ​ ​ With MyTable
​ ​ ​ .SetCellTextHeight i, 0, 2.5
​ ​ ​ .SetCellAlignment i, 0, acMiddleCenter
​ ​ ​ .SetCellTextHeight i, 1, 2.5
​ ​ ​ .SetCellAlignment i, 1, acMiddleCenter
​ ​ ​ .SetCellTextHeight i, 2, 2.5
​ ​ ​ .SetCellAlignment i, 2, acMiddleCenter
​ ​ ​ .SetCellTextHeight i, 3, 2.5
​ ​ ​ .SetCellAlignment i, 3, acMiddleCenter
​ ​ ​ End With​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ 'Форматируем таблицу (конец)
Next i
​ ​ ​ MyTable.RegenerateTableSuppressed = False Включаем регенерацию таблицы
​ ​ ​ MyTable.RecomputeTableBlock (True)​ ​ ​ ​ ​ ​ 'Регенерируем таблицу
'Вкл. и выкл. Регенерации необходим, чтобы применились свойства таблицы, такие как высота, чтобы подшлифовать высоту строк чуть ниже.
'Если не регенерировать таблицы, то вот это вот If .GetRowHeight(i) > 10.1 Then​ ​ работать не будет.
​ ​ ​ MyTable.RegenerateTableSuppressed = True 'Отключаем регенерацию таблиц для увеличения скорости работы
For i = 0 To MyTable.Rows - 1
​ ​ ​ With MyTable
If .GetRowHeight(i) > 10.1 Then​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ 'Чтобы было красиво увеличиваем высоту строки до целого числа
​ ​ ​ k = Round(.GetRowHeight(i) + 2, 0)
​ ​ ​ .SetRowHeight i, k
​ ​ ​ Else
​ ​ ​ .SetRowHeight i, 8
​ ​ ​ End If
​ ​ ​ End With
Next i
With MyTable
​ ​ ​ .SetRowHeight 0, 10
​ ​ ​ .SetRowHeight 1, 10
​ ​ ​ .SetRowHeight 2, 10
End With
​ ​ ​ MyTable.RegenerateTableSuppressed = False 'Включаем регенерацию таблиц
​ ​ ​ MyTable.RecomputeTableBlock (True)​ ​ ​ ​ ​ ​ 'Регенерируем таблицу
Next oTab
sSetObj.Delete​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ 'Удаляем набор таблиц
End Sub
Alexeipost вне форума  
 
Непрочитано 04.10.2024, 10:56
#33
berstrider

инженер-проектировщик автомобильных дорог
 
Регистрация: 30.08.2017
Йошкар-Ола
Сообщений: 77


Здравствуйте.
Есть ли возможность Лиспом поменять Трекинг текста (расстояние между символами, не сжатие/растяжение) во всей таблице (или выбранных ячейках)?
berstrider вне форума  
 
Непрочитано 04.10.2024, 13:03
#34
name02


 
Регистрация: 10.01.2020
Сообщений: 408


Про всю таблицу не скажу - не пробовал, но скорее всего нет, а для одной ячейки можно реализовать добавив коды форматирования к существующему тексту:
(vla-setText myTable 0 1 "{\\T0.95;Марка кабеля по проекту}")

myTable - vla-object
0 - ряд
1 - колонка таблицы (нумерация рядов и колонок начинается с 0)
T0.95 - степень сжатия расстояния между символами (применяется к тексту внутри фигурных скобках)
name02 на форуме  
 
Непрочитано 04.10.2024, 14:35
#35
berstrider

инженер-проектировщик автомобильных дорог
 
Регистрация: 30.08.2017
Йошкар-Ола
Сообщений: 77


Цитата:
Сообщение от name02 Посмотреть сообщение
Про всю таблицу не скажу - не пробовал, но скорее всего нет, а для одной ячейки можно реализовать добавив коды форматирования к существующему тексту:
(vla-setText myTable 0 1 "{\\T0.95;Марка кабеля по проекту}")

myTable - vla-object
0 - ряд
1 - колонка таблицы (нумерация рядов и колонок начинается с 0)
T0.95 - степень сжатия расстояния между символами (применяется к тексту внутри фигурных скобках)
Спасибо. Но не то.
Это даже ещё хуже, чем ручками "Зашёл в ячейку, ctrl+A, выставил Трекинг, Enter".
berstrider вне форума  
 
Непрочитано 04.10.2024, 14:49
1 | #36
name02


 
Регистрация: 10.01.2020
Сообщений: 408


Я немного раздосадован...
Очень надеюсь ты не вручную менял номер ряда и колонки.
Вообще я имел ввиду то, что надо программно обойти ячейки таблицы и изменить текст внутри ячеек с помощью такого метода.
Как-то вот так, например test.lsp :
Код:
[Выделить все]
 (defun c:test (/ myTable row col cell_value)

  (setq myTable (vlax-ename->vla-object
                  (car (entsel))
                  ) ;_ end vlax-ename->vla-object
        ) ;_ end setq

  (vla-put-RegenerateTableSuppressed
    myTable
    :vlax-true
    ) ;_ end vla-put-RegenerateTableSuppressed

  (setq row 0)

  (repeat (vla-Get-rows myTable)

    (setq col 0)

    (repeat (vla-Get-columns myTable)

      (setq cell_value (vla-GetText myTable row col))
      ;; Устанавливаем сжатие интервала между буквами
      ;;для столбца 2 - 0,8 , для столбцов 1 и 3 - 0,6 (нумерация идет с 0)
      (cond
        ((member col '(2))
         (vla-setText myTable row col (strcat "{\\T0.8;" cell_value "}"))
         )
        ((member col '(1 3))
         (vla-setText myTable row col (strcat "{\\T0.6;" cell_value "}"))
         )
        (T nil)
        ) ;_ end of cond

      (setq col (1+ col))

      ) ;_ end repeat

    (setq row (1+ row))

    ) ;_ end repeat

  (vla-RecomputeTableBlock myTable :vlax-true)

  (vla-put-RegenerateTableSuppressed myTable :vlax-false)

  (princ)

  ) ;_ end defun
name02 на форуме  
 
Непрочитано 04.10.2024, 14:55
#37
berstrider

инженер-проектировщик автомобильных дорог
 
Регистрация: 30.08.2017
Йошкар-Ола
Сообщений: 77


Учиться мне надо, учиться и ещё раз учиться)

----- добавлено через ~26 мин. -----
Цитата:
Сообщение от name02 Посмотреть сообщение
Как-то вот так, например test.lsp :
Большое спасибо тебе, добрый человек.
Скрипт к одной таблице одноразовый, но мне подходит, один раз обработать.
berstrider вне форума  
 
Непрочитано 04.10.2024, 15:28
#38
name02


 
Регистрация: 10.01.2020
Сообщений: 408


Цитата:
Сообщение от berstrider Посмотреть сообщение
Скрипт к одной таблице одноразовый
Для удаления форматирования в том числе и таблиц (ячеек в таблицах) есть программа на лисп stripmtext https://forum.dwg.ru/showthread.php?t=24790&page=5
name02 на форуме  
 
Непрочитано 04.10.2024, 15:45
#39
berstrider

инженер-проектировщик автомобильных дорог
 
Регистрация: 30.08.2017
Йошкар-Ола
Сообщений: 77


Цитата:
Сообщение от name02 Посмотреть сообщение
Для удаления форматирования в том числе и таблиц (ячеек в таблицах) есть программа на лисп stripmtext https://forum.dwg.ru/showthread.php?t=24790&page=5
Знаю. Пользуюсь. Если запустить скрипт к пустой таблице, введённый после текст не отображается, но есть в таблице. Если почистить формат тем самым плагином SMT, то текст появляется.

Последний раз редактировалось berstrider, 06.10.2024 в 13:56.
berstrider вне форума  
 
Непрочитано 06.10.2024, 17:33
#40
berstrider

инженер-проектировщик автомобильных дорог
 
Регистрация: 30.08.2017
Йошкар-Ола
Сообщений: 77


Сразу после применения очистка форматирования трекинга через лисп stripmtext не работает, только Отмена помогает. Но если таблицу скопировать, или вырезать/вставить, то в новой копии SMT работает.
berstrider вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp. Работа с таблицами AutoCAD



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
Lisp. Как в лиспе извлечь размер дин блока. Corvin LISP 6 14.09.2014 18:42
LISP. Как изменить размер окна Autocad PDM LISP 10 26.03.2012 02:52
На что влияет высота и размер ячеек георешетки Ded_M03ay Прочее. Архитектура и строительство 2 30.08.2011 17:56
Lisp, таблицы и символы типа "в квадрате", "в кубе", "градус" Uduzr LISP 12 17.03.2010 16:40