Помогите объединить примитивы "текст" (цифры, точки)
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Помогите объединить примитивы "текст" (цифры, точки)

Помогите объединить примитивы "текст" (цифры, точки)

Ответ
Поиск в этой теме
Непрочитано 16.04.2013, 06:05 #1
Помогите объединить примитивы "текст" (цифры, точки)
Малявка
 
Егорьевск Моск.обл.
Регистрация: 28.02.2007
Сообщений: 206

"Фрагмент.dwg" - небольшая часть PDF-файла, пропущенного через Corel Draw.
Все высотные отметки взорваны. пунктирные линии взорваны.
Проштудировала все посты про "объединение слов". Не нашла подходящих лиспов к моему случаю. Функция из Express не подходит: для правильного отображения результата требует точечного выбора в строгой последовательности, а я хочу рамкой.
Всех примитивов в чертеже - 400 тысяч!
Прошу помощи.
Спасибо.
____________________
p.s Предполагаю такой алгоритм склеивания текста:
После запуска макроса командная строка предлагает выбрать несколько примитивов.
Выбираю рамкой или индивидуально какую-то одну отметку, например "1", "5", "0", ".", "1", "6", причём в произвольной последовательности знаков.
После этого ком. строка предлагает выбрать базовую точку будущего примитива
Я указываю мышкой.
Затем макрос соединяет все выбранные примитивы "текст", считая их по оси "Х" слева направо, даже если они расположены под углом. Это важно, так как просмотренные мною программы склеивают примитивы не так, как надо.
В конце работы макрос формирует нужный склеенный примитив под таким же углом и с базовой точкой в указанном месте, на новом слое, например, "Отметки", или на текущем слое. Получается "150.16".
Удаляет старые примитивы.
На всякий случай, надо предусмотреть возможность Ctrl+Z

Работаю в AutoCAD 2011 RUS

Вложения
Тип файла: dwg
DWG 2007
фрагмент.dwg (2.48 Мб, 1696 просмотров)


Последний раз редактировалось Малявка, 16.04.2013 в 10:45. Причина: Добавление
Просмотров: 4158
 
Непрочитано 16.04.2013, 13:59
#2
Kirill_Ja


 
Регистрация: 28.07.2008
Мурманск
Сообщений: 208
<phrase 1=


Самый простой способ реализации - через эту ветку))))
А если серьезно, может проще просто выехать в поле и переснять?
Или перецифровать растр. Установить его в качестве подложки в любой программе (обвеске) для рисования топографии.
В Геониксе там или Кредо Топоплане.
Kirill_Ja вне форума  
 
Автор темы   Непрочитано 16.04.2013, 14:18
#3
Малявка


 
Регистрация: 28.02.2007
Егорьевск Моск.обл.
Сообщений: 206


Kirill_Ja, спасибо за совет. Первый способ простой, да не дешевый ))
Я предполагаю (хотя, это только мои мысли), что эти отметки как раз и будут использоваться в Геониксе.
А что, действительно сложно сделать, чтобы макрос вычислял координату "Х" у базовых точек выделенных примитивов "текст"?
А потом в восходящем порядке формировал бы из них один примитив.
Малявка вне форума  
 
Непрочитано 16.04.2013, 14:58
#4
Do$

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


Все требования не учел, но работает.
Прежде чем использовать - OVERKILL на все отметки, а то там текст один на другой наложен.
Код:
[Выделить все]
(defun _dwgru-conv-pickset-to-list (value / tab item)
  (repeat (setq	tab  nil
		item (sslength value)
	  ) ;_ end setq
    (setq tab (cons (ssname value (setq item (1- item))) tab))
  ) ;_ end repeat
) ;_ end defun

(defun c:textapp (/ ss lst txt str)

  (setq ss (ssget '((0 . "TEXT"))))
  (setq lst (_dwgru-conv-pickset-to-list ss))
  (setq	lst (vl-sort lst
		     '(lambda (a b)
			(< (cadr (assoc 10 (entget a)))

			   (cadr (assoc 10 (entget b)))
			)
		      )
	    )
  )
  (setq txt (car lst))
  (setq str "")
  (foreach deltxt (cdr lst)
    (setq str (strcat str (cdr (assoc 1 (entget deltxt)))))
    (entdel deltxt)
  )
  (entmod
    (list (cons -1 txt)
	  (cons 1 (strcat (cdr (assoc 1 (entget txt))) str))
    )
  )
)
Do$ вне форума  
 
Автор темы   Непрочитано 16.04.2013, 15:09
#5
Малявка


 
Регистрация: 28.02.2007
Егорьевск Моск.обл.
Сообщений: 206


Do$, спасибо огромное! Пошла тестировать!
_______________
Класс! Работает!
Осталось ещё указать базовую точку.
И - как обычно - "озеленить" получившийся новый примитив, чтобы видеть оставшиеся для редактирования.
Но даже и за этот лиспик - СПАСИБО!!!
Великая помощь!

Последний раз редактировалось Малявка, 16.04.2013 в 16:08.
Малявка вне форума  
 
Непрочитано 16.04.2013, 16:17
#6
Do$

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


Только ESC не жмите и систему координат мировую поставьте.
Код:
[Выделить все]
(defun _dwgru-conv-pickset-to-list (value / tab item)
  (repeat (setq	tab  nil
		item (sslength value)
	  ) ;_ end setq
    (setq tab (cons (ssname value (setq item (1- item))) tab))
  ) ;_ end repeat
) ;_ end defun

(defun c:textapp (/ ss pt lst txt str)

  (setq	ss  (ssget '((0 . "TEXT")))
	pt  (getpoint)
	lst (_dwgru-conv-pickset-to-list ss)
	lst (vl-sort lst
		     '(lambda (a b)
			(< (cadr (assoc 10 (entget a)))
			   (cadr (assoc 10 (entget b)))
			)
		      )
	    )
	txt (car lst)
	str ""
  )
  (foreach deltxt (cdr lst)
    (setq str (strcat str (cdr (assoc 1 (entget deltxt)))))
    (entdel deltxt)
  )
  (entmod
    (list (cons -1 txt)
	  (cons 10 pt)
	  (cons 1 (strcat (cdr (assoc 1 (entget txt))) str))
	  (cons 62 3)
    )
  )
)
Do$ вне форума  
 
Автор темы   Непрочитано 16.04.2013, 16:20
#7
Малявка


 
Регистрация: 28.02.2007
Егорьевск Моск.обл.
Сообщений: 206


Do$, Спасибо! Тестирую.
______________
Do$, Огромное спасибо! Это именно то, что надо!
Моя благодарность ярким позитивом распространяется на весь форум DWG.RU

Последний раз редактировалось Малявка, 16.04.2013 в 16:29.
Малявка вне форума  
 
Непрочитано 16.04.2013, 17:21
#8
Do$

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


Пожалуйста!
+1 к моей карме
Do$ вне форума  
 
Непрочитано 16.04.2013, 17:48
#9
Владимир.

Проектирую
 
Регистрация: 10.01.2005
Сообщений: 3,738


По-моему, проще отметки с pdf "набить" вручную
Владимир. вне форума  
 
Непрочитано 16.04.2013, 17:53
#10
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Малявка Посмотреть сообщение
Первый способ простой, да не дешевый ))
ну и не такой уж недешевый, зато это будет выглядеть не как с коленки
Цитата:
Сообщение от Kirill_Ja Посмотреть сообщение
А если серьезно, может проще просто выехать в поле и переснять?
Может найти оригиналы из компаса?

Цитата:
Сообщение от Do$ Посмотреть сообщение
+1 к моей карме
карму в карман не положишь
gomer вне форума  
 
Автор темы   Непрочитано 16.04.2013, 21:13
#11
Малявка


 
Регистрация: 28.02.2007
Егорьевск Моск.обл.
Сообщений: 206


Do$, очень верно подмечено.
Владимир., да уж было и это, набивали на растровой подложке.
Ещё вопрос, что легче и быстрее. Вот я и попробую, сравню.
Малявка вне форума  
 
Непрочитано 23.05.2013, 23:45
#12
Александр Кот


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


Скажите, а как результат объединения поместить не в текст, а в атрибут блока?
короче говоря есть чертеж с огромным количеством блоков газоснабжения, но подписи к каждому блоку расползлись самостоятельными элементами. а надо все это дело загнать в атрибуты блока.
т.е. задача следующая - есть строка, разбитая не несколько отдельных текстовых однострочных объектов. ее нужно объединить в один однострочный текст, и результат поместить в атрибут блока, который расположен рядом. имя атрибута известно.
буду рад любой помощи. спасибо
Александр Кот вне форума  
 
Непрочитано 24.05.2013, 00:33
#13
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Попробуй , на скорую руку без проверки
Код:
[Выделить все]
(defun C:amt (/ atent atlist elist ent strtxt)
  (command "_undo" "_be")
(setq strtxt "")
(while  
      
  (and (setq ent (car (entsel "\nВыбирай однострочный текст по порядку (Enter для окончания): ")))    
       (eq "TEXT" (cdr (assoc 0 (setq elist (entget ent))))))       
        (setq strtxt (strcat strtxt " " (cdr (assoc 1  elist))))
  )  
  (setq atent (car (nentsel "\nВыбрать атрибут: ")))
  (setq atlist (entget atent))
(entmod (subst (cons 1 strtxt)(assoc 1 atlist)atlist))
(command "_regen")
  (command "_undo" "_e")
  (princ)
  )
Олег (jr.) вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Помогите объединить примитивы "текст" (цифры, точки)



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Аттестация в Минрегионе по негосударственной экспертизе Людмила Охр Прочее. Архитектура и строительство 350 14.02.2015 17:50
Линии электрических соединений Shoorup Программирование 23 07.02.2015 15:13