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

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

Программная вставка динамических блоков

Ответ
Поиск в этой теме
Непрочитано 28.02.2008, 06:58
Программная вставка динамических блоков
wetr
 
инженер
 
Владивосток
Регистрация: 09.08.2006
Сообщений: 1,536

Уважаемые господа программисты! Есть интересная задачка которую не решить штатными средствами АКАД(но если кто знает - подскажите).
Суть:
Рисую динамическими блоками ЖБ узлы. Там и арматурные сетки, арматурные стержни и прочее, прочее. В этих блоках основа - допустим, полярный параметр. Так вот я сейчас вставляю через тул палеттс, и после вставки блок всегда в одинаковом положении. После его приходится выделять его и тягать за "ручки". А хочется чтобы вставлялся указанием двух точек в модели. Ну типа как линию рисуешь. Это было бы СУПЕР!!!
Пример файла прилагается.

Вложения
Тип файла: dwg
DWG 2007
пример.dwg (92.6 Кб, 2134 просмотров)

__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
Просмотров: 10287
 
Непрочитано 04.01.2009, 12:51
#21
Дима_

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


Твой пример решается классическим динамическим блоком.
Вложения
Тип файла: dwg
DWG 2007
Пояснения.dwg (70.5 Кб, 898 просмотров)
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 04.01.2009, 15:24
#22
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Цитата:
Сообщение от Red Nova Посмотреть сообщение
У меня возникла несколько иная ситуация, но по той же тематике. Имею блок (не динамический). Блок находится в тул палетке. Требуется вставить его в чертеж так, чтобы затем указывались сперва угол вставки а затем и scale блока (причем scale не вводится в ком строке а указывается реал тайм, то есть точками на чертеже). Если объяснил не очень ясно, то смотрите аттач.
Элементарно решается при помощи простого макроса:
Код:
[Выделить все]
^C^C_-insert;1;_Rotate;-45;_Scale;$M=$(if,$(getvar,dimscale),$(*,$(getvar,dimscale),5),5);\_rotate;_l;;@;0;_rotate;_l;;@;\_scale;_p;;@;_r;$M=$(if,$(getvar,dimscale),$(*,$(getvar,dimscale),5),5);$M=$(if,$(getvar,dimscale),$(*,$(getvar,dimscale),5),5);_scale;_p;;@;_r;$M=$(if,$(getvar,dimscale),$(*,$(getvar,dimscale),5),5);
Рабоать вот с этим блоком. Вставка реагирует на переменную Dimscale, т.е. если dimscale = 1, то радиус этого полукруга будет равен 5, если 3, то 15 (ну это канечно если обрывать визуальную указку масштаба). В "_units" должны быть установлены мм (ты в инчах работаешь?). Работает и в AutoCAD LT.
Вложения
Тип файла: dwg
DWG 2004
BlockInsert.dwg (48.0 Кб, 878 просмотров)
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Непрочитано 04.01.2009, 21:49
#23
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Дима_,
Нужно чтобы запросы на поворот и размер выходили тут же, а дин. блок нужно сперва вставить, а потом тянуть его за гриспы, нудно...
Krieger,
Спасибо, Почти работает. Только вот проблема возникла. Я скопировал файл в дирректорию прописанную в акаде, переименовал его в 1.dwg (так требует -insert). Но Блок вставляется только если в файле уже вставляли блок под именем "1", иначе пишет
Код:
[Выделить все]
Command: _-insert
Enter block name or [?]: 1
Block 1 references itself
*Invalid*
Кроме того напрягает зависимость от dimscale, так как пользуюсь CПДС ...
(Тока чур не надо про его вредоносность )
Твой макрос натолкнул меня на создание вот какого лиспа. Блок сварного катета можно создавать прямо в файле, и потом вставлять его куда угодно, таким образом можно избежать трудностей возникших у меня. Когда-то VVA дал мне пару похожих уроков. Щас попробую навоять.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 04.01.2009, 22:51
#24
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Блин. Забыл самую элементарную вешь. Как создать набор объектов в лиспе?
__________________
Блог
Red Nova вне форума  
 
Непрочитано 04.01.2009, 23:21
#25
Кулик Алексей aka kpblc
Moderator

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


ssget тебе в помощь
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 04.01.2009, 23:47
#26
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Кулик Алексей aka kpblc,
Спасибо, пока ждал ответа сам докопался. правда побился об стенку прилично, В результате сделал с ssadd.
Вот какой лиспик получился.
Код:
[Выделить все]
(defun C:weld (/ selection1 pt0 OldLAY)

(vl-load-com)
(vla-StartUndoMark  (vla-get-activedocument (vlax-get-acad-object)))
(defun *error*(msg) 
 (princ msg) ; Отменено пользователем
 (if OldLAY (setvar "clayer" OldLAY)) 
 ) 

 (setq OldLAY (getvar "clayer"))

  (if (not (tblsearch "block" "Сварной катет"))
   (progn
     (command "_-layer" "_set" "0" "")
     (setq selection1 (ssadd)) 
     (command "_pline" "0,0" "1,0" "a" "s" "0.7071,0.7071" "0,1" "l" "c")
     (ssadd (entlast) selection1)
     (command "_hatch" "s" "l" "p" "s" "")
     (ssadd (entlast) selection1)
     (command "_chprop" selection1 "" "_color" "_byblock" "_ltype" "_byblock" "_lweight" "_byblock" "")
     (command "_-block" "Сварной катет" "0,0" selection1 "")
   )
  )
  (setq pt0 (getpoint)) 
  (command "_-insert" "Сварной катет" "s" pt0 pause pt0 pause "")

 (setvar "clayer" OldLAY)
(vla-EndUndoMark (vla-get-activedocument (vlax-get-acad-object)))  

)
Теперь надо подумать как обточить покрасивше.
1. Напомните плиз что написать вмето (setq pt0 (getpoint)) чтобы выходил запрос "Укажите точку вставки"
2. Еще надо бы подумать как сделать так, чтобы когда указываешь размер блока сам блок уже висел на курсоре.
__________________
Блог

Последний раз редактировалось Red Nova, 05.01.2009 в 00:39.
Red Nova вне форума  
 
Непрочитано 05.01.2009, 00:28
#27
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Блок на курсор вроде как повесил, хотя не сказать что это идеальный вариант, ведь при указании курсором размера блок всегда занимает одно положение а курсор иногда нужно направить в другую строну. Вот если бы был вариант чтобы при скейле блок еще и поворачивался с курсором было бы супер. А пока получилось вот так
Код:
[Выделить все]
(defun C:weld2 (/ selection1 pt0 OldLAY)

(vl-load-com)
(vla-StartUndoMark  (vla-get-activedocument (vlax-get-acad-object)))
(defun *error*(msg) 
 (princ msg) ; Отменено пользователем
 (if OldLAY (setvar "clayer" OldLAY)) 
 );end of defune 

 (setq OldLAY (getvar "clayer"))

  (if (not (tblsearch "block" "Сварной катет"))
   (progn
     (command "_-layer" "_set" "0" "")
     (setq selection1 (ssadd)) 
     (command "_pline" "0,0" "1,0" "a" "s" "0.7071,0.7071" "0,1" "l" "c")
     (ssadd (entlast) selection1)
     (command "_hatch" "s" "l" "p" "s" "")
     (ssadd (entlast) selection1)
     (command "_chprop" selection1 "" "_color" "_byblock" "_ltype" "_byblock" "_lweight" "_byblock" "")
     (command "_-block" "Сварной катет" "0,0" selection1 "")
   );end of progn
  );end of if
  (setq pt0 (getpoint)) 
  (command "_-insert" "Сварной катет" "0,0" "" "" "")
  (command "_move" "_l" "" "0,0" pt0)
  (command "_scale" "_p" "" pt0 pause)
  (command "_rotate" "_p" "" pt0 pause)

 (setvar "clayer" OldLAY)
(vla-EndUndoMark (vla-get-activedocument (vlax-get-acad-object)))  

);end of defune
__________________
Блог

Последний раз редактировалось Red Nova, 05.01.2009 в 00:39.
Red Nova вне форума  
 
Непрочитано 05.01.2009, 03:02
#28
Кулик Алексей aka kpblc
Moderator

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


http://forum.dwg.ru/showthread.php?t=11905
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 05.01.2009, 09:54
#29
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Цитата:
Сообщение от Red Nova Посмотреть сообщение
Спасибо, Почти работает. Только вот проблема возникла. Я скопировал файл в дирректорию прописанную в акаде, переименовал его в 1.dwg (так требует -insert). Но Блок вставляется только если в файле уже вставляли блок под именем "1", иначе пишет
Код:
[Выделить все]
Command: _-insert
Enter block name or [?]: 1
Block 1 references itself
*Invalid*
Для этого надо в пустом файле вставить этот блок в точку 0,0,0 с углом поворота 0, потом его расчленить. Очистить файл от этого блока. Сохранить файл под именем "1.dwg", кинуть файл в путь поддержки када. Тогда команда "_-insert" будет вставлять весь этот файл как блок "1".

Цитата:
Кроме того напрягает зависимость от dimscale, так как пользуюсь CПДС ...
Ну и пользуйся на здоровье, т.к. при смене масштаба в СПДС меняется и dimscale. Да и что мешает убрать эту зависимость? Кстати, в СПДС ведь есть вставка катета?

Цитата:
Твой макрос натолкнул меня на создание вот какого лиспа. Блок сварного катета можно создавать прямо в файле, и потом вставлять его куда угодно, таким образом можно избежать трудностей возникших у меня.
Все уже сделано до нас...

http://dwg.ru/dnl/2527

Кстати, обновлю сегодня.
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Непрочитано 05.01.2009, 11:20
#30
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Krieger,
Цитата:
Кстати, в СПДС ведь есть вставка катета?
Хочу получить округлый шов.
Кулик Алексей aka kpblc, Почитал, но быстро заблудился. Дай пожалуйста ссылку на конкретный пост.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 05.01.2009, 15:52
#31
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Krieger,
Покопался в твоей программе. Понравилося твой алгоритм вставки катета шва. Хотелось бы приспособить его к моему блоку. Я не имею понятия о расширении vlx, если есть в простом lsp выложи плиз.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 05.01.2009, 16:17
#32
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Цитата:
Сообщение от Red Nova Посмотреть сообщение
Krieger,
Покопался в твоей программе. Понравилося твой алгоритм вставки катета шва. Хотелось бы приспособить его к моему блоку. Я не имею понятия о расширении vlx, если есть в простом lsp выложи плиз.
VLX это компилированный лисп. Никому не показываю, т.к. на нем учится не стоит, очень примитивный. Однако работает, а переписывать в лом. Отправил тебе в ЛС.
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Непрочитано 05.01.2009, 17:32
#33
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Спасибо. Я думал что скомпилированный lsp это только fas... Попытаюсь разобраться в твоем коде.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 05.01.2009, 18:20
#34
Кулик Алексей aka kpblc
Moderator

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


Krieger, а можно тоже полюбопытствовать?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.01.2009, 02:35
#35
Кулик Алексей aka kpblc
Moderator

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


Сообщение получил, спасибо. Понял, что мой вариант менее гибок для повседневной работы Ну не выбрасывать же... Саму вставку оставил в режиме "сделано хоть как-то", т.к. прицеплять половину CADWare сюда смысла не вижу никакого (кстати, и сам вариант использования блока вызывает баальшие сомнения...)
Вложения
Тип файла: lsp weld.LSP (11.8 Кб, 111 просмотров)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.01.2009, 07:09
#36
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
кстати, и сам вариант использования блока вызывает баальшие сомнения...
Почему? Самому не очень нравится, но оставил, так как в одном файле этих треугольничков может быть ну очень много. Вот сейчас произволно открыл один файл малюсенького КМ, посчитал эти блоки, получилось 289. Чуть посложнее и за полтыщи перевалит, но там уже и кад не ворочается, приходится разбивать по файлам...
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Программная вставка динамических блоков

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Руководство по созданию динамических блоков tanushka_ch Динамические блоки 20 25.11.2015 20:46
подсчет динамических блоков AAI Программирование 37 25.06.2012 15:05
Проблема вставки Динамических блоков Владимир М Программирование 11 12.09.2007 15:42
Библиотека динамических блоков Коробейников Алексей Динамические блоки 2 05.04.2005 16:08