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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Insert + entsel

Insert + entsel

Ответ
Поиск в этой теме
Непрочитано 01.06.2006, 07:49 #1
Insert + entsel
Gaa
 
сан-техник на пенсии
 
Регистрация: 23.05.2005
Сообщений: 140

Подскажите, как с помощью ЛИСПа можно вставить блок и снять его парамеиры (координаты, имя, значение иттрибутов...) что-то общее м-ду командой INSERT и функцией ENTSEL?

т.е. я вставляю известный мне блок (MyBlock.dwg) командой INSERT и хочу знать куда он сел и какие аттрибуты получил и все это в цикле.
__________________
Спасибо
Просмотров: 3693
 
Непрочитано 01.06.2006, 08:13
#2
Кулик Алексей aka kpblc
Moderator

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


(entget (entlast)) к примеру
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 01.06.2006, 09:21
#3
Gaa

сан-техник на пенсии
 
Регистрация: 23.05.2005
Сообщений: 140


kpblc >>

Спасибо за участие.
Попробовал, но что-то не так

Код:
[Выделить все]
(defun c:gg ()
  (while T
    (command
      "insert" "c:/Gaa-pro/dwg/G_Ta100"	"PS" 1 pause 1 "" "")
    (print (entget (entlast)))
  ) ;_while
) ;_def

ACAD2000
WinXP
__________________
Спасибо
Gaa вне форума  
 
Непрочитано 01.06.2006, 10:02
#4
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Можно так
Код:
[Выделить все]
(setvar "CMDECHO" 1)
(setvar "ATTREQ" 0) ;;;Отключаем запрос аттрибутов
(command	"_.INSERT"
	"c:/Gaa-pro/dwg/G_Ta100" ;;;Имя блока Можно "c:\\Gaa-pro\\dwg\\G_Ta100"
	           ;;; Имя блока в чертеже G_Ta100
	           ;;;Можно "BLK1=c:/Gaa-pro/dwg/G_Ta100"
	           ;;; Имя блока в чертеже BLK1
	pause      ;;; Точка вставки
	pause      ;;;Масштаб по X
	""         ;;;Масштаб по Y (такойже как по Х)
	0          ;;; Угол поворота
) ;_ End of command
(setvar "ATTREQ" 1)
(setvar "ATTDIA" 1)
(setq e1 (entlast))
(command "_.DDATTE" e1) ;;;Атрибуты через диалоговое окно
(princ "\nБЛОК: ")(princ (entget e1))
(princ "\nЗначения атрибутов :")
(princ (mip_get_blk_att e1))
mip_get_blk_att взять http://forum.dwg.ru/showpost.php?p=76098&postcount=8
Что значит у тебя "PS" На этом месте должна быть точка вставки блока
1. PS - если это переменная с координатами (не "PS")
2. pause - ждем указания точки пользователем
3. "100,200" - точно знаем координаты

Последний раз редактировалось VVA, 30.06.2010 в 11:48.
VVA вне форума  
 
Непрочитано 01.06.2006, 10:21
#5
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Код:
[Выделить все]
(defun c:gg ()
  (while (vl-cmdf "insert" "c:/Gaa-pro/dwg/G_Ta100" "PS" 1 pause 1 "" "")
    (print (entget (entlast)))
  )
  (princ)
)
обязано работать
Alaspher вне форума  
 
Автор темы   Непрочитано 01.06.2006, 10:54
#6
Gaa

сан-техник на пенсии
 
Регистрация: 23.05.2005
Сообщений: 140


VVA >>

Цитата:
PS - если это переменная с координатами (не "PS")
Specify insertion point or [Scale/X/Y/Z/Rotate/PScale/PX/PY/PZ/PRotate]: Specify a point or enter an option

PS - показывает, при вставке блока, сам блок в указаном PScale масштабе до его установки в точку вставки.
__________________
Спасибо
Gaa вне форума  
 
Автор темы   Непрочитано 01.06.2006, 11:14
#7
Gaa

сан-техник на пенсии
 
Регистрация: 23.05.2005
Сообщений: 140


Alaspher>>

Запускаю, и получаю такое сообщение,

Код:
[Выделить все]
Command: gg
insert Enter block name or [?] <G_Ta100>: c:/Gaa-pro/dwg/G_Ta100 Specify 
insertion point or [Scale/X/Y/Z/Rotate/PScale/PX/PY/PZ/PRotate]:
Enter X scale factor, specify opposite corner, or [Corner/XYZ] <1>: 1 Enter Y 
scale factor <use X scale factor>: Specify rotation angle <0>:
Enter attribute values
NUMBER:
((-1 . <Entity name: 66053b0>) (0 . "INSERT") (330 . <Entity name: 66050f8>) (5 
. "8E") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . 
"AcDbBlockReference") (66 . 1) (2 . "G_Ta100") (10 442.954 -224.37 0.0) (41 . 
1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) 
(210 0.0 0.0 1.0)) insert
Command: c:/Gaa-pro/dwg/G_Ta100 Unknown command "C:/GAA-PRO/DWG/G_TA100".
а на экране вместо значения аттрибута, который я ввел выходит (см. файл).
блок - круг с номером (аттриб) в середке
[ATTACH]1149146095.jpg[/ATTACH]
__________________
Спасибо
Gaa вне форума  
 
Непрочитано 01.06.2006, 11:25
#8
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
(defun c:gg ()
  (while (vl-cmdf "_.-insert" "c:/Gaa-pro/dwg/G_Ta100" "_PS" 1 pause 1)
    (while (/= (logand (getvar "cmdactive") 31) 0)
      (command pause)
      ) ;_ end of while
    (print (entget (entlast)))
    ) ;_ end of while
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 01.06.2006, 12:38
#9
Gaa

сан-техник на пенсии
 
Регистрация: 23.05.2005
Сообщений: 140


kpblc>>

Не хочет работать, пробовал извращаться по разному. Не хочет!

м.б. проблема в блоке?
[ATTACH]1149151240.dwg[/ATTACH]
__________________
Спасибо
Gaa вне форума  
 
Непрочитано 01.06.2006, 13:12
#10
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
(defun c:ins (/ adoc _cmdecho_ _attdia_ _attreq_ *error* ins_name)
  (defun *error* (msg)
    (if	_cmdecho_
      (setvar "cmdecho" _cmdecho_)
      ) ;_ end of if
    (if	_attdia_
      (setvar "attdia" _attdia_)
      ) ;_ end of if
    (if	_attreq_
      (setvar "attreq" _attreq_)
      ) ;_ end of if
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun
  (vl-load-com)
  (setq	adoc	  (vla-get-activedocument (vlax-get-acad-object))
	_cmdecho_ (getvar "cmdecho")
	_attdia_  (getvar "attdia")
	_attreq_  (getvar "attreq")
	ins_name  "g:\\cir.dwg"
	)				; устанавливать свое либо менять
					; внутри
					; команды
  (vla-startundomark adoc)
  (mapcar 'setvar '("cmdecho" "attdia" "attreq") '(0 0 0))
  (while (vl-cmdf "_.-insert" ins_name pause 1.0 1.0 0.0)
    (princ "\nStart entget function : \n")
    (princ (entget (entlast)))
    (princ "\nEnd entget function : \n")
    ) ;_ end of while
  (if _cmdecho_
    (setvar "cmdecho" _cmdecho_)
    ) ;_ end of if
  (if _attdia_
    (setvar "attdia" _attdia_)
    ) ;_ end of if
  (if _attreq_
    (setvar "attreq" _attreq_)
    ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.06.2006, 13:37
#11
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Код:
[Выделить все]
(defun c:gg ( / attd attr attz)
(setq attd (getvar "ATTDIA")
      attr (getvar "ATTREQ"))
(setvar "ATTREQ" 1)
(setvar "ATTDIA" 0)
(setvar "CMDECHO" 0)
  (while (/= (setq attz (getstring t "\nNUMBER <выход>: "))  "")
    (command "_.-insert" "c:/Gaa-pro/dwg/G_Ta100" "_PS" 1 pause 1 "" 0 attz)
    (terpri)(princ(entget (entlast))) 
    ) ;_ end of while 
(setvar "ATTREQ" attr)
(setvar "ATTDIA" attd)
  (princ) 
  ) ;_ end
VVA вне форума  
 
Автор темы   Непрочитано 01.06.2006, 19:08
#12
Gaa

сан-техник на пенсии
 
Регистрация: 23.05.2005
Сообщений: 140


Мне кажется, что она просто хочет чтобы значение аттрибута было задано как переменная, а не вводилось с командной строки?!

Попробую что ни-ть склепать из предложенного.

Спасибо, ребята, за участие.
__________________
Спасибо
Gaa вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Insert + entsel