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

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

Текст из блока.

Ответ
Поиск в этой теме
Непрочитано 02.06.2006, 09:36 #1
Текст из блока.
игорёк
 
проектирование
 
москва
Регистрация: 30.10.2005
Сообщений: 216

Имеется блок, в который входит текстовая строка (только одна текстовая строка, если это имеет значение).
Как програмно извлеч из блока текст?
Если у кого есть lisp скинте...
Или кто подскажет как извлеч элементы из блока...
Просмотров: 4929
 
Непрочитано 02.06.2006, 09:44
#2
Кулик Алексей aka kpblc
Moderator

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


Внутри блока текст, многострочный текст или атрибут? Для текстов лови:
Код:
[Выделить все]
(defun c:txt_blk (/ adoc ent res)
  (vl-load-com)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark adoc)
  (if (and (setq ent (entsel "\nУкажите блок <Выход> : "))
	   (= (cdr (assoc 0 (entget (car ent)))) "INSERT")
	   ) ;_ end of and
    (vlax-for item (vla-item (vla-get-blocks adoc)
			     (cdr (assoc 2 (entget (car ent))))
			     ) ;_ end of vla-item
      (if (vlax-property-available-p item 'textstring)
	(setq res (append res (list (vla-get-textstring item))))
	) ;_ end of if
      ) ;_ end of vlax-for
    ) ;_ end of if
  (vla-endundomark adoc)
  (princ res)
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.06.2006, 11:02
#3
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


kpblc, ну до каких пор вы будете смущать неокрепшие души подобным похабством :?: :!: Вот как это делактся в приличном обществе:
Код:
[Выделить все]
(defun C:Txt_Blk ( / blk bk)
  (setq adoc (vla-get-ActiveDocument (vlax-get-acad-object))
        bks (vla-get-blocks adoc) 
        util (vla-get-utility adoc))
  (vla-getEntity util 'blk nil "Выбрать блок: ")
  (if (= (vla-get-ObjectName blk) "AcDbBlockReference")
    (setq bk (vla-item bks (vla-get-name blk)))
    (alert "Это не блок, дубина!!"));if
  (vlax-for ent bk (if (= (vla-get-ObjectName ent) "AcDbText")
      (setq txt (vla-get-TextString ent))));vlax-for
   (alert (if (null txt) "Разуй глаза, здесь нету здесь текста!"  txt))
);end
Лентяй вне форума  
 
Непрочитано 02.06.2006, 11:34
#4
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,202
<phrase 1=


игорёк
кстати, пишется извлечЬ :roll:

Лентяю с Крысом:
Оба хороши, наколбасили тут....ну как дети ей бо...
только пиво питерское трескать
__________________
apel.fas
Apelsinov вне форума  
 
Непрочитано 02.06.2006, 11:42
#5
Кулик Алексей aka kpblc
Moderator

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


> Apelsinov : так и ты приезжай, тоже попьем Кстати, вопрос втречный - у тебя есть другой, менее замороченный вариант?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.06.2006, 12:37
#6
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,202
<phrase 1=


Код:
[Выделить все]
(defun test (/ list_res)
  (if (and (setq blk (APEL-ENTSEL "Блок:"))
	   (eq "AcDbBlockReference" (vla-get-ObjectName blk))
      )
    (vlax-for i	(APEL-BLOCK-BLOCKREF_TO_BLOCK blk)
      (setq
	list_res (cons (APEL-MOD-GET_PROPERTY i "textstring")
		       list_res
		 )
      )
    )
  )
  (VL-REMOVE-IF 'null list_res)
)
;;;(apel-com '(princ (test)))
Фактически аналогично Лентяевскому, но проверок больше.
а библиотечные функции я приводить не буду. Я теперь как Лохматый Доктор
__________________
apel.fas
Apelsinov вне форума  
 
Непрочитано 02.06.2006, 12:54 Привет
#7
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,968


Лентяй это жестко
Код:
[Выделить все]
"Разуй глаза, здесь нету здесь текста!"
__________________
Работаю за еду.
Working for food.
Für Essen arbeiten.
العمل من أجل الغذاء
Працую за їжу.
DEM вне форума  
 
Автор темы   Непрочитано 05.06.2006, 10:16
#8
игорёк

проектирование
 
Регистрация: 30.10.2005
москва
Сообщений: 216


ничего не получилось. (:::::::
Блоки вставлялись из базы .....
Посмотрите на досуге сможет ли кто либо извлечЬ текст, если получится подскажите как...
[ATTACH]1149488210.dwg[/ATTACH]
игорёк вне форума  
 
Непрочитано 05.06.2006, 10:46
#9
Кулик Алексей aka kpblc
Moderator

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


Блин, не зря же спрашивал - тексты там или атрибуты. Да и почистить файл не мешало бы Ладно, хватай первоначальный вариант:
Код:
[Выделить все]
(defun c:att_blk (/ adoc selset)
  (vl-load-com)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark adoc)
  (if (setq selset (ssget '((0 . "INSERT") (66 . 1))))
    (foreach item
	     (mapcar
	       'car
	       (mapcar
		 '(lambda (x)
		    (vlax-safearray->list
		      (vlax-variant-value (vla-getattributes x))
		      ) ;_ end of vlax-safearray->list
		    ) ;_ end of LAMBDA
		 (mapcar 'vlax-ename->vla-object
			 (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
			 ) ;_ end of mapcar
		 ) ;_ end of mapcar
	       ) ;_ end of mapcar
      (princ (strcat "\n"
		     (vla-get-tagstring item)
		     " . "
		     (vla-get-textstring item)
		     ) ;_ end of strcat
	     ) ;_ end of princ
      ) ;_ end of foreach
    ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 05.06.2006, 11:33
#10
игорёк

проектирование
 
Регистрация: 30.10.2005
москва
Сообщений: 216


Все получается!!!
Надо теперь довести ее до совершенства, чтоб удаляла блок и создавала текст...
игорёк вне форума  
 
Непрочитано 05.06.2006, 11:48
#11
Кулик Алексей aka kpblc
Moderator

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


Слушай, а с самого начала было нельзя всю задачу описать? Команда burst из Express Tools - и будет тебе полное счастье и благолепие
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 05.06.2006, 12:18
#12
игорёк

проектирование
 
Регистрация: 30.10.2005
москва
Сообщений: 216


У меня MAP 3D стоит и там нет Express Tools.
игорёк вне форума  
 
Непрочитано 05.06.2006, 13:07
#13
VVA

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


>игорек ЕСТЬ!!!
Запусти setup и см. Step 5
[ATTACH]1149498422.jpg[/ATTACH]
VVA вне форума  
 
Автор темы   Непрочитано 05.06.2006, 14:04
#14
игорёк

проектирование
 
Регистрация: 30.10.2005
москва
Сообщений: 216


Значит мне просто не поставили .....
Но всеравно спасибо за совет.
Я бы хотел спросить с помощью какой литературы можно побыстрей освоить технологию ActiveX? Я в большей части пишу на Autolisp. Купил книгу Полещука "Разработка приложений и адаптация..." Там написано нормально но мало примеров...
игорёк вне форума  
 
Непрочитано 06.06.2006, 22:19
#15
Startrek

AutoCAD/AutoLISP
 
Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133


Тока не пинайте ногами, я тут совсем простенько накалякал

(defun c:gtxe ()
(setq tx (entget (car (nentsel))))
(setq txt (cdr (assoc 2 tx)))
(command "erase" "l" "")
(command "mtext" pause pause txt "")
(princ)
)
__________________
Сквозь тернии к звездам.... и обратно :yes:
Startrek вне форума  
 
Автор темы   Непрочитано 08.06.2006, 09:03
#16
игорёк

проектирование
 
Регистрация: 30.10.2005
москва
Сообщений: 216


"Startrek
Тока не пинайте ногами, я тут совсем простенько накалякал"
Пинать никто и не собирается (я так думаю ) Просто эта
функция извлекает текст из блока, а у меня в данном случае получился не блок.
[/img][/list]
игорёк вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Текст из блока.