Сообщество программистов Autodesk в СНГ

ADN Club => AutoLisp / VisualLISP и DCL => Тема начата: ciril от 17-11-2015, 12:28:06

Название: получение имен стилей ячеек существующего табличного стиля
Отправлено: ciril от 17-11-2015, 12:28:06
Код - Auto/Visual Lisp [Выбрать]
  1. (vlax-map-collection
  2.    (vla-item (vla-get-dictionaries (vla-get-activedocument (vlax-get-acad-object))) "ACAD_TABLESTYLE")
  3.    (function
  4.      (lambda (стиль_таблицы / стили_ячеек)
  5.        (setq стили_ячеек (vlax-make-variant (vlax-make-safearray vlax-vbstring (cons 1 (vla-get-numcellstyles стиль_таблицы)))))
  6.        (vl-catch-all-error-message (vl-catch-all-apply 'vla-getcellstyles (list стиль_таблицы 'стили_ячеек))))))

LOG "lisp-значение не может быть приведено к данному типу ВАРИАНТА: стили_ячеек"

Как правильно получить имена стилей ячеек у существующего стиля таблицы?
Название: Re: получение имен стилей ячеек существующего табличного стиля
Отправлено: Александр Ривилис от 17-11-2015, 12:34:31
ciril
Привествую на форуме. Обрати внимание как следует форматировать код на форуме (у меня в подписи).
Название: Re: получение имен стилей ячеек существующего табличного стиля
Отправлено: Александр Ривилис от 17-11-2015, 13:43:00
Похоже этот метод (я о getcellstyles) не рабочий. Я задам вопрос в ADN DevHelp.
Название: Re: получение имен стилей ячеек существующего табличного стиля
Отправлено: ciril от 17-11-2015, 14:02:03
Тогда я немного переформулирую вопрос: как вообще получить имена стилей ячеек средствами AutoLISP? Во всех функциях изменениях стиля ячейки в качестве параметра фигурирует его имя, которое мне не удалось найти нигде.
Название: Re: получение имен стилей ячеек существующего табличного стиля
Отправлено: Александр Ривилис от 17-11-2015, 14:12:04
Боюсь что это как раз тот случай, когда средств VisualLisp недостаточно.
Название: Re: получение имен стилей ячеек существующего табличного стиля
Отправлено: ciril от 17-11-2015, 14:18:20
Спасибо. Осталось дождаться, что ответят ADN DevHelp.
Название: Re: получение имен стилей ячеек существующего табличного стиля
Отправлено: Александр Ривилис от 17-11-2015, 15:01:09
Спасибо. Осталось дождаться, что ответят ADN DevHelp.
Это будет не так быстро - сейчас начался сезон конференций. Как только будут новости - я сообщу. Пока же если есть потребность получить список имён CellStyle - смотри в сторону ObjectARX/AutoCAD .NET API
Название: Re: получение имен стилей ячеек существующего табличного стиля
Отправлено: Александр Ривилис от 17-11-2015, 15:27:04
ciril
Кстати, а для какой (или каких) версии AutoCAD ты пишешь эту программу?
Название: Re: получение имен стилей ячеек существующего табличного стиля
Отправлено: ciril от 17-11-2015, 16:01:40
Для 2014.
Название: Re: получение имен стилей ячеек существующего табличного стиля
Отправлено: ciril от 17-11-2015, 16:08:05
В сторону ObjectARX & .NET смотреть не могу ввиду отсутствия MS VS, ведь насколько я понял, arx компилированный без его метки просто не загружается АКАД.
Кстати, оффтоп, а dll, складываемых в ApplicationPlugins, касается? В смысле, необходимость наличия метки компилятора для корректной загрузки в АКАД.
Название: Re: получение имен стилей ячеек существующего табличного стиля
Отправлено: Александр Ривилис от 17-11-2015, 16:12:21
Если есть необходимость, то могу сделать arx-модуль, который будет экспортировать lisp-функцию, которая будет по имени (!!!) TableStyle возвращать список имён CellStyle. Это не сложно.
Название: Re: получение имен стилей ячеек существующего табличного стиля
Отправлено: Александр Ривилис от 17-11-2015, 16:16:23
В сторону ObjectARX & .NET смотреть не могу ввиду отсутствия MS VS, ведь насколько я понял, arx компилированный без его метки просто не загружается АКАД.
Есть бесплатные версии MS VS. Правда arx-и с их помощью сделать нельзя, а вот .NET-приложение - запросто.
стати, оффтоп, а dll, складываемых в ApplicationPlugins, касается? В смысле, необходимость наличия метки компилятора для корректной загрузки в АКАД.
.NET dll для AutoCAD ты можешь делать даже без MS VS - например при помощи SharpDevelop: http://www.icsharpcode.net/opensource/sd/
А вот arx можно делать только при помощи MS VS (C++) причем только определённых версий под конкретные версии AutoCAD.
Название: Re: получение имен стилей ячеек существующего табличного стиля
Отправлено: ciril от 17-11-2015, 16:25:08
Огромное спасибо, у меня эта задача сейчас носит скорее исследовательский характер, чем рабочая необходимость. И к сожалению, зависимость от arx в смысле версионности АКАДа, заставляет ограничивать себя в его использовании (все тоже отсутсnвие MS VS).
Название: Re: получение имен стилей ячеек существующего табличного стиля
Отправлено: Александр Ривилис от 18-11-2015, 02:16:56


Вызов:
Код - Auto/Visual Lisp [Выбрать]
  1. (TableStyleGetCellStyles "имя табличного стиля")
Возвращается список имён стилей ячеек.
Исходники и готовые arx-файлы для AutoCAD 2013 и 2014 приложил.


Название: Re: получение имен стилей ячеек существующего табличного стиля
Отправлено: ciril от 18-11-2015, 09:09:21
Спасибо!
Название: Re: получение имен стилей ячеек существующего табличного стиля
Отправлено: Александр Ривилис от 27-11-2015, 17:38:27
Получил ответ из ADN DevHelp. Метод GetCellStyles не работает ни в VisualLisp, ни в VBA, ни в .NET. Это баг, который будут исправлять. Так что предложенный мной вариант на данный момент единственное решение.
Название: Re: получение имен стилей ячеек существующего табличного стиля
Отправлено: Андрей Бушман от 06-12-2015, 21:19:25
Получил ответ из ADN DevHelp. Метод GetCellStyles не работает ни в VisualLisp, ни в VBA, ни в .NET. Это баг, который будут исправлять. Так что предложенный мной вариант на данный момент единственное решение.
Читать не пробовал, насколько я помню (т.к. не требовалось) а создавать стили ячеек средствами .NET в табличном стиле приходилось. Для AutoCAD 2009 некоторые вещи мне когда-то сделать не удалось. А вот в AutoCAD новее чем 2009, API был измен, в виду чего для более новых версий ограничение было снято (автор указал, что использует версию 2014).

Стиль ячейки может быть назначен конкретной ячейке, столбцу или строке. Можно попробовать программно перебрать эти элементы, получая имена стилей ячеек, назначенных им. Затем отфильтровать дублирующиеся имена стилей.

См. строки 401-404 кода здесь (http://bushman-andrey.blogspot.ru/2014/06/autocad_5.html) - по аналогии можно попробовать читать, а не назначать (сейчас под рукой акада у меня нет).

Нередко управляемые сборки я компилирую лишь для двух вариантов: для AutoCAD 2009 и для AutoCAD 2013. Они успешно работают в AutoCAD 2009-2016. Так что в плане совместимости с версиями AutoCAD, управляемые плагины находятся в более выгодном положении.

Метод GetCellStyles не работает ни в VisualLisp, ни в VBA, ни в .NET. Это баг, который будут исправлять.
Не работает во всех версиях акада до 2016 включительно?
Название: Re: получение имен стилей ячеек существующего табличного стиля
Отправлено: Александр Ривилис от 06-12-2015, 21:23:25
Не работает во всех версиях акада до 2016 включительно?
Именно.
средствами .NET
Это ключевые слова. Средствами не-lisp (ObjectARX) я уже дал решение. Баг относится к COM/ActiveX-интерфейсу, а в ObjectARX/AutoCAD .NET API его нет.
Название: Re: получение имен стилей ячеек существующего табличного стиля
Отправлено: Дима_ от 06-12-2015, 22:28:50
Когда я первый раз увидел эту тему - была мысль порыть dxf - но руки так и не дошли - думаю их там можно вытащить почти со 100% вероятностью.
з.ы. кстати, а автодеск в этом разрезе помочь не может?
Название: Re: получение имен стилей ячеек существующего табличного стиля
Отправлено: Александр Ривилис от 07-12-2015, 00:56:54
была мысль порыть dxf
Я "порыл". Но на полдороги плюнул на это дело. В DXF-файле действительно есть такая информация. Но из lisp'а/ObjectARX доступа к ней через DXF не видно (во всяком случае я сходу не нашел). Если средствами ObjectARX/AutoCAD .NET API этот вопрос решается, то зачем слишком усложнять?
Название: Re: получение имен стилей ячеек существующего табличного стиля
Отправлено: Macondo от 21-01-2016, 19:31:12
Можно ли средствами vlisp\active-x задать стиль для первой строки (или для каждой ячейки первой строки) стиль "Header"? Может, через vla-SetCellStyle (не нашёл информации по передаваемым параметрам).
P.S. Нашёл:
Код - Auto/Visual Lisp [Выбрать]
  1.  (vla-SetCellStyle vla-table 0 0 "_Header")
Название: Re: получение имен стилей ячеек существующего табличного стиля
Отправлено: Александр Ривилис от 21-01-2016, 20:35:10
Информация вообще-то вся в документации:
Цитировать
Signature

object.SetCellStyle nRow, nCol, szCellStyle

Object

Table
The objects this method applies to.

nRow

Long; Input-only
The row number of the cell to set.

nCol

Long; Input-only
The column number of the cell to set.

szCellStyle

String; Input-only
The cell style to set.