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

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

Как получить текст пояснения к блоку?

Ответ
Поиск в этой теме
Непрочитано 02.10.2006, 11:27 #1
Как получить текст пояснения к блоку?
mmmx
 
Москва
Регистрация: 06.07.2006
Сообщений: 42

На этапе создания блока можно добавить к нему пояснение (см.команду создания блока, там есть специальное поле для ввода пояснения. Его затем можно отредактировать командой Редактирование-Объекты-Пояснение к блоку...)

Как получить к нему доступ программно?
Просматриваю свойства блока остановом на последней строке:
Код:
[Выделить все]
Sub orderEnt()
  Set objAllBlks = ThisDrawing.Blocks
  For Each objBlk In objAllBlks
        
        Dim ssobjs(0) As AcadBlock 'AcadEntity
        Set ssobjs(0) = objBlk
- пояснения не нахожу...
Но оно копируется с блоком в другой чертеж.
Подскажите пожалуйста!
Просмотров: 5309
 
Автор темы   Непрочитано 02.10.2006, 11:33
#2
mmmx


 
Регистрация: 06.07.2006
Москва
Сообщений: 42


С помощью (entget(ssname(ssget)0)) тоже ничего не видно
mmmx вне форума  
 
Автор темы   Непрочитано 02.10.2006, 11:41
#3
mmmx


 
Регистрация: 06.07.2006
Москва
Сообщений: 42


(отсюда взял:
http://www.kurganobl.ru/cad/book.jsp...id=182&tn=main)

dxf-код - 4
Код:
[Выделить все]
Команда: (setq blk (tblsearch "block" "ыва"))
((0 . "BLOCK") (2 . "ыва") (70 . 0) (4 . "описание1\r\nописание2\r\n7") (10 0.0 
0.0 0.0) (-2 . <Имя объекта: 7ef76140>))
странный какой-то доступ к этому коду...

Как бы это сделать на VBA?
mmmx вне форума  
 
Непрочитано 02.10.2006, 11:57
#4
Кулик Алексей aka kpblc
Moderator

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


По идее надо обращаться к Comments описания блока. Как-то так, наверное:
Код:
[Выделить все]
Function GetBlockDescription(BlockName As String, _
      Optional NewDescr As String) As String
Dim objBlock As AcadBlock
  On Error GoTo lErrNoBlock
  Set objBlock = ThisDrawing.Blocks.Item(BlockName)
  On Error GoTo lErrDescr
  If NewDescr <> "" Then
    objBlock.Comments = NewDescr
  End If
  GetBlockDescription = objBlock.Comments
  Exit Function
lErrNoBlock:
  MsgBox "Такого блока в текущем файле нет!", vbOKOnly + vbCritical + vbApplicationModal
  Exit Function
lErrDescr:
  MsgBox "Невозможно получить описание блока!"
  Exit Function
End Function
Код слегка подправил для "назначения"
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 02.10.2006, 12:10
#5
mmmx


 
Регистрация: 06.07.2006
Москва
Сообщений: 42


Большое спасибо, уважаемый kpblc!
Есть Comments!
mmmx вне форума  
 
Непрочитано 02.10.2006, 13:12
#6
Кулик Алексей aka kpblc
Moderator

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


Я там код слеганца подправил, глянь - работает или не совсем?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 02.10.2006, 14:06
#7
mmmx


 
Регистрация: 06.07.2006
Москва
Сообщений: 42


В первом варианте NewDescr не был задействован, кажется...
Эта функция мне очень нужна, обязательно проверю и буду пользоваться!
mmmx вне форума  
 
Непрочитано 02.10.2006, 14:18
#8
Кулик Алексей aka kpblc
Moderator

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


Ага, забыл сначала. Потом восстановил
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.10.2006, 17:05
#9
Zouss


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


Код:
[Выделить все]
(defun c:c1 (/ n ss ssl)			       ;вызывающая команда со всякой косметикой и эбаутами
  (setq	ssl (length (setq ss (getblocklst)))
	n   0
  ) ;_  setq
  ssl
  (repeat ssl
    (princ (nth n ss))
    (princ "\n")
    (setq n (1+ n))
  ) ;_  repeat
) ;_  defun

(defun c:c2 (/ n l)				       ;демо-функция запуска
  (setq	l (getblockspc (getblocklst))
	n (length l)
	i 0
  ) ;_  setq
    (command "TEXT" "0,0")
  (command "3.5")
  (command "0")
  (command "Список")
    
  (repeat n
    (setq cs (nth i l)
	  z (car cs)
    z1 (itoa (cadr cs))
    string (strcat
	     z
		   "     "
		   z1
		   " шт."
		   )
	  )
     (command "Text" "")
    (command string)
    (setq i (1+ i))
  ) ;_  repeat
  
) ;_  defun 


;;;Функция (getblocklst) возвращает список блоков из таблицы блоков

(defun getblocklst (/ z blocklst)
  (setq	blocklst (cons (cdr (assoc 2 (tblnext "BLOCK" T))) blocklst)
  ) ;_  setq
  (while (setq z (tblnext "BLOCK"))
    (setq blocklst (cons (cdr (assoc 2 z)) blocklst))
  ) ;_  while
  blocklst
) ;_  defun

;;;Функция (getblockspc) возвращает список вида имя блока - description блока - количество вхождений

(defun getblockspc (blocklst / m n i cbname cbdesc blockspc)
  (setq	n	 (length blocklst)
	blockspc (list)
	i	 0
  ) ;_  setq
  (repeat n
    (setq
      m	(sslength
	  (ssget "_X"
		 (list '(0 . "insert")
		       (cons 2 (setq cbname (nth i blocklst)))
		       '(410 . "Model")
		 ) ;_  list
	  ) ;_  ssget
	) ;_  sslength
      i	(1+ i)
    ) ;_  setq
    (if	m
;;;первый вариант - имя блока - description блока - количество вхождений       
;;;;;;      (progn
;;;;;;	(setq
;;;;;;	  cbdesc   (cdr (assoc 4 (tblsearch "BLOCK" cbname)))
;;;;;;	  blockspc (cons (list cbname cbdesc m) blockspc)
;;;;;;	) ;_  setq
;;;;;;      ) ;_  progn

;;;второй вариант description блока - количество вхождений
;;;если description блока не определено, то в качестве него принимается имя блока

      (progn
	(setq
	  cbdesc   (if
		     (=	""
			(setq z (cdr (assoc 4 (tblsearch "BLOCK" cbname))))
		     ) ;_  =
		      cbname
		      z
		   ) ;_  if

	  blockspc (cons (list cbdesc m) blockspc)
	) ;_  setq
      ) ;_  progn
    ) ;_  if
  ) ;_  repeat
  blockspc
) ;_  defun
вот черновой вариант проги которая печатает в поле чертежа список имя блока - описание (тот самый description) - количество вхождений
в которой конструкция (cdr (assoc 4 (tblsearch "BLOCK" cbname))) возвращает значение description блока по имени cbname
Zouss вне форума  
 
Непрочитано 12.12.2006, 14:49
#10
Владимир Егорьев


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


Можно-ли поменять поснение к уже созданному блоку?

В редакторе открываю редактор описания блока,выбираю блок.Описание вижу ,но оно не активно
 
 
Непрочитано 12.12.2006, 14:59
#11
Кулик Алексей aka kpblc
Moderator

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


Можно. Здесь (на dwg.ru) в смысле было как-то обсуждение. Мне, если честно, просто лень искать, поэтому отправляю сюда: http://www.arcada.com.ua/forum/viewtopic.php?t=724 - вроде как работает.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.12.2006, 15:07
#12
Владимир Егорьев


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


Да я темы нашёл,просто оптиму не могу найти.Я с кодами не дружу.
Мне бы попроще как.
 
 
Непрочитано 12.12.2006, 15:15
#13
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


В последних версиях AutoCAD объект Block имеет свойство Comments - для чтения и записи. Раньше можно было только через DXF-коды.

Заодно незаметненько так ввели и для слоя свойство Description.
ShaggyDoc вне форума  
 
Непрочитано 13.12.2006, 03:47
#14
KAI

геологоразведка, строительство
 
Регистрация: 14.10.2003
Магадан
Сообщений: 311


Цитата:
Заодно незаметненько так ввели и для слоя свойство Description.
Вот именно, и в Read-me вроде не писали об этом.
Короче, поставил новую версию - смотри внимательно в командную строку и другие окошки!
__________________
Лень - великий двигатель прогресса!
KAI вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как получить текст пояснения к блоку?