|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Lisp. Работа с таблицами AutoCAD
Регистрация: 04.05.2010
Сообщений: 338
|
||
Просмотров: 22668
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,378
|
См.Merge
См.свойство Width у колонки Насколько я помню, только через стиль
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 04.05.2010
Сообщений: 338
|
Алексей, я пока плохо понимаю vla методы, можно для чайника:
(vla-settext vlaxchen_tabelle zeile spalte item) vla-settext - функция записи - возникает вопрос... а где посмотреть функции работы с таблицами? в справке что то я не нашел я так понимаю задается типа ("функция_установки_свойства" Width 400) .. в общем опять вернулся к первому вопросу ![]() а где посмотреть функции работы с таблицами? (и синтаксис их описания) |
|||
![]() |
|
||||
Регистрация: 18.12.2010
Сообщений: 5,101
|
VBA стоит?
http://knowledge.autodesk.com то же закрыт??? ![]() Update: Вообщем это справка к VBA, в последних версиях там есть примеры на Lisp'е Последний раз редактировалось trir, 19.12.2014 в 12:20. |
|||
![]() |
|
||||
Регистрация: 18.12.2010
Сообщений: 5,101
|
|
|||
![]() |
|
||||
Регистрация: 04.05.2010
Сообщений: 338
|
Да, полезная штука) Еще вопрос немного не разобрался как ячейке настроить суффикс, префикс, и количество знаков после точки?
----- добавлено через ~3 ч. ----- И можно поделится книжечкой с корой накопированы те картинки?... желательно в сообщении прикрепить, ато как я писал уже.. нет доступа к Доунлоаду ----- добавлено через ~18 ч. ----- Алексей во 2м посте писал,что можно через стиль... В принципе покоповшись там я понял что можно вделать все, что мне нужно, остался один вопрос, как сохранить стиль в каком-нибудь файле и подгружать его ЛИСПом??? |
|||
![]() |
|
||||
Регистрация: 04.05.2010
Сообщений: 338
|
Еще такая задача встала: Спрашваю у пользователя: выберите объекты: Он выбирает несколько текстов и мтекстов. Я беру этот набор, вытаскиваю из него текстовые значения и друг за другом записываю в таблицу. С таблицей я уже разобрался что да как... записать смогу. А как пробежаться по выбранным объектам" и вытащить из них текстовые значения?
----- добавлено через ~4 ч. ----- Разобрался сам по примерам... получилось так: Код:
----- добавлено через ~5 ч. ----- Еще проблеам возникла: пытаюсь вытащить Y точки вставки у тексат: Код:
а как мне в таком виде получить? : (-325552.0 147274.0 5.16988e-025) в описании так: InsertionPoint = (-325552.0 147274.0 5.16988e-025) |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,378
|
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 21.04.2009
Тюмень
Сообщений: 97
|
Код:
|
|||
![]() |
|
||||
Регистрация: 21.04.2009
Тюмень
Сообщений: 97
|
|
|||
![]() |
|
||||
Регистрация: 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 все четыре угла "необъединённой" ячейки я вычислить могу, но, может быть, можно проще?
__________________
Счастливо, Алексей! |
|||
![]() |
|
||||
Инженер-конструктор Регистрация: 25.12.2015
Москва
Сообщений: 77
|
Цитата:
Код:
|
|||
![]() |
|
||||
Регистрация: 10.07.2020
Сообщений: 1
|
Возможно, я не совсем по теме данной ветки, но при работе с таблицей автокада есть следующая проблема.
Имеются связанные таблицы в автокаде и экселе. При обновлении связей в автокаде в таблице некоторые ячейки меняют свой размер (в частности высоту ячейки) из-за того что текст ячейки не помешается при данном коэффициенте сжатия текста. Возможно ли сделать так, чтобы при выборе "проблемной" ячейки и нажатии написанного лиспа или макроса, коэффициент сжатия текста подбирался бы таким образом, чтобы он автоматически помещался в ячейку автокада заданной ширины и высоты. Сначала, конечно, нужно разблокировать ячейку...Если у кого есть какие мысли, буду признателен, если подскажите. Спасибо! |
|||
![]() |
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 613
|
Всем привет!
Напомните, плиз, метод, позволяющий установить в ячейке таблицы отступ текста по вертикали и горизонтали. Не тип выравнивания SetCellAlignment, а именно сдвижку текста по ячейке. Собственно, борюсь со сдвижкой текста по вертикали, если в нем попадается прописная "р" (с хвостиком ниже базовой линии).
__________________
Счастливо, Алексей! Последний раз редактировалось ===AAA===, 26.10.2022 в 14:40. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,378
|
Кажется, что-то связанное с Margin. Поищи в справке по ActiveX
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 05.07.2007
Санкт-Петебург
Сообщений: 110
|
Можно ли установить выравнивание ячеек во всей таблице? Т.е. без указание конкретного "адреса" ячейки методом vla-SetCellAlignment
UPD: после обновления данных Excel часто слетает выравнивание в таблице (сохранять форматирование excel - не всегда хорошо с точки зрения времени обновления) Хочу к определенным колонкам таблицы применить требуемое выравнивание. Если перебирать ВСЕ ячейки и применять к ним выравнивание, процесс может занять определенное время Т.е. допустим - после обновления связи с данными выравнивание становится рандомным - делаю выравнивание ВСЕХ ячеек таблицы по центру - а далее последовательное производим выравнивание ячеек определенного столбца таблицы "влево по центру" vla-SetCellAlignment (путем перебирания всех строк таблицы) Последний раз редактировалось Sege, 24.03.2023 в 12:41. |
|||
![]() |
|
||||
Регистрация: 07.12.2010
Уфа
Сообщений: 427
![]() |
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,378
|
vla-put-tablesuppressed, кажется.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 07.12.2010
Уфа
Сообщений: 427
![]() |
Не 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 |
|||
![]() |
|
||||
Регистрация: 10.01.2020
Сообщений: 408
|
Про всю таблицу не скажу - не пробовал, но скорее всего нет, а для одной ячейки можно реализовать добавив коды форматирования к существующему тексту:
(vla-setText myTable 0 1 "{\\T0.95;Марка кабеля по проекту}") myTable - vla-object 0 - ряд 1 - колонка таблицы (нумерация рядов и колонок начинается с 0) T0.95 - степень сжатия расстояния между символами (применяется к тексту внутри фигурных скобках) |
|||
![]() |
|
||||
инженер-проектировщик автомобильных дорог Регистрация: 30.08.2017
Йошкар-Ола
Сообщений: 77
|
Цитата:
Это даже ещё хуже, чем ручками "Зашёл в ячейку, ctrl+A, выставил Трекинг, Enter". |
|||
![]() |
|
||||
Регистрация: 10.01.2020
Сообщений: 408
|
Я немного раздосадован...
Очень надеюсь ты не вручную менял номер ряда и колонки. Вообще я имел ввиду то, что надо программно обойти ячейки таблицы и изменить текст внутри ячеек с помощью такого метода. Как-то вот так, например test.lsp : Код:
|
|||
![]() |
|
||||
инженер-проектировщик автомобильных дорог Регистрация: 30.08.2017
Йошкар-Ола
Сообщений: 77
|
|
|||
![]() |
|
||||
Регистрация: 10.01.2020
Сообщений: 408
|
Для удаления форматирования в том числе и таблиц (ячеек в таблицах) есть программа на лисп stripmtext https://forum.dwg.ru/showthread.php?t=24790&page=5
|
|||
![]() |
|
||||
инженер-проектировщик автомобильных дорог Регистрация: 30.08.2017
Йошкар-Ола
Сообщений: 77
|
Цитата:
Последний раз редактировалось berstrider, 06.10.2024 в 13:56. |
|||
![]() |
|
||||
инженер-проектировщик автомобильных дорог Регистрация: 30.08.2017
Йошкар-Ола
Сообщений: 77
|
Сразу после применения очистка форматирования трекинга через лисп stripmtext не работает, только Отмена помогает. Но если таблицу скопировать, или вырезать/вставить, то в новой копии SMT работает.
|
|||
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |