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

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

Автоматически расставить блоки в точках

Ответ
Поиск в этой теме
Непрочитано 04.02.2015, 13:06 #1
Автоматически расставить блоки в точках
Dezmond5
 
Регистрация: 04.02.2015
Сообщений: 3

Добрый день! На чертеже есть точки, за место каждой точки должен появиться блок.
Как можно автоматически расставить блок(и) в точках?
Может есть какое-либо приложение выполняющее эту функцию?
Буду очень рад за помощь, так как это очень сократит время этой работы.
С уважением Дмитрий.
Просмотров: 4109
 
Непрочитано 04.02.2015, 13:15
#2
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Любой вопрос начинай с Поиска! И будет тебе счастье
В этой теме http://forum.dwg.ru/showthread.php?t=20808 я в п.17 задавал аналогичный вопрос,
а в п.18 был ответ
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Автор темы   Непрочитано 04.02.2015, 13:32
#3
Dezmond5


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


Большое спасибо, за быстрый ответ.
Я немного уточню В вопросе вы пишите "список точек - sp_po" Это название слоя или что?
Можете меня навести на статью, где описывается куда вставлять код? Я создавал только команды, в разделе сервис-адаптация-интерфейс.

----- добавлено через ~3 ч. -----
Цитата:
Сообщение от Alan Посмотреть сообщение
Любой вопрос начинай с Поиска! И будет тебе счастье
В этой теме http://forum.dwg.ru/showthread.php?t=20808 я в п.17 задавал аналогичный вопрос,
а в п.18 был ответ
В принципе почти раборался, lips создал сохранил, только не понятно, нужно ли в начале писать (defun c:"название"
Но у меня она не работает, скорее всего я не понимаю что такое список точек. Что это?

----- добавлено через ~3 ч. -----
Код:
[Выделить все]
 (defun C:BBL (/)
(foreach point sp_po
 (entmakex (list (cons 0 "INSERT")
                 '(100 . "AcDbEntity")
                 '(100 . "AcDbBlockReference")
                 (cons 2 mrkb)
                 (cons 10 point)
                 ) ;_ end of list
           ) ;_ end of entmakex
 ) ;_ end of foreach
Вот что я получаю в терминале
Команда: _appload BBL.LSP успешно загружено.
Команда: ; ошибка: неверно сформированный список на входе
В файле создан блок с именем mrkb и точки в слое sp_po

Последний раз редактировалось Dezmond5, 04.02.2015 в 16:36.
Dezmond5 вне форума  
 
Непрочитано 04.02.2015, 17:33
#4
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Цитата:
Сообщение от Dezmond5 Посмотреть сообщение
скорее всего я не понимаю что такое список точек.
что-то типа такого
(setq sp_po '((1 1 0) (2 1 0)(3 2 0))) - координаты X,Y,Z точек,
у меня он был большой, создавался программно по координатам точки вставки блока.


Цитата:
Сообщение от Dezmond5 Посмотреть сообщение
Можете меня навести на статью, где описывается куда вставлять код?
по применению текстов см. http://dwg.ru/art/8
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Непрочитано 05.02.2015, 13:23
#5
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


Писал под себя нечто подобное. Лишнее вырезал. У меня тут же было создание блока если его нет в чертеже
Код:
[Выделить все]
 (vl-load-com)
(defun vplan ( / ent_sad adoc *mspace*)
(setq adoc (vla-get-activedocument (vlax-get-acad-object))
      *mspace* (vla-get-ModelSpace adoc)
);setq

(setq ent_sad (entnext))
(while ent_sad
 (if (and (= (cdr (assoc 0 (entget ent_sad))) "POINT") (= (cdr (assoc 8 (entget ent_sad))) "ОСЬ_ВЕРТИКАЛЬНАЯ_ПЛАНИРОВКА")) ;;ищет точки в нужном слое
 (vla-put-Layer  
	(vla-InsertBlock *mspace* (vlax-3d-point (cdr (assoc 10 (entget ent_sad)))) "v_plan_blk" 1 1 1 0) ;;ставит блок по координате точки, имя блока "v_plan_blk" 
	"ОСЬ_ВЕРТИКАЛЬНАЯ_ПЛАНИРОВКА" ;;в нужный слой
 );vla-put
 );end if
(setq ent_sad (entnext ent_sad));; счетчик для условия выхода...
);end while


);end defun
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Автор темы   Непрочитано 05.02.2015, 13:38
#6
Dezmond5


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


Как я не пытался, так и не смог написать липс сам. Но нашел уже готовый:
Код:
[Выделить все]
 (vl-load-com)
(defun c:points-to-block	( / sel blname en)
  (vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
  ;(setq counter 0)
  (setq blname (vla-get-effectivename (vlax-ename->vla-object (car(entsel "\nВыбор блока-образца")))))
  (if (/= (setq sel (ssget '((0 . "point")))) nil)
    (while (ssname sel 0)
      (setq en	    (ssname sel 0)
	    ;counter (1+ counter)
               ;blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point '(0. 0. 0.)) (strcat "ptblock-" (itoa counter)))
      )
      ;(vla-addpoint blk (vlax-3d-point '(0. 0. 0.)))
      (vla-insertblock
	(vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
	(vlax-3d-point (cdr (assoc 10 (entget en))))
	;(strcat "ptblock-" (itoa counter))
           blname
	1
	1
	1
	0)
      (ssdel en sel)
      ;(entdel en)
))
  (vla-endundomark (vla-get-activedocument (vlax-get-acad-object))))
Dezmond5 вне форума  
 
Непрочитано 05.02.2015, 13:50
#7
casaatik

Проектирование
 
Регистрация: 14.09.2007
Киев
Сообщений: 147


Еще существует лисп "Замена набора примитивов на выбранный примитив"
Он и с блоками тоже неплохо работает
Поищи
casaatik вне форума  
 
Непрочитано 05.02.2015, 18:44
#8
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от Dezmond5 Посмотреть сообщение
Добрый день! На чертеже есть точки, за место каждой точки должен появиться блок.
Как можно автоматически расставить блок(и) в точках?
Команда FRTO из темы Как преобразовать точки в блоки?
или здесь
Замена примитивов другими примитивами, в определенной последовательности
LISP. Замена набора примитивов на выбранный примитив
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Автоматически расставить блоки в точках

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как автоматически вставлять блоки? Batxom Программирование 4 24.01.2013 21:18
как автоматически подгружать свои стили, блоки, слои в уже созданные ранее файлы? --antik-- AutoCAD 22 20.09.2012 13:42
Динамические блоки при копировании перестают быть динамическими. *Voland* Динамические блоки 11 04.07.2012 10:51
Civil 3D 2012. Автоматически расставить укрепления кювета dorogi-dorogi Вертикальные решения на базе AutoCAD 14 23.04.2012 11:06
ЛИСП слои цвета преобразование Gotch LISP 97 08.11.2011 10:22