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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как сделать набор из примитивов, которые в блоках? (LISP)

Как сделать набор из примитивов, которые в блоках? (LISP)

Ответ
Поиск в этой теме
Непрочитано 12.12.2010, 23:55 #1
Как сделать набор из примитивов, которые в блоках? (LISP)
Shraybicus
 
Регистрация: 05.12.2010
Сообщений: 104

Добрый вечер.

С помощью функции (см. ниже) можно сделать набор всех примитивов типа "LWPOLYLINE" на чертеже.

(ssget "_X" (list (cons 0 "LWPOLYLINE")))

А как сделать набор примитивов (такого же типа, например), которые находятся в блоках?

Спасибо!

Последний раз редактировалось Shraybicus, 14.12.2010 в 18:37.
Просмотров: 5513
 
Непрочитано 12.12.2010, 23:59
#2
Кулик Алексей aka kpblc
Moderator

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


Что значит "в объектах"? В описаниях блоков, что ли?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.12.2010, 00:05
#3
Shraybicus


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Что значит "в объектах"? В описаниях блоков, что ли?
Извиняюсь, если что не понятно. Просто я только недавно начал постигать программирование на AutoLisp.

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

С помощью функции (ssget "_X" (list (cons 0 "LWPOLYLINE"))) я создаю набор всех примитивов типа "LWPOLYLINE" на чертеже. А те, полилинии, которые находятся в объектах не попадают в этот набор. Вот как можно получить доступ к примитивам в объектах?
Shraybicus вне форума  
 
Непрочитано 13.12.2010, 01:52
#4
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от Shraybicus Посмотреть сообщение
Вот как можно получить доступ к примитивам в объектах?
Код:
[Выделить все]
(tblsearch "block" "имя_блока") или
(vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
только боюсь что собирать в набор примитивы из блоков ошибочное направление - опиши кончную задачу, учится лучше сразу по правильному пути (чтоб потом не переучиватся).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 13.12.2010, 13:40
#5
Shraybicus


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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
только боюсь что собирать в набор примитивы из блоков ошибочное направление - опиши кончную задачу, учится лучше сразу по правильному пути (чтоб потом не переучиватся).
Я создал программку на LISP, с помощью которой можно автоматически выводить чертежи на печать, в зависимости от формата листа (А4, А3, А2 и т.д.). Формат листа как известно это поллиния. Так вот, программа отыскивает эти самые поллинии отвечающие определенному требованию.

Все прекрасно работает, но как оказалось те форматки, которые созданы с помощью блоков, моя программа не видит. А поиск основывался на использовании только функции
(ssget [<метод>] [<точка1> [<точка2>]] [<список>] [<фильтр>]).
Shraybicus вне форума  
 
Непрочитано 13.12.2010, 14:13
#6
Нащальника


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


Считаю категорически неправильным печать из модели.
Чертите все 1:1 и печатайте с листов. И проблем не будет.
Нащальника вне форума  
 
Автор темы   Непрочитано 13.12.2010, 14:19
#7
Shraybicus


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


Цитата:
Сообщение от Нащальника Посмотреть сообщение
Считаю категорически неправильным печать из модели.
В связи с чем это связано? Обоснуйте.
Shraybicus вне форума  
 
Непрочитано 13.12.2010, 14:22
#8
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от Shraybicus Посмотреть сообщение
Формат листа как известно это поллиния.
В этом и зарыт "корень зла" - как вы сами убедились - это не так (еще и блоки). По каким параметрам полилинии Вы определяете формат? - хотя, повертье на слово, методология у Вас изначально тупиковая (уж лучше как раз на блоки ориентироватся, а вобще - как это рекомендует автодеск использовать лист).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 13.12.2010, 14:30
#9
Shraybicus


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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
В этом и зарыт "корень зла" - как вы сами убедились - это не так (еще и блоки). По каким параметрам полилинии Вы определяете формат? - хотя, повертье на слово, методология у Вас изначально тупиковая (уж лучше как раз на блоки ориентироватся, а вобще - как это рекомендует автодеск использовать лист).
Листы я не хочу принципиально использовать. Мне не удобно. Из моих личных соображений.

Форматку я сделал из динамического блока. Которая принимает формат от А4 и дальше, которые используют по ГОСТу. Т.е. все чертежи которые будут создаваться, будут использовать эти блоки (форматки).

Не вижу проблемы и тупика.)
Shraybicus вне форума  
 
Непрочитано 13.12.2010, 14:50
#10
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


А не проще посмотреть имя блока и его динамические свойства?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 13.12.2010, 14:54
#11
Shraybicus


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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
А не проще посмотреть имя блока и его динамические свойства?
Возможно) Я просто еще учусь) Поэтому и спросил на форуме. Ведь вроде объекты на LISPе называются vla-объекты, раз ты предлагаешь использовать функции с расширением vla-. А я вот не знал это те блоки или что то другое.)
Shraybicus вне форума  
 
Непрочитано 13.12.2010, 16:43
#12
Нащальника


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


Цитата:
Сообщение от Shraybicus Посмотреть сообщение



Цитата:
Сообщение от Нащальника
Считаю категорически неправильным печать из модели.

В связи с чем это связано? Обоснуйте.
1. Создавая чертеж в модели 1:1 вы избавляетесь от ошибок при масштабировании объектов или размеров.
2. Новый лист создается нужного формата с настройками на нужный принтер, можно написать название листа.
3. Можно вставить в лист 2 и более объектов разного размера расположеных далеко друг от друга (пример фасад и узел).
4. Вывод на печать большого числа листов осуществляется с помощью подшивки.
5. Нет необходимости включать и выключать слои. Все блокируется в листе.

И многое многое другое...

Совет: научитесь работать с листами и видовыми окнами. Автоматизация проектирования начинается с этого.
Нащальника вне форума  
 
Автор темы   Непрочитано 13.12.2010, 17:55
#13
Shraybicus


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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
А не проще посмотреть имя блока и его динамические свойства?
А как посмотреть динамические свойства блока?

С помощью (tblsearch <таблица> <заголовок>) я максимум могу получить точку вставки. А вот если ввести в командной строке _LIST, то еще получаю размеры блока, т.е. длину и ширину форматки. Но как их получить другим способом я не знаю. =(

Цитата:
Сообщение от Нащальника Посмотреть сообщение
Совет: научитесь работать с листами и видовыми окнами. Автоматизация проектирования начинается с этого.
Это все я умею. И черчу всегда 1:1. Но вот не хочу я использовать листы. Вот и все тут.)

Последний раз редактировалось Shraybicus, 13.12.2010 в 18:01.
Shraybicus вне форума  
 
Непрочитано 13.12.2010, 21:03
#14
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Посмотреть динамические свойства блока я настоятльно рекомендую через vla функции. С помощью tblsearch ... ты не получишь точку вставки вхождения блока - ты получишь его описание (доступ к примитивам входящим в блок - через dxf -2, далее entext до пустого символа nil). Кстати - если тебе нужно определить "габартные размеры" - есть специально заточенная функция vla-getboundingbox - вобщем ты либо изучи материал, либо задавай вопросы конкретней.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 14.12.2010, 00:12
#15
Shraybicus


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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Кстати - если тебе нужно определить "габартные размеры" - есть специально заточенная функция vla-getboundingbox
И как эта функция работает?

Не все такие умные как ты
Shraybicus вне форума  
 
Непрочитано 14.12.2010, 00:29
#16
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Shraybicus Посмотреть сообщение
И как эта функция работает?
Поиск по форуму: http://www.google.ru/custom?hl=ru&in...ingbox&spell=1
Александр Ривилис вне форума  
 
Непрочитано 14.12.2010, 00:32
#17
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от Shraybicus Посмотреть сообщение
И как эта функция работает?

Не все такие умные как ты
в автокадовской справке по VB расписаны все функции
Код:
[Выделить все]
(vl-load-com)
(defun gbb (ent / xy1 xy2)
(vla-getboundingbox (vlax-ename->vla-object ent) 'xy1 'xy2)
(mapcar 'vlax-safearray->list (list xy1 xy2)))
пример (gbb (entlast)) - вернет список из двух точек (нижний левый и верхний правый угол примитива).
P.S. если считаешь меня умней - то послушай совет - РАБОТАЙ В ЛИСТЕ.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 14.12.2010, 18:19
#18
Shraybicus


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


Дима_, спасибо

Попробовал этот листинг.

Испытуемый приложен к посту. Файл содержит динамический объект, который с помощью режима выбора может становиться форматом А4 книжный или А4 альбомный.

Результат работы функции: ((0.0 0.0 0.0) (297.0 297.0 0.0))

А если нарисовать поллинию обычную, то результат как полагается.

Что из себя представляют объекты вставленные в чертеж?
Shraybicus вне форума  
 
Непрочитано 14.12.2010, 19:34
#19
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Это мы уже походили
Конкретно - в этой теме.
В двух словах: для динамического блока определяются габариты с учетом даже тех объектов, которые невидимы в текущем состоянии.
Остальное ответы можно найти в указанной теме, даже на те вопросы, которые еще не были заданы, но возникнут в скором времени
Do$ вне форума  
 
Автор темы   Непрочитано 15.12.2010, 23:49
#20
Shraybicus


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


Цитата:
Сообщение от Do$ Посмотреть сообщение
Это мы уже походили
Конкретно - в этой теме.
В двух словах: для динамического блока определяются габариты с учетом даже тех объектов, которые невидимы в текущем состоянии.
Остальное ответы можно найти в указанной теме, даже на те вопросы, которые еще не были заданы, но возникнут в скором времени
Спасибо огромное! Почитаю.)
Shraybicus вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как сделать набор из примитивов, которые в блоках? (LISP)



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите, существуют ли практические руководства по Lisp? vn LISP 261 26.11.2015 13:27
LISP для подсчета суммы длин линий Kostinok LISP 18 26.04.2013 14:56
LISP для поиска групп (наборов) одинаковых примитивов и замена их блоком ElectroBOG LISP 20 23.07.2010 16:00
Как сделать диалоговое окно, описанное в DCL файле и вызванное Lisp программой, немодальным? E-degtyarev LISP 9 28.05.2010 09:10
Как сделать "прозрачный" lisp? ASLYS LISP 21 01.06.2007 15:43