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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Какой код DXF для получения имени стиля таблицы?

Какой код DXF для получения имени стиля таблицы?

Ответ
Поиск в этой теме
Непрочитано 02.12.2022, 12:54 #1
Какой код DXF для получения имени стиля таблицы?
МишаИнженер
 
Регистрация: 14.12.2008
Сообщений: 1,134

Какой код DXF надо применить, чтобы получить "Имя стиля таблицы"?
Код:
[Выделить все]
 
  (setq TypeObj (strcase name)) 
  (cond 
	((eq TypeObj "ACAD TABLE")
		(setq StyleTable0 (assoc 370 dan))
	  	(setq StyleTable (cdr StyleTable0))
	)
	
  )
Просмотров: 2460
 
Непрочитано 02.12.2022, 13:02
1 | #2
Кулик Алексей aka kpblc
Moderator

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


https://autolisp.ru/2019/05/07/dxf-reference/
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 02.12.2022, 13:15
#3
МишаИнженер


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


В указанной вами книжке нашел на странице 147 (139) вроде соответствует код 342
342 - Hard pointer ID of the TABLESTYLE object
Программа выдает STYLETABLE0 = (342 . <Имя объекта: 1b058a2aa80>)
Что обозначает <Имя объекта: 1b058a2aa80>?
МишаИнженер вне форума  
 
Непрочитано 02.12.2022, 13:21
#4
Кулик Алексей aka kpblc
Moderator

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


Строковое представление ename-указателя на элемент базы чертежа.

----- добавлено через 33 сек. -----
Хотя что за программа - тайна
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 04.12.2022, 11:42
#5
МишаИнженер


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Строковое представление ename-указателя на элемент базы чертежа
Это строковое представление выглядит как Handle объекта, только состоит из 2 слов: <ИмяОбъекта 65464131654>
Поэтому добавил дополнительную функцию cdr чтобы вернуть только Handle из этого выражения.
Но почему в этой строке программа начала прекращать выполнение всех действий?
(Для проверки работы программы надо выделить таблицу на чертеже)
Код:
[Выделить все]
 
(while (setq el (car (entsel "\n Выбери объект:")))
;entsel выдает имя объекта и все остальное, car - Извлекает первый элемент из списка: имя объекта
;команды которые должны выполняться в цикле пока не будет пустой ввод
  (setq dan (entget el));получает список с характеристиками примитива
  (setq name0 (assoc 0 dan)) ;получаем имя объекта
  (setq name (cdr name0))
  (princ name)
;;;  (alert (strcat "Был выбран " name))
  (princ (strcat "Был выбран " name))
  (setq cLayer0 (assoc 8 dan)) ;получаем имя объекта
  (setq cLayer (cdr cLayer0))
  (setq cLWeight0 (assoc 370 dan)) ;получаем текущий вес линии
  (setq cLWeight (cdr cLWeight0))
  (setq cLType0 (assoc 6 dan)) ;получаем текущий тип линии
  (setq cLType (cdr cLType0))  
  (setq cLTypeScale0 (assoc 48 dan)) ;получаем текущий масштаб типа линии
  (setq cLTypeScale (cdr cLTypeScale0))
  (setq cColor0 (assoc 62 dan)) ;получаем текущий цвет
  (setq cColor (cdr cColor0))
  (setq cThick0 (assoc 39 dan)) ;получаем текующую толщину
  (setq cThick (cdr cThick0))
  
;Назначим текущим слой выбранного объекта (setvar "clayer" <имя слоя>)
  (setvar "clayer" cLayer)
  (princ (strcat (chr 10) "Был назначен текущий слой " (chr 34) cLayer (chr 34)))
;Назначим текущий вес линий
  (cond ((eq cLWeight nil)
		(setvar "CELWEIGHT" -1)
		(princ (strcat (chr 10) "Был назначен текущий вес линий " (chr 34) "ПоСлою" (chr 34)))
		)
	((eq cLWeight -2)
		(setvar "CELWEIGHT" -2)
		(princ (strcat (chr 10) "Был назначен текущий вес линий " (chr 34) "ПоБлоку" (chr 34)))
		)
	((eq cLWeight -3)
		(setvar "CELWEIGHT" -3)
		(princ (strcat (chr 10) "Был назначен текущий вес линий " (chr 34) "ПоУмолчанию" (chr 34)))
		)
	(t 
		(setvar "CELWEIGHT" cLWeight)
		(princ (strcat (chr 10) "Был назначен текущий вес линий " (chr 34) (rtos (/ cLWeight 100.0)) (chr 34)))
	)
   )
;Назначим текущий тип линии
  (cond ((eq cLType nil)
		(setvar "CELTYPE" "ByLayer")
		(princ (strcat (chr 10) "Был назначен текущий тип линий " (chr 34) "ПоСлою" (chr 34)))
		)
	(t 
		(setvar "CELTYPE" cLType)
		(princ (strcat (chr 10) "Был назначен текущий тип линий " (chr 34) cLType (chr 34)))
	)
   )
;Назначим текущий масштаб типа линии
  (cond ((eq cLTypeScale nil)
		(setvar "CELTSCALE" 1)
		(princ (strcat (chr 10) "Был назначен текущий масштаб типа линий " (chr 34) "1" (chr 34)))
		)
	(t 
		(setvar "CELTSCALE" cLTypeScale)
		(princ (strcat (chr 10) "Был назначен текущий масштаб типа линий " (chr 34) (rtos cLTypeScale) (chr 34)))
	)
   )
;Назначим ткущий цвет чертежа
  (cond ((eq cColor nil)
		(setvar "CECOLOR" "ByLayer")
		(princ (strcat (chr 10) "Был назначен текущий цвет " (chr 34) "ПоСлою" (chr 34)))
		)
	((eq cColor 0)
		(setvar "CECOLOR" "ByBlock")
		(princ (strcat (chr 10) "Был назначен текущий цвет " (chr 34) "ПоБлоку" (chr 34)))
		)
	(t 
		(setvar "CECOLOR" (rtos cColor))
		(princ (strcat (chr 10) "Был назначен текущий цвет " (chr 34) (rtos cColor) (chr 34)))
	)
   )
;Назначаем текущую толщину
  (cond ((eq cThick nil)
		(setvar "THICKNESS" 0)
		(princ (strcat (chr 10) "Была назначена текущая толщина " (chr 34) "0" (chr 34)))
		)
	(t 
		(setvar "THICKNESS" cThick)
		(princ (strcat (chr 10) "Была назначена текущая толщина " (chr 34) (rtos cThick) (chr 34)))
	)
   )
;Назначим особые свойства для сложных объектов
  (setq TypeObj (strcase name)) 
  (cond 
	((eq TypeObj "ACAD_TABLE")
		(setq StyleTable0 (assoc 342 dan))
		(setq StyleTable (cdr (cdr StyleTable0)));Почему здесь функция останавливает выполнение работы?
	 	(princ StyleTable)
	)
  )
)
МишаИнженер вне форума  
 
Непрочитано 04.12.2022, 13:13
#6
Кулик Алексей aka kpblc
Moderator

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


Предлагаю несколько вариантов:
1. Ты находишь в недрах форума "САПР на базе AutoCAD - как это делается" и внимательно читаешь хотя бы первую половину книги. В ту же степь - "VisualLisp и секреты адаптации AutoCAD" (где-нибудь найти можно, поскольку книга, кажется, 2002 года издания). Вообще литература, чтение, разбор и теде. После этого подобные вопросы отпадут сами собой. И знания приобретут хоть какую-то структуру.
2. Идешь в тему https://forum.dwg.ru/showthread.php?t=22894 и там тебе добрые люди [не]быстро объяснят, что такое entsel/nentsel/nentselp, что оно возвращает, как можно менять объекты через DXF-представления и так далее.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 04.12.2022, 13:49
#7
МишаИнженер


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
внимательно читаешь хотя бы первую половину книги
Уважаемый модератор! Вы наверное не знаете, что "чтение утомляет человека"? Вы что, хотите утомить меня чтением?
Можно много чего почитать на эту тему. Хотя бы номер главы сказали и то было бы легче.
МишаИнженер вне форума  
 
Непрочитано 04.12.2022, 13:57
#8
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от МишаИнженер Посмотреть сообщение
Уважаемый модератор! Вы наверное не знаете, что "чтение утомляет человека"? Вы что, хотите утомить меня чтением?
Можно много чего почитать на эту тему. Хотя бы номер главы сказали и то было бы легче.
Значит второй вариант, раз самому думать не хочется.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 04.12.2022, 14:06
1 | 1 #9
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Offtop:
Цитата:
Сообщение от МишаИнженер Посмотреть сообщение
"чтение утомляет человека"
человека может и утомляет, а инженера - развивает, если чтиво в тему)
Сергей812 вне форума  
 
Автор темы   Непрочитано 04.12.2022, 16:39
#10
МишаИнженер


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


Попробовал выделить Handle из "Строки" с кодом 342
Код:
[Выделить все]
 
  (setq TypeObj (strcase name)) 
  (cond 
	((eq TypeObj "ACAD_TABLE")
		(setq StyleTableID0 (assoc 342 dan))
		(setq StyleTableID00 (itos (cdr StyleTableID0)));Преобразование в строку (появляется ошибка типа переменной)
		(setq StyleTableID (REVERSE (read (REVERSE (vl-string-right-trim ">" StyleTableID00)))))
	)
  )
Но при преобразовании в строку возникает ошибка типа переменной. Почему не получается преобразовать <Имя объекта: 21669b9f470> в строку?
МишаИнженер вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Какой код DXF для получения имени стиля таблицы?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой предел огнестойкости принять для плит и балок покрытия и перекрытия? ferchasf Железобетонные конструкции 1 28.06.2018 17:15
Какой должен быть состав ПД для получения разрешения на строительство Pavel_V Организация проектирования и оформление документации 22 17.06.2018 18:31
Какой метод получения чертежей выбрать, работая в Tekla Structures ? pdimav Tekla 15 12.01.2018 09:12
Помогите с интересной проблемой о тексте в ячейке таблицы reime AutoCAD 15 22.09.2016 19:10
Стиль ячеек таблицы при вставке из Excel Demetrios AutoCAD 0 26.07.2016 12:01