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

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

Вставка блока с помощью иконки

Ответ
Поиск в этой теме
Непрочитано 26.10.2004, 11:34 #1
Вставка блока с помощью иконки
RomanS
 
Сообщений: n/a

Подскажите пожалуйста, как прописать в строке макросов (Button user defined) команду, чтобы блок с именем.dwg вставить в чертеж, а не через insert\block
Зарание Благодарен
Просмотров: 15088
 
Непрочитано 26.10.2004, 12:44
#2
Lenich

Опер дир
 
Регистрация: 28.04.2004
Москва
Сообщений: 291


Добавляешь в кнопку следующий код
Код:
[Выделить все]
^C^C_.-insert c:/temp.dwg
Где, c:/temp.dwg - путь и имя вашего файла.
При выполнении этой команды будет вставлен файл temp.dwg как блок.
Lenich вне форума  
 
Непрочитано 26.10.2004, 14:14
#3
Pilot

Проектировщик свиноводство
 
Регистрация: 21.08.2003
Сообщений: 2,291


Будьте внимательны с путь\имя.dwg - если там пробел окажется.
Лучше все это в кавычки заключать.
Pilot вне форума  
 
Непрочитано 26.10.2004, 14:25
#4
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


^C^C_.-insert c:/temp.dwg;\;;
"\" это точка вставки, назначаемая мышкой. ";;" это если масштабы по осям одинаковы и равны 1. А если путь прописан в Options то "C:/" можно опустить
Vova вне форума  
 
Непрочитано 29.10.2004, 16:34 Вставка блока с помощью иконки
#5
Nike


 
Сообщений: n/a


А как сделать вставку блока множественной, вроде Клик-Ляп-Ляп-Ляп...?
 
 
Непрочитано 29.10.2004, 17:17
#6
Mikhail

инженер-технолог (ГИП)
 
Регистрация: 11.09.2003
Санкт-Петербург
Сообщений: 1,144


тогда примерно следующее можно
^C^C_.-insert c:/temp.dwg;\;;co;l;;m;i;

Тогда он вроде как должен выбирать вставленный блок делать мультикопи, надо вот только указать точку относительно которой будет копироватся вставленный блок.
__________________
Большая беда науки в том, что при восхитительной теории можно получить отвратительные результаты.
Mikhail вне форума  
 
Непрочитано 29.10.2004, 17:58 Вставка блока с помощью иконки
#7
Nike


 
Сообщений: n/a


Mikhail:

Спасибо, но к сожалению вставляет один раз с запросом угла поворота. Если не сложно, разъясните назначение параметров в команде. Спасибо.
 
 
Непрочитано 29.10.2004, 18:41
#8
Star

Конструктор штампов
 
Регистрация: 10.03.2004
г. Киев
Сообщений: 92


Попробуй

Код:
[Выделить все]
*^C^C_.-insert c:/temp.dwg;\;;;
Star вне форума  
 
Непрочитано 29.10.2004, 18:51
#9
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,010


Star:
Спасибо. А можно ли сохранить запрос угла поворота?
Nike вне форума  
 
Непрочитано 29.10.2004, 19:24
#10
Perezz!!

архитектор
 
Регистрация: 21.08.2003
Москва
Сообщений: 3,587


все что касается макросов, в разделе "программирование"
Perezz!! вне форума  
 
Непрочитано 29.10.2004, 20:05
#11
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


>Nike

В этом программировании все элементарно. Если в макрос пишем точку с запятой ; - это аналогично нажатию Enter при работе из командной строки.
Если пишем обратный слэш \ - это значит что АКАД будет ждать ценных указаний от юзера.
Не сочтите за труд, посмотрите как работает команда при вызове из командной строки и поставьте в нужные места нужные значки :wink:
vk вне форума  
 
Непрочитано 30.10.2004, 11:01
#12
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,010


Спасибо, разобрался.
Nike вне форума  
 
Непрочитано 22.02.2005, 13:09
#13
VVS

проектирование автоматизированных систем управления и диспетчеризации на базе LonWorks
 
Регистрация: 24.01.2005
Санкт-Петербург
Сообщений: 16


Оживил эту тему, дабы не возникало лишних вопросов.
Со вставкой блока посредством "кнопочного" макроса разобрался, но непонятно как при вставке выбирается точка привязки? Как сделать так чтобы точка привязки была, например, левым нижним углом блока?
VVS вне форума  
 
Непрочитано 22.02.2005, 13:12
#14
Torino


 
Регистрация: 21.08.2003
Штаб
Сообщений: 943
<phrase 1=


В 2005-м Акаде точка втавки блока задается при создании блока.
И для ее изменения нужно редактировать блок.
Как решение, можно вставлять блок в точку 0,0,0. Потом команда MOVE из нужной точки (все это зашить в макрос).
Torino вне форума  
 
Непрочитано 22.02.2005, 13:14
#15
MIP

инженер
 
Регистрация: 13.12.2004
Минск
Сообщений: 496


Надо определить в блоке нужную точку как точку вставки! А перевыбор точки встаки блока будет реализован в Автокаде 2006 (Rio)
__________________
Сейчас такая знаний бездна
доступна всякому уму,
что стало спорить бесполезно
и глупо думать самому.
MIP вне форума  
 
Непрочитано 22.02.2005, 14:26
#16
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


А чего бы не использовать для этой цели LISP :?:

Для начала позаботимся о том чтобы все блоки вставлялись с одинаковым масштабом, без запроса оного. Т. е если нужен масштаб отличный от 1, запускаем функцию SCA и устанавливаем масштаб для всех последующих вставок:
Код:
[Выделить все]
(defun c:sca (/ oldSymsca)
  (if(not sp:symsca)(setq sp:symsca 1.0))
  (setq oldSymsca sp:symsca
	sp:symsca(getreal(strcat "\nEnter symbols scale <1:" (rtos sp:symsca) "> : "))
	); end setq
  (if(null sp:symsca)(setq sp:symsca oldSymsca))
  (princ(strcat "\nCurrent symbols scale 1:" (rtos sp:symsca)))
  (princ)
  ); end of c:sca
Потом напишем функцию вставки с алгоритмом ВСТАВИТЬ С ЗАДАННЫМ МАСШТАБОМ->ДВИГАТЬ С ПРОИЗВОЛЬНОЙ БАЗОВОЙ ТОЧКОЙ-> ВРАЩАТЬ С ПРОИЗВОЛЬНОЙ БАЗОВОЙ ТОЧКОЙ. Если вращение не требуется то убрать строку (command "_.rotate" (entlast) "" pause pause).
Код:
[Выделить все]
(defun SC_SymInsert2 (blName / oldEcho insSca blPath *error*)

  (defun *error* (msg)
    (setvar "cmdecho" oldEcho)
    ); end of *error*

  (setq oldEcho(getvar "cmdecho"))
  (setvar "cmdecho" 0)
  (if(not sp:symsca)(setq sp:symsca 1.0))
  (setq insSca(/ 1 sp:symsca))
  (if
    (not(tblsearch "block" blName))
    (progn
      (if
       (setq blPath(findfile(strcat blName ".dwg")))
	 (command "-insert" blPath "_s" insSca pause pause)
         (princ(strcat "\n*** File " (strcat blName ".dwg") " not found! *** "))
       ); end if
      ); end progn
    (progn
    (command "-insert" blName "_s" insSca pause "")
    (command "_.move" (entlast) "" pause pause)
    (command "_.rotate" (entlast) "" pause pause)
    ); end progn
    ); end if
  (setvar "cmdecho" oldEcho)
    (princ)
    ); end of SymInsert
Теперь либо пишем в макросе кнопки (назавние файла без расширения *.DWG!):
Код:
[Выделить все]
(SC_SymInsert2  "Название_файла")
Либо, если требуется также вызов с клавиатуры пишем короткие функции:
Код:
[Выделить все]
(defun c:my_sym ()
  (SC_SymInsert2 "Название_файла")
  (princ)
  ); end of c:my_sym
и пишем в макросе my_sym

Естественно файл с этими функциями должен быть в автозагрузке, а файлы с блоками на "путях поддержки".

Enjoy...
{Smirnoff} вне форума  
 
Непрочитано 22.02.2005, 14:38
#17
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


В исходном файле, где нарисован объект-будующий блок, применить команду Base и назначить базовую точку. Или там-же передвинуть рисунок так, чтобы его точка вставки оказалась в 0,0
Vova вне форума  
 
Непрочитано 22.02.2005, 14:38
#18
VVS

проектирование автоматизированных систем управления и диспетчеризации на базе LonWorks
 
Регистрация: 24.01.2005
Санкт-Петербург
Сообщений: 16


Ух ты. Спасибо.
Один вопрос: а попроще как-нибудь нельзя?
VVS вне форума  
 
Непрочитано 22.02.2005, 14:41
#19
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


А чего проще?

Записываешь это в файл, ставишь его в автозагрузку. Потом рисуешь в макросах кнопок (SC_SymInsert2 "Название_файла") хоть до посинения. Что может быть проще?

Естественно макрос начинаем с ^C^C...
{Smirnoff} вне форума  
 
Непрочитано 22.02.2005, 14:43
#20
VVS

проектирование автоматизированных систем управления и диспетчеризации на базе LonWorks
 
Регистрация: 24.01.2005
Санкт-Петербург
Сообщений: 16


Цитата:
Сообщение от Vova
В исходном файле, где нарисован объект-будующий блок, применить команду Base и назначить базовую точку. Или там-же передвинуть рисунок так, чтобы его точка вставки оказалась в 0,0
Спасибо, то что нужно. И за книгу спасибо.
VVS вне форума  
 
Непрочитано 19.02.2006, 22:40
#21
pyatifan


 
Регистрация: 29.10.2005
Нижегородская обл.
Сообщений: 219
<phrase 1=


Фига вытащил тему (почти ровно год валялась, а проблемы те же).

Уважаемые фантомасы, или гуру там всякие, снизойдите до вот этого:

ко всему что есть (lisp) хотелось прибавить что-то типа: (command"wipeout" "f" "off")
т.к. в одном хорошем блоке есть эта ложка дёгтя (иногда совсем не хотца думать и легче притвориться лаймером и попросить того, для кого это раз плюнуть) не знаю как эту строчку грамотно втиснуть.
и ещё хотелось чтоб осталась возможность перебора точки вставки (динамический блок) тобиш Ctrl.
pyatifan вне форума  
 
Непрочитано 21.02.2006, 17:47
#22
Кулик Алексей aka kpblc
Moderator

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


> pyatifan : Маленький вопрос: используется ли toolpalettes? Если да, то можно повесить слой, масштаб и угол поворота напрямую на инструмент. А для wipeout можно и такое сделать, повесив его в автозагрузку:
Код:
[Выделить все]
(defun start( / _cmdecho_)
  (setq _cmdecho_ (getvar "cmdecho"))
  (setvar "cmdecho" 0)
  (commadn "_.wipeout" "_f" "_off")
  (setvar "cmdecho" _cmdecho_)
  )
(start)
А переделывать готовый лисп лично я не вижу особого смысла. У меня-то решено по аналогии с ruCAD, а там подход немного другой.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 05.09.2006, 16:05
#23
Star

Конструктор штампов
 
Регистрация: 10.03.2004
г. Киев
Сообщений: 92


Вставляю блок с масштабом по Х=1, а по У масштаб определяется разницей от точки вставки до указ. точки макросом:
Код:
[Выделить все]
^C^C_-Insert;M06Length;\;'Cal;Dist(@,cur);;
Так вот, сколько не ставлю в конце ";" (хоть 10) всё равно висит приглашение ввода угла.
Где проблема?
Star вне форума  
 
Непрочитано 05.09.2006, 16:19
#24
Кулик Алексей aka kpblc
Moderator

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


Поскольку используется 'cal, думаю, что используется полный кад. Соответствтенно попробуй нечто типа:
Код:
[Выделить все]
^C^C_-insert;m06length;\;1;(DISTANCE (getvar "lastpoint") (getpoint (getvar "lastpoint")));;
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 05.09.2006, 19:42
#25
Star

Конструктор штампов
 
Регистрация: 10.03.2004
г. Киев
Сообщений: 92


Если перед (DISTANCE... убрать 1; - выдаёт:
Код:
[Выделить все]
Enter Y scale factor <use X scale factor>: (DISTANCE (getvar "lastpoint") 
(getpoint (getvar "lastpoint")))

; error: bad argument type: 2D/3D point: nil
А если в конце убрать один ";", работает, но идёт запрос угла
Star вне форума  
 
Непрочитано 06.09.2006, 09:28
#26
Кулик Алексей aka kpblc
Moderator

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


Стоп, я не понял - мой код работает или нет?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.09.2006, 10:20
#27
Джек

Строительство
 
Регистрация: 03.09.2003
Нижний Новгород
Сообщений: 81
<phrase 1=


А можно сделать в лиспе?
Типа:
1. вставил блок (имя известна)
2. повернул его (блок) на определенный угол
3. следующая вставка уже с заданным углом и т.д. до бесконечности
Спасибо 8)
Джек вне форума  
 
Непрочитано 06.09.2006, 10:22
#28
Кулик Алексей aka kpblc
Moderator

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


Можно. Но код длинный. Сделано в ruCAD'e.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.09.2006, 14:09
#29
Джек

Строительство
 
Регистрация: 03.09.2003
Нижний Новгород
Сообщений: 81
<phrase 1=


Цитата:
Сообщение от kpblc
Можно. Но код длинный. Сделано в ruCAD'e.
а почему длинный код?
Просто в лиспе можно сделать - сначало вставка блока, а затем с помощью командой копировать сделать вставку вставленного блока ,
я сделал не большой лисп , но при копировании вставляется только один раз, а не несколько.
Джек вне форума  
 
Непрочитано 06.09.2006, 14:35
#30
Кулик Алексей aka kpblc
Moderator

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


Длинный потому что вставлять сильно хочется, наблюдая за возможным результатом, а не неизвестно что и неизвестно куда. Да еще и с возможными разными масштабами. Некоторые блоки надо поворачивать после вставки; некоторые - нет. Общая идеология (по крайней мере примененная в ruCAD'e и следом за этой системой - и у меня) примерно такая:
- создается анонимный блок, в который засовывается "реальный" блок с переданными значениями масштабов по осям (правда, такой подход чреват проблемами при вставке таблиц и динамических блоков)
- через команду _.change меняется точка вставки
- если не был задан угол поворота, опять же командой _.change он меняется.
Там масса проверок, "ловушек" ошибок и т.п. Также надо предусматривать вариант выхода как по правой кнопке, так и по Esc. Я б сам такое не написал в жизни. Идею слизал, немного переделал. Пока работает.
Минусы подобного подхода:
- проблемы при вставке таблиц, динамических блоков, размеров и т.п. примитивов, имеющих в себе ссылку на запись таблицы блоков.
- команда _.change работает только в виде "сверху". При условии, что текущая система координат не совпадает с видом, иногда получается весело
- при условии запуска в LT Extender надо отслеживать условие, что (vl-cmf) все равно возвращает nil, что требуется учитывать.
- Изменить масштаб вставленного блока динамически нельзя.
Плюсы:
- Вставка всегда визуализируется.
- Одна функция может вызываться из тысяч мест, меняя только пару-тройку параметров.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.09.2006, 15:53
#31
Джек

Строительство
 
Регистрация: 03.09.2003
Нижний Новгород
Сообщений: 81
<phrase 1=


[quote="kpblc"]Длинный потому что вставлять сильно хочется, наблюдая за возможным результатом, а не неизвестно что и неизвестно куда. Да еще и с возможными разными масштабами. quote]
Нет, у меня все просто, блок один тот же и вставка без масштаба.
У меня просто стандартный набор вставил и повернул.
просто иногда надоедает каждый раз угол задавать!!!!!
Просто вызвал прогу - вставил блок - показал угол, следующаая вставка без запроса угла и т.д. до бесконечности, пока не завершишь программу.
Если снова запускаешь программу - при первой вставке сделать запрос угла.
Джек вне форума  
 
Непрочитано 06.09.2006, 16:07
#32
Кулик Алексей aka kpblc
Moderator

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


Без проверок на работоспособность:
Код:
[Выделить все]
(defun insblock	(blockname / ang)
  (if
    (vl-cmdf "_.-insert"
	     blockname
	     pause
	     1
	     (if ang
	       ang
	       (distance (getvar "lastpoint") (getpoint (getvar "lastpoint")))
	       ) ;_ end of if
	     pause
	     ) ;_ end of VL-CMDF
     (setq ang (cdr (assoc 50 (entget (entlast)))))
     ) ;_ end of if
  ) ;_ end of defun
В качестве параметра передавай имя блока. Если не работает, сообщи
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.09.2006, 18:27
#33
Star

Конструктор штампов
 
Регистрация: 10.03.2004
г. Киев
Сообщений: 92


> kpblc
Твой код не работает
Код:
[Выделить все]
^C^C_-insert;m06length;\;1;(DISTANCE (getvar "lastpoint") (getpoint (getvar "lastpoint")));;
Нужно вставить блок с масштабом по Х=1, а по У масштаб определить расстоянием от точки вставки до указ. точки, угол поворота 0.
А такой код работает
Код:
[Выделить все]
^C^C_-insert;m06length;\;(DISTANCE (getvar "lastpoint") (getpoint (getvar "lastpoint")));
Но при этом идёт приглашение ввода угла. Как только добавляю в конце ещё ";" выдаёт ошибку.
Получается, что без ввода угла не обойтись что с 'Cal, что с LISP.
Можно немного упростить
Код:
[Выделить все]
^C^C_-insert;m06length;\;(DISTANCE (getvar "lastpoint") (getpoint));
Star вне форума  
 
Непрочитано 06.09.2006, 21:50
#34
Джек

Строительство
 
Регистрация: 03.09.2003
Нижний Новгород
Сообщений: 81
<phrase 1=


Цитата:
Сообщение от kpblc
Без проверок на работоспособность:
Код:
[Выделить все]
(defun insblock	(blockname / ang)
  (if
    (vl-cmdf "_.-insert"
	     blockname
	     pause
	     1
	     (if ang
	       ang
	       (distance (getvar "lastpoint") (getpoint (getvar "lastpoint")))
	       ) ;_ end of if
	     pause
	     ) ;_ end of VL-CMDF
     (setq ang (cdr (assoc 50 (entget (entlast)))))
     ) ;_ end of if
  ) ;_ end of defun
В качестве параметра передавай имя блока. Если не работает, сообщи
Спасибо за лисп, но прога не работае или работает , но я не понял!!!!!
В место blockname - я написал имя автокадовского файла.
А принцип работы проги должна заключатся:
1. вызвал прогу
2. вставляешь блок
3. делаешь поворот (визуально смотришт как и где поворачиваешь)
4. после поворота , прога не завершается
5. снова ставишь блок , но угол поворота уже сохраняется и т.д.
Джек вне форума  
 
Непрочитано 07.09.2006, 11:34
#35
Кулик Алексей aka kpblc
Moderator

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


Стоп. Блок уже должен быть в файле. Если ты вставляешь внешний файл как блок, то тут по другому надо делать, ЯТД.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.09.2006, 13:15
#36
Джек

Строительство
 
Регистрация: 03.09.2003
Нижний Новгород
Сообщений: 81
<phrase 1=


Цитата:
Сообщение от kpblc
Стоп. Блок уже должен быть в файле. Если ты вставляешь внешний файл как блок, то тут по другому надо делать, ЯТД.
Да, я вставляю внешний файл как блок, но я в настройке сделал доступ поддержки автокада.
Джек вне форума  
 
Непрочитано 12.10.2009, 13:40
#37
klinker


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


Тогда следующий вопрос: Мне удалось сделать кнопку для вставки блока, он нормально вставляется, с нужным масштабом, только одна проблема- как сделать, чтобы команда могла завершаться после вставки блока, а то она отключается только при нажатии ESC Не оставляйте без ответа, коллеги

Последний раз редактировалось klinker, 12.10.2009 в 14:02.
klinker вне форума  
 
Непрочитано 01.04.2010, 13:21
#38
whisper_23

конструктор
 
Регистрация: 31.01.2008
г. Новоалтайск
Сообщений: 102
<phrase 1=


подскажите, а если мне нужно вставить дин. блок ?
просто я сделал так
^C^C_.-insert c:/temp.dwg;\;;
но тогда вставляется блок который содержит в себе мой дин. блок и динамичность появляется только при "взрыве" первого...
whisper_23 вне форума  
 
Непрочитано 01.04.2010, 13:41
#39
Anton_Br

архитектор
 
Регистрация: 20.11.2007
Ростов-на-Дону
Сообщений: 539


я вот не понял зачем всё это....А не проще в Design Center найти этот файл с блоками выбрать во вкладке Blocks нужные блоки и правым кликом выбрать меню где нажать greate tool palette.
У вас тогда будет палитра где будут иконки блоков и их имя. Для этого в файле все блоки должны быть поименованы.
Anton_Br вне форума  
 
Непрочитано 01.04.2010, 13:45
#40
whisper_23

конструктор
 
Регистрация: 31.01.2008
г. Новоалтайск
Сообщений: 102
<phrase 1=


ну не хочу я через tool palette... много места занимает на экране.
хочу создать панельку с кнопочками
whisper_23 вне форума  
 
Непрочитано 01.04.2010, 14:04
#41
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,917
<phrase 1=


Цитата:
Сообщение от whisper_23 Посмотреть сообщение
много места занимает на экране.
сделай сворачивающимся
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 02.04.2010, 08:49
#42
E-degtyarev

Помогаю, кому делать нечего.
 
Регистрация: 27.03.2009
Русская деревня
Сообщений: 394


klinkerПопробуй Lisp-ом:
^C^C(vl-cmdf "_.insert" "C:/temp.dwg")

Последний раз редактировалось E-degtyarev, 02.04.2010 в 08:58.
E-degtyarev вне форума  
 
Непрочитано 02.04.2010, 08:59
#43
whisper_23

конструктор
 
Регистрация: 31.01.2008
г. Новоалтайск
Сообщений: 102
<phrase 1=


А где тут Lisp ?
whisper_23 вне форума  
 
Непрочитано 02.04.2010, 09:13
#44
Do$

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


Когда указываешь путь при вставке блока, то акад берет чертеж из этого пути и создает из него блок с именем по названию файла. То есть дин. блок будет внутри этого блока. Как выход - можно потом взорвать вставленный блок (если, конечно, только один блок в файле).
Do$ вне форума  
 
Непрочитано 02.04.2010, 09:18
#45
whisper_23

конструктор
 
Регистрация: 31.01.2008
г. Новоалтайск
Сообщений: 102
<phrase 1=


Цитата:
Сообщение от Do$ Посмотреть сообщение
Когда указываешь путь при вставке блока, то акад берет чертеж из этого пути и создает из него блок с именем по названию файла. То есть дин. блок будет внутри этого блока. Как выход - можно потом взорвать вставленный блок (если, конечно, только один блок в файле).
я это уже понял.
как сделать просто вставку блока а не вставку файла с блоком?
whisper_23 вне форума  
 
Непрочитано 02.04.2010, 09:44
#46
Do$

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


В упрощенном варианте как-то так:

Код:
[Выделить все]
(defun ins-dyn-blk (path / ins old_var)
  (vl-load-com)
  (setq old_var
  (list (getvar "cmdecho")
        (getvar "attdia")
        (getvar "attreq")
        (getvar "insunits")
  ) ;_ end of list
  ) ;_ end of setq
  (mapcar '(lambda (var) (setvar var 0))
   (list "cmdecho" "attdia" "attreq" "insunits")
  ) ;_ end of mapcar
  (if
    (vl-cmdf
      "_.insert"
      path
      pause
      1
      ""
      0
    ) ;_ end of vl-cmdf
     (progn
       (vla-explode (setq ins (vlax-ename->vla-object (entlast))))
       (vla-delete ins)
     ) ;_ end of progn
  ) ;_ end of if
  (mapcar 'setvar
   (list "cmdecho" "attdia" "attreq" "insunits")
   old_var
  ) ;_ end of mapcar
  (princ)
) ;_ end of defun
;;;Пример для кнопки: ^C^C(load "ins-dyn-blk.lsp");(ins-dyn-blk "C:\\temp.dwg");
Вложения
Тип файла: lsp ins-dyn-blk.lsp (822 байт, 59 просмотров)
Do$ вне форума  
 
Непрочитано 02.04.2010, 10:27
#47
whisper_23

конструктор
 
Регистрация: 31.01.2008
г. Новоалтайск
Сообщений: 102
<phrase 1=


Я должен загрузить этот Lisp и указать в макросе кнопки
^C^C(load "ins-dyn-blk.lsp");(ins-dyn-blk "C:\\temp.dwg")
не так ?
whisper_23 вне форума  
 
Непрочитано 02.04.2010, 10:39
#48
Do$

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


Достаточно поместить файл ins-dyn-blk.lsp во вспомогательную папку AutoCAD и повесить на кнопку:
Код:
[Выделить все]
^C^C(load "ins-dyn-blk.lsp");(ins-dyn-blk "C:\\temp.dwg");
Вот это выражение производит загрузку лисп-файла из папки поддержки:
Код:
[Выделить все]
(load "ins-dyn-blk.lsp")
Если лисп планируется как-то иначе загружать, то на кнопку вешать:
Код:
[Выделить все]
^C^C(ins-dyn-blk "C:\\temp.dwg");
Если все что я написал не понятно, читать тут: http://dwg.ru/art/8
Do$ вне форума  
 
Непрочитано 02.04.2010, 10:56
#49
whisper_23

конструктор
 
Регистрация: 31.01.2008
г. Новоалтайск
Сообщений: 102
<phrase 1=


спасибо, всё работает
только пришлось написать не C:\\temp.dwg а C:/temp.dwg уж не знаю почему, но по вашему не работало
whisper_23 вне форума  
 
Непрочитано 02.04.2010, 11:28
#50
Do$

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


Цитата:
Сообщение от whisper_23 Посмотреть сообщение
спасибо, всё работает
только пришлось написать не C:\\temp.dwg а C:/temp.dwg уж не знаю почему, но по вашему не работало
На здоровье
Да не верю что-то, чтоб не работало... принцип постановки слешей такой: если в строке пути стоит обратный слеш (\) то он заменяется на два обратных (\\), соответственно, если таких слеша два (сетевая папка, например), то ставится вместо двух четыре. Прямой слеш (/) не заменяется.
Пример 1 (локальная папка):
Код:
[Выделить все]
"C:\Documents and Settings\<username>\Мои документы\Проектирование\Материалы\AutoCAD\Чертежи\Дин.блоки\эл.перемычки(Shoorup).dwg"
--->"C:\\Documents and Settings\\<username>\\Мои документы\\Проектирование\\Материалы\\AutoCAD\\Чертежи\\Дин.блоки\\эл.перемычки(Shoorup).dwg"
Пример 2 (сетевая папка):
Код:
[Выделить все]
\\<foldername>\All\<username>\Проектирование\Шаблон\Blocks Library\эл.перемычки(Shoorup).dwg
--->\\\\<foldername>\\All\\<username>\\Проектирование\\Шаблон\\Blocks Library\\эл.перемычки(Shoorup).dwg
Ну раз работает, то, может, и не надо трогать
Do$ вне форума  
 
Непрочитано 02.04.2010, 11:33
#51
whisper_23

конструктор
 
Регистрация: 31.01.2008
г. Новоалтайск
Сообщений: 102
<phrase 1=


Ладно, разберемся...
спасибо ещё раз.
думаю тему можно закрыть.
whisper_23 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Вставка блока с помощью иконки