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

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

Lisp. Присвоение блоку атрибута и Z из текста.

Ответ
Поиск в этой теме
Непрочитано 16.08.2010, 11:03 #1
Lisp. Присвоение блоку атрибута и Z из текста.
Ancient John
 
Регистрация: 16.08.2010
Сообщений: 5

Вообщем, не линчуйте, если тема уже проскакивала - поиск не дал нормальных результатов. Опишу проблему.
1. Нашел программу ZTXT, которая берет отметку Z для точки из близлежащего текста. Переделал её так, чтобы в главой роли был блок, а не текст ("переделал" громко сказано, но все же). Но не могу сделать "контролирующий" элемент в ней. А именно: менять цвет блока отличные от существующего и заполнять его атрибут на тоже значение Z.
Код:
[Выделить все]
(defun C:Ztxt ( / objSet Point ptLst tmp1 tmp2 pat txtZList dst *error*)
(vl-load-com)
(defun *error*(msg)(princ msg)
(vla-EndUndoMark (vla-get-activedocument (vlax-get-acad-object)))(princ))
(vla-StartUndoMark (vla-get-activedocument (vlax-get-acad-object)))
(if (and
      (setq objSet(ssget "_:L" '((0 . "INSERT"))))
      (setq Point (vl-remove-if 'listp(mapcar 'cadr(ssnamex objSet))))
      (setq ptLst(mapcar 'cdr (mapcar '(lambda(x)(assoc 10 x))(mapcar 'entget Point))))
      (setq objSet nil objSet(ssget "_X" (list '(0 . "*TEXT")(cons 410 (getvar "CTAB")))))
      )
  (progn
    (setq tmp1 (vl-remove-if 'listp(mapcar 'cadr(ssnamex objSet))))
    (setq tmp1 (mapcar '(lambda(x)(setq x (entget x))(list (cdr(assoc 10 x))(cdr(assoc 1 x)))) tmp1))
    (foreach pt ptlst
      (setq tmp2 (mapcar '(lambda(x)(list (distance pt (car x))(cadr x))) tmp1))
      (setq pat (car tmp2))
      (foreach dst tmp2 (if (< (car dst) (car pat))(setq pat dst)))
      (setq txtZList (cons (cadr pat) txtZList))
      )
    (setq txtZList (reverse txtZList))
    (setq txtZList (mapcar '(lambda(x)
                    (vl-string-translate "," "." (vl-string-trim  "%UuoOcC \t"   x))
                   )txtZList))
    (mapcar '(lambda(ptObj pt Z)
               (vla-put-insertionpoint (vlax-ename->vla-object ptObj)
                (vlax-3d-point (list (car pt)(cadr pt) Z))
               )
               )
           Point ptLst (mapcar 'atof txtZList)
            )
    )
  )
  (vla-EndUndoMark (vla-get-activedocument (vlax-get-acad-object)))
  (princ)
  )
Необходимо это, потому что ближайшим может оказаться текст, не принадлежащий к данному блоку. А если будет заполняться атрибут блока, то можно сразу будет отслеживать та ли отметка заполнилась в блок.

2. А, вообще, в идеале опишу свою задачу так. Есть геоподоснова, где каждому блоку (кружочку с заливкой) соответствует текст, содержащий высотную отметку. Но не на строго выверенном расстоянии, а от балды. Нужно заполнить Z-блока из данного текста, но тоже хитро:
1. У одного блока могут стоять сразу две отметки (верх и низ борта -выбрать нужно низ - т.е. меньшую)
2. Ближайшей может оказаться не так текстовая отметка.
В идеале вижу решение задачи следующим образом.
1. Задается расстояние сканирования (допустим 5).
2. Выбираются блоки.
3. Дальше вокруг блока сканируется расстояние на площади описанного круга с радиусом равным расстоянию сканирования. Если в этот предел попадает одна отметка - то и её назначаем отметкой Z и записываем это значение в атрибут блока. Если две и больше - красим точку в красный и переводим пользовательский экран в это место с диалогом ввода этой отметки.

Заранее спасибо

Последний раз редактировалось Ancient John, 16.08.2010 в 11:13.
Просмотров: 12055
 
Непрочитано 16.08.2010, 11:19
#2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Еще раз в чем вопрос как поменять цвет у блока и аттрибут?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 16.08.2010, 11:23
#3
Ancient John


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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Еще раз в чем вопрос как поменять цвет у блока и аттрибут?
1. Дополнить программу так, чтобы она ещё меняла цвет блока и текстовый атрибут внутри блока на значение Z координаты этого блока, полученной из рядом стоящего текста.

2. Написать новую программу по описанному алгоритму. Не обязательно, но желательно.\

Я так понимаю, что никто мне помочь не хочет?

Последний раз редактировалось Ancient John, 16.08.2010 в 22:31.
Ancient John вне форума  
 
Непрочитано 17.08.2010, 20:24
#4
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Ancient John Посмотреть сообщение
чтобы она ещё меняла цвет блока и текстовый атрибут внутри блока на значение Z координаты этого блока, полученной из рядом стоящего текста.
...
Я так понимаю, что никто мне помочь не хочет?
Похоже на то, что присылают моим пользователям (тем которые дорожники). Только они меня просили как раз об обратном. Здесь можно глянуть.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 17.08.2010, 22:31
#5
Ancient John


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


Цитата:
Сообщение от hwd Посмотреть сообщение
Похоже на то, что присылают моим пользователям (тем которые дорожники). Только они меня просили как раз об обратном. Здесь можно глянуть.
Да, когда искал в интернете находил вашу программу Просто это реально без надобности, т.к. в Civil можно задать блок с атрибутом за точку. Вообщем - он эту задачу выполняет сам без дополнительных программ. Единственное, не заменяя на 3D Point.

А у меня вот на руках сейчас блок с отметкой рядом, блок без атрибута И чтобы каждому блоку (около 10 000) задать координату Z по тексту, да и проверить это проверяя в Свойствах - недели не хватит.
Ancient John вне форума  
 
Непрочитано 26.01.2018, 14:38
#6
config


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


Доброго времени суток! Хотел спросить, может по прошествии времени кто-нибудь нашел решение этой давней проблемы? До сих пор не дает покоя (я думаю и не только мне) проблема присвоение высоты блоку из отметки значения атрибута в топографии. Образец блока прикладываю. Спасибо!
Вложения
Тип файла: dwg
DWG 2007
PICKET.dwg (359.3 Кб, 52 просмотров)
config вне форума  
 
Непрочитано 26.01.2018, 14:59
#7
trir


 
Регистрация: 18.12.2010
Сообщений: 5,050


Цитата:
Хотел спросить, может по прошествии времени кто-нибудь нашел решение этой давней проблемы? До сих пор не дает покоя (я думаю и не только мне) проблема присвоение высоты блоку из отметки значения атрибута в топографии.
смешной
trir вне форума  
 
Непрочитано 26.01.2018, 15:17
#8
config


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


Цитата:
Сообщение от trir Посмотреть сообщение
смешной
Спасибо за отзывчивость. Но я веду речь о чистом AutoCAD.
config вне форума  
 
Непрочитано 26.01.2018, 15:31
#9
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Цитата:
Сообщение от config Посмотреть сообщение
Хотел спросить, может по прошествии времени кто-нибудь нашел решение этой давней проблемы?
Судя по датам, кому нужно было, тот эту задачу решил, но видимо не посчитал нужным выложить в сеть.

Цитата:
Сообщение от config Посмотреть сообщение
До сих пор не дает покоя (я думаю и не только мне) проблема присвоение высоты блоку из отметки значения атрибута в топографии.
За почти 8 лет Вы наверное предприняли массу действий для решения этой задачи, а потому начну сначала:
На каком языке пытаетесь решить свою задачу, под какую версию автокада, что уже сделали, что не получается?
Boxa на форуме  
 
Непрочитано 26.01.2018, 15:55
#10
config


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


Цитата:
Сообщение от Boxa Посмотреть сообщение
что уже сделали, что не получается?
Да в том-то и дело, что к большому сожалению я не программист. Поэтому и вопрошаю у сведущих. Может у кого-то есть решение и может поделиться. Или указать ссылку, где вопрос решен.
Цитата:
Сообщение от Boxa Посмотреть сообщение
На каком языке пытаетесь решить свою задачу, под какую версию автокада
В соответствии с темой.
config вне форума  
 
Непрочитано 26.01.2018, 22:26
1 | #11
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


config, Тестируй
Код:
[Выделить все]
(defun C:ATTZBL (/ blname tagname round objSet *error*)
 ;_Приcвоение высоты блоку из отметки значения атрибута
 ;;; 2023-02-02  Добавлена проверка на наличие атрибута в блоке (cons 66 1)
 ;;; https://forum.dwg.ru/showthread.php?p=2020880#post2020880 
  (vl-load-com)
  (defun *error* (msg)
    (princ msg)
    (vla-endundomark
      (vla-get-activedocument (vlax-get-acad-object))
    ) 
    (princ)
  ) 
  (vla-startundomark
    (vla-get-activedocument (vlax-get-acad-object))
  ) 
  (vla-startundomark
    (vla-get-activedocument (vlax-get-acad-object))
  ) 
  (setq blname  "*"  ;_Block name. "*" - any
        tagname "OTMETKA" ;_Tag Z value
  ) 
  (and
    (setq objSet (ssget "_:L" (list (cons 0 "INSERT")(cons 2 blname)(cons 66 1))))
    (setq Lst (vl-remove-if 'listp (mapcar 'cadr (ssnamex objSet))))
    (foreach bl Lst
      (setq pt (cdr(assoc 10 (entget bl))))
      (vla-put-insertionpoint
        (vlax-ename->vla-object bl)
        (vlax-3d-point
          (list (car pt)(cadr pt)
          (atof
            (vl-string-translate
              ","
              "."
              (vl-string-trim
                "%UuoOcC \t"
                (LM:vl-getattributevalue
                  (vlax-ename->vla-object bl) ;_[vla] VLA Block Reference Object
                  tagname                     ;_[str] Attribute TagString 
                ) 
              ) 
            ) 
          )
          )      
        ) 
      ) 
    ) 
  ) 
  (vla-endundomark
    (vla-get-activedocument (vlax-get-acad-object))
  ) ;_ end of vla-EndUndoMark
  (princ)
) ;_ end of defun
;; Get Attribute Value  -  Lee Mac
;; Returns the value held by the specified tag within the supplied block, if present.
;; blk - [vla] VLA Block Reference Object
;; tag - [str] Attribute TagString
;; Returns: [str] Attribute value, else nil if tag is not found.
(defun LM:vl-getattributevalue ( blk tag )
    (setq tag (strcase tag))
    (vl-some '(lambda ( att ) (if (= tag (strcase (vla-get-tagstring att))) (vla-get-textstring att))) (vlax-invoke blk 'getattributes))
)
(princ "\nType ATTZBL in command line")(princ)
Вложения
Тип файла: dwg
DWG 2013
testfile.dwg (83.2 Кб, 124 просмотров)
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 02.02.2023 в 14:29. Причина: см пост #19
VVA вне форума  
 
Непрочитано 26.01.2018, 22:43
#12
config


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


Цитата:
Сообщение от VVA Посмотреть сообщение
config, Тестируй
Супер! Все работает как надо! Вопрос снят! Спасибо Вам огромное!

----- добавлено через ~19 мин. -----
Цитата:
Сообщение от VVA Посмотреть сообщение
Прочитал внимательнее, похоже требуется обратная задача
Нет, именно так. Но и второй вариант лиспа (приcвоение высоты блоку из отметки значения атрибута) тоже будет очень кстати. Еще раз огромное Вам спасибо!
config вне форума  
 
Непрочитано 26.01.2018, 23:04
#13
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


config, А мне показалось после второго прочтения, что нужна обратная задача. Короче, обновил #11 - Zblk->значение атрибута и значение атрибута ->Zblk

----- добавлено через ~1 мин. -----
PS Похоже, онлайн общаемся
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 27.01.2018, 00:00
#14
config


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


Цитата:
Сообщение от VVA Посмотреть сообщение
config, А мне показалось после второго прочтения, что нужна обратная задача. Короче, обновил #11 - Zblk->значение атрибута и значение атрибута ->Zblk
Да нет, это я, мягко говоря, не совсем точно изложил проблему. Тема ведь как раз присвоение блоку значения атрибута.
Цитата:
Сообщение от VVA Посмотреть сообщение
PS Похоже, онлайн общаемся
config вне форума  
 
Непрочитано 31.01.2023, 13:17
#15
johny100

автомобильные дороги
 
Регистрация: 27.05.2015
Санкт-Петербург
Сообщений: 10


Ребята, здравствуйте всем! Прошу помощи, встречался ли кто с такой ситуацией, если да, то будьте добрый подсказать ?

Пользуюсь лиспом ATTZBL. Но вот появилась ситуация (уведомление при выполнении команды) "неверный тип аргумента: (or stringp symbolp): nil"

Операцию провожу для блока с некорректной отметкой Z и рядом стоящим атрибутом с отметкой в тексте, но Z у атрибута ровно "0"

https://cloud.mail.ru/public/DC83/62v7wRNVT

В файле "проверка" для понимания ситуации необходимо условным обозначениям в виде блока освещения и столба присвоить отметку Z с текста атрибута.

Автокад 2021

Спасибо!

Последний раз редактировалось johny100, 31.01.2023 в 15:56.
johny100 вне форума  
 
Непрочитано 31.01.2023, 17:39
#16
_A_x_e_l_


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


В файле "проверка" для понимания ситуации необходимо условным обозначениям в виде блока освещения и столба присвоить отметку Z с текста атрибута.

https://cloud.mail.ru/public/61CG/5Krq6EK7h

Добрый день, если вас правильно понял))
Есть блок с атрибутом параметра Z - его можно выставить с помощью лиспа в заданную координату по оси z.
А чтобы присвоить блокам ниже в вашем файле, выделить их и в свойствах в ручную вбить заданные параметры!?
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок.JPG
Просмотров: 33
Размер:	23.7 Кб
ID:	252966  
_A_x_e_l_ вне форума  
 
Непрочитано 31.01.2023, 23:34
#17
johny100

автомобильные дороги
 
Регистрация: 27.05.2015
Санкт-Петербург
Сообщений: 10


Цитата:
Сообщение от _A_x_e_l_ Посмотреть сообщение
А чтобы присвоить блокам ниже в вашем файле, выделить их и в свойствах в ручную вбить заданные параметры!?
Стараюсь монотонную работу в большом количестве избегать или автоматизировать.
johny100 вне форума  
 
Непрочитано 01.02.2023, 17:26
#18
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,031


Цитата:
Сообщение от johny100 Посмотреть сообщение
необходимо условным обозначениям в виде блока освещения и столба присвоить отметку Z с текста атрибута
Альтернативный вариант для блоков с атрибутами - можно обходиться полем в атрибуте. Полем, считывающим Z блока, и отображающим его в атрибуте.
Есть ограничение - поле перестает действовать, если содержание атрибута отредактировано вручную.
Т.е. редактировать нужно прямо и только Z блока.
Тогда после _REGEN атрибут отобразит Z.
Вложения
Тип файла: dwg
DWG 2004
Проверка (1)_2.dwg (387.1 Кб, 12 просмотров)
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 02.02.2023, 14:26
1 | #19
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


johny100,
Тот вариант лиспа, который нашел, не работал только если в набор попадал блок без атрибута. Не было защиты "от дурака"
Добавил проверку на наличие в блоке атрибута. Смотри пост #11
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 02.02.2023, 23:41
#20
johny100

автомобильные дороги
 
Регистрация: 27.05.2015
Санкт-Петербург
Сообщений: 10


Цитата:
Сообщение от VVA Посмотреть сообщение
johny100,
Тот вариант лиспа, который нашел, не работал только если в набор попадал блок без атрибута. Не было защиты "от дурака"
Добавил проверку на наличие в блоке атрибута. Смотри пост #11
Измените, я наверное не так выразился, я что-то подобное находил, а сейчас не могу найти этот лисп. Задача, если рассматривать на примере моего файла "Проверка", то цель изменить отметку Z у обычного блока, а эту самую отметку заимствовать от рядом стоящей точки, атрибута или цифре. Мне казалось, я находил как подобные инструмент, но сейчас не могу вспомнить. Помогите пожалуйста, будьте добры!!!



Спасибо!
johny100 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp. Присвоение блоку атрибута и Z из текста.

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
LISP. Выравнивание текста по двум точкам. Krieger Готовые программы 10 24.12.2011 16:02
как редактировать contents в свойствах текста? как привязать размер текста атрибута к размеру блока? p-sm AutoCAD 3 13.08.2009 18:08
Изменение форматированного текста посредством lisp Tramp LISP 4 03.03.2006 11:28
Lisp для текста Vova LISP 11 13.05.2004 17:39