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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Подскажите как перебрать блоки

Подскажите как перебрать блоки

Ответ
Поиск в этой теме
Непрочитано 14.06.2012, 15:30 #1
Подскажите как перебрать блоки
iskatel111
 
Регистрация: 13.06.2012
Сообщений: 98

на чертеже есть несколько блоков, представляющих собой окружность, пару полилиний и текст (число). Нужно перебрать все блоки и в зависимости от цифры в тексте нарисовать поверх той окружности окружность на нужном слое (либо разбить блок и перенести окружность на этот слой - что проще)

сам я в лиспе не писал, знаю С++, подскажите хоть функции, дальше думаю разберусь
Просмотров: 4027
 
Непрочитано 14.06.2012, 15:32
#2
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от iskatel111 Посмотреть сообщение
знаю С++, подскажите хоть функции, дальше думаю разберусь
Возможно ObjectARX тебя более устроит, чем лисп.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 14.06.2012, 15:40
#3
iskatel111


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


он только с 2011, а у нас 2007
iskatel111 вне форума  
 
Непрочитано 14.06.2012, 15:45
#4
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от iskatel111 Посмотреть сообщение
он только с 2011, а у нас 2007
При желании в гугле за пару секунд находится это. Там и для 2007 присутствует.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 14.06.2012, 15:54
#5
Дима_

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


1. Не путай блоки и вхождения блоков.
2. Цифра это аттрибут блока или она находиться в самом блоке (тогда разные пути решения).
3. Выкладывай кусок примера (тогда будет ясно что делать), под твое описание подходит, навскидку, штук 10 вариантов.
Цитата:
сам я в лиспе не писал, знаю С++, подскажите хоть функции, дальше думаю разберусь
тогда для тебя лисп будет с ног на голову, диалект, как для автокада, так и для общего развития полезный, но нахрапом если и сделаешь, то опять-таки вверх ногами.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 14.06.2012, 15:59
#6
iskatel111


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


вроде просто текст... вот пример

кстати, а то что написано в этом ARX будет работать в любой версии, или только в той под которую писали?
Вложения
Тип файла: dwg
DWG 2007
пример.dwg (37.1 Кб, 1014 просмотров)
iskatel111 вне форума  
 
Непрочитано 14.06.2012, 16:07
#7
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от iskatel111 Посмотреть сообщение
в любой версии, или только в той под которую писали?
в тех, у которых совпадают Major-номера версии ядра сборки.
Например, если ты напишешь код под AutoCAD 2007 (версия ядра 17.0), то работать это будет и в AutoCAD 2008 (версия ядра 17.1), и в AutoCAD 2009 (версия ядра 17.2). Через каждые три версии число Major увеличивается на 1. Исключение - AutoCAD 2013, там сразу версию ядра назначили как 19.0, т.к. внесены большие изменения.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 14.06.2012, 16:22
#8
Дима_

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


да - просто текст - тебе надо нарисовать соответствующие круги у каждого вхождения блока (фильтровать можно просто по имени блока). Так как пример у тебя явно секретный, (по одному блоку трудно предположить что все-таки с другими) то:
Сканируешь все вхождения блока (entnext...) или (более по лисповски), получаешь набор (ssget) из всех вхождений блоков (см. фильры ssget) и преобразуешь его в список (это такая альтернатива представления коллекций в лиспе - обычно почему-то говорят массив - хотя с массивом у него нет вобще ничего общего), далее анализуруешь (фильтруешь) каждое вхождение (entget...), либо (vla-get-...) и на нужных - либо создаешь (entmakex...), (vla-add ...), либо взрываешь копию (vla-explode(vla-copy...)), либо копируешь из описания блока (vla-copyobjects ...) и дело в шляпе.
Вот собственно как просил - имена функций - удачи.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 14.06.2012, 16:29
#9
iskatel111


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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Так как пример у тебя явно секретный
а это почти весь пример и есть, полностью там еще прямоугольник - контур детали.
если блоков несколько то они все разные, имеют разные имена, даже если рядом еще такое же отверстие пятой группы, то блок другой, а не заново вставленый этот

(так выкидывает чертежи BCAD, а то что должно получиться - входной файл для чпу (имя слоя - глубина сверления)) вручную не очень приятно перемещать, думал написать на С++ обработку dxf, но удобнее сразу в автокаде все преобразования
iskatel111 вне форума  
 
Непрочитано 14.06.2012, 17:24
#10
Дима_

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


Ну т.к. ты нарисовать "прямоугольную окружность" (исходя из пунктов #1,#9 - получаеться именно так), вот лисп который переносит все вхождения блоков но слой по цифре в названии - дальше взорви - ну или сам доделай ( тем более что все функции я тебе уже дал), запускать командой test
Код:
[Выделить все]
 (vl-load-com)
(defun collection->list(col / lst)
  (vlax-for obj col (SETQ lst (cons obj lst)))
  (reverse lst))
(defun c:test()
  ((lambda(doc)
     ((lambda (blocks layers)
        (vla-startundomark doc)
        (foreach obj
                 (vl-remove-if-not
                  '(lambda (x) (= (vla-get-objectname x) "AcDbBlockReference")) 
                  (collection->list(vla-get-modelspace doc)))
                 ((lambda (name)
                    (if (not (tblsearch "layer" name))
                        (vla-add layers name))
                    (vla-put-layer obj name)); вот здесь тебе доступны как вхождение блока obj, так и имя точно существующего слоя name - можешь добавлять круги квадраты и т.п.
                  (cdr (assoc (vla-get-name obj) blocks))))
        (vla-endundomark doc))
      (mapcar '(lambda (blk)
                 (cons (vla-get-name blk)
                       ((lambda (label)
                          (if label (vla-get-textstring label) "0"))
                        (car (vl-remove-if-not '(lambda (x) (vlax-property-available-p x 'TextString))
                                               (collection->list blk))))))
              (collection->list(vla-get-blocks doc)))
      (vla-get-layers doc)))
   (vla-get-activedocument(vlax-get-acad-object))))
Цитата:
думал написать на С++ обработку dxf
Месье знает толк в извращениях!!
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 14.06.2012 в 17:38.
Дима_ вне форума  
 
Автор темы   Непрочитано 14.06.2012, 17:38
#11
iskatel111


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


спасибо, будем разбираться как оно работает
iskatel111 вне форума  
 
Непрочитано 14.06.2012, 22:19
#12
Кулик Алексей aka kpblc
Moderator

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


Дима_, насколько я помню, vla-explode не уничтожает исходный объект.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.06.2012, 22:47
#13
Дима_

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


Опс... Iskatel111 - прости увлекся - #8 (vla-copy ...)не надо, хотя если ты вдруг уже дошел до этого - думаю уж с этим разберешся.
p.s. и чего это я - видимо "спроецировал" аналогичную команду.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Подскажите как перебрать блоки

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические блоки при копировании перестают быть динамическими. *Voland* Динамические блоки 11 04.07.2012 10:51
чем взрывать динамические блоки? АлексЮстасу Динамические блоки 9 27.08.2011 13:14
Где сохранять блоки? n0str0m0 AutoCAD 2 23.06.2011 09:24
Карнизные блоки под перильные ограждения на мосту Anastasy Поиск литературы, чертежей, моделей и прочих материалов 0 31.08.2010 14:47
Разбиение черечежа откоса на геологические блоки в VBA Skyper Программирование 1 18.03.2010 08:54