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

Вернуться   Форум 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.
Просмотров: 19853
 
Непрочитано 19.12.2014, 11:55
#2
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от 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,047


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,047


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,047


таблицы
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,047


Цитата:
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
Сообщений: 188
Отправить сообщение для nolte с помощью Skype™


поможет надеюсь
Вложения
Тип файла: rar samopal.rar (5.92 Мб, 395 просмотров)
__________________
Знание лисп: со справочником Н. Полещука
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
С.-Петербург
Сообщений: 39,787


Цитата:
Сообщение от 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,047


методом научного тыка
Код:
[Выделить все]
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
г. Норильск
Сообщений: 451


Всем привет!

Подскажите, плиз, как получить точку положения текста в ячейке?
Ту, которая (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 вне форума  
Ответ
Вернуться   Форум 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