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

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

Как получить координату атрибута и VLisp?

Ответ
Поиск в этой теме
Непрочитано 19.02.2024, 08:58 #1
Как получить координату атрибута и VLisp?
prajdziswet
 
Регистрация: 30.03.2015
Сообщений: 153

1) Начну с простотого -торможу по страшному (даж стыдно спрашивать), давно не работал в редакторе Visual Lisp: после изменения лиспа выскакивает сообщение "тект был изменен" - скидвал трасировку, нажимал кнопку сохранить файл(лисп), проверял лисп, но с новыми измами нехочет (и не помню как давно делал, вроде сохранение помогало, но не хочет)... Как применить измы?
2) есть блок с атрибутами,
получаю список:
Код:
[Выделить все]
   (setq atts (vlax-safearray->list 
                       (vlax-variant-value
                         (vla-getattributes din_bl)
                       )))
(foreach tag atts
()
)
Как получить координату, позицию атрибута? (наверное тож оч. просто, можно конечно через обратное преобразование vla-об'екта и entget, а как через актив х)

Последний раз редактировалось prajdziswet, 19.02.2024 в 09:14.
Просмотров: 1308
 
Непрочитано 19.02.2024, 09:59
1 | #2
Кулик Алексей aka kpblc
Moderator

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


Если меняешь текст кода, останавливай выполнение.
А так - ну попробуй отдампить объект. Увидишь там что-то типа InsertionPoint / TextAlignmentPoint - вот и точка вставки. Сейчас нет под рукой запущенного ACAD'a, так что подробнее не подскажу (
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.02.2024, 10:21
#3
prajdziswet


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Если меняешь текст кода, останавливай выполнение.
А так - ну попробуй отдампить объект. Увидишь там что-то типа InsertionPoint / TextAlignmentPoint - вот и точка вставки. Сейчас нет под рукой запущенного ACAD'a, так что подробнее не подскажу (
1) при замене я останавливал код (точнее прерываю красная кнопка), потом изменяю, нажимаю сохранить, загружаю - и пишет "текст изменен" (возможно, что в функции,хотя какая разница// и все думаю, что не так? автокад 2020 -хотя не думаю что в автокаде дело, а может что вла-объекты = так вроде тож не должно...)
И не могу понять в чем дело, а атокад перезапускать не вариант ==все должно быть логично условно просто, а как то он при изме ругается (и все думаю, чтото я слишком торможу, давно (как работал менял) "условно на лету"...
2) да дамп-я смотрел, есть TextAlignmentPoint, все хорошо. Но просто интересует нет что то типа аля "vla-get-point" (расширяю познания)? вроде атрибут, полюбому есть точка вставки или свойства (да и есть в entget и в дампе объекта)=> понятное дело если надо просто точка, то и через обратное (типа entget получить или дамп, просто пытаюсь понять работу через активХ: теоретически почти любой объект имеет точку вставки, базовую точку, точку расположение ==т.е условно базовое свойства объекта)

п.с по 1: есть код не функции просто запуск функции и сама функция, причем самый первый раз на точке останова не останавливает (внутри функции) гружу кнопкой два раза, а потом при изме начинает ругатся..."текст изменен" (и выделяет саму функцию и обрабатывает старое)

Последний раз редактировалось prajdziswet, 19.02.2024 в 10:42.
prajdziswet вне форума  
 
Непрочитано 19.02.2024, 12:07
#4
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от prajdziswet Посмотреть сообщение
при замене я останавливал код (точнее прерываю красная кнопка), потом изменяю, нажимаю сохранить, загружаю - и пишет "текст изменен"
Возможно, у тебя там самовызываемый код. Проверяй весь файл.

Цитата:
Сообщение от prajdziswet Посмотреть сообщение
почти любой объект имеет точку вставки, базовую точку, точку расположение ==т.е условно базовое свойства объекта)
Щщас! Если у атрибута/текста/многострочного текста установлено выравнивание, у такого объекта будет 2 очень интересные точки: https://autolisp.ru/2010/04/06/text-...trib-entities/
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.02.2024, 12:15
#5
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


А если ещё и про "постоянные" атрибуты вспомнить, так за ними
вообще в таблицу блоков лезть придётся...
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 19.02.2024, 12:23
#6
Кулик Алексей aka kpblc
Moderator

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


На фига? vla-getconstantattributes в зубы и вперед
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.02.2024, 12:30
#7
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Может быть.
Я с атрибутами разбирался, когда ещё волшебной (vl-load-com) не существовало. :-)
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Автор темы   Непрочитано 21.02.2024, 07:53
#8
prajdziswet


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


А как можно глянуть (проверить), что атрибут находится в состоянии видимости блока?
- ато мне независимо от состояния, возращает все атрибуты...

п.с а насчет того "1", что "изменился текст" - самовызывающего кода небыло, точнее у меня был в атозагрузке такая же функция+функция была определена после вызова = поэтому он конфликтовал

Последний раз редактировалось prajdziswet, 21.02.2024 в 08:01.
prajdziswet вне форума  
 
Непрочитано 21.02.2024, 08:01
#9
Кулик Алексей aka kpblc
Moderator

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


Попробуй проверять его видимость (vla-get-visibility вроде бы)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 21.02.2024, 08:10
#10
prajdziswet


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Попробуй проверять его видимость (vla-get-visibility вроде бы)
наверное другая функция, такой функции нет. в полещуке с visibility, находит все но не то (картинки, сетки)// в лиспе не определяет функцию, может какая твоя (написанная)?
п.с в дампе visibility не менялось (от состояния видимости блока, а в дампе -ничего не меняется, кроме имени vla-об'екта)

----- добавлено через ~7 мин. -----
vla-get-Invisible блин не то

----- добавлено через 34 сек. -----
vla-get-Invisible в обоих случаях вернуло фэлс =((( непонятно

Последний раз редактировалось prajdziswet, 21.02.2024 в 08:18.
prajdziswet вне форума  
 
Автор темы   Непрочитано 21.02.2024, 08:24
#11
prajdziswet


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


Нажмите на изображение для увеличения
Название: Контрольное значение _240214104833.jpeg
Просмотров: 12
Размер:	43.1 Кб
ID:	261735 -это vla-get-Invisible =((
prajdziswet вне форума  
 
Непрочитано 21.02.2024, 08:39
#12
Кулик Алексей aka kpblc
Moderator

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


Скинь пример блока - попробую поковырять. Ну и тэг атрибута тож
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 21.02.2024, 16:45
#13
prajdziswet


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Скинь пример блока - попробую поковырять. Ну и тэг атрибута тож
pan.zip тэг "ФАЗАПОД" (вроде, не запускал счас лисп, посмотрел в блоке => впринципе там почти любой атрибут,кроме шифра и лист скрывается в малом штампе - там рамка чертежа)
вопрос, допустим атрибут и я хочу определить виден или нет?
а это состояние видимости:

Нажмите на изображение для увеличения
Название: Контрольное значение _240214104833.jpeg
Просмотров: 10
Размер:	195.9 Кб
ID:	261755

и простейший код tmp11111.lsp

Последний раз редактировалось prajdziswet, 21.02.2024 в 20:15.
prajdziswet вне форума  
 
Непрочитано 22.02.2024, 00:27
1 | #14
Кулик Алексей aka kpblc
Moderator

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


Чего получилось по-быстрому. Пример вызова - в комментарии.
Код:
[Выделить все]
 
(vl-load-com)

(defun get-attr-data (ent tag / res)
          ; (get-attr-data (car (entsel)) "фазапод")

  (defun _kpblc-conv-vla-to-list (value / res)
    (cond ((listp value) (mapcar (function _kpblc-conv-vla-to-list) value))
          ((= (type value) 'variant) (_kpblc-conv-vla-to-list (vlax-variant-value value)))
          ((= (type value) 'safearray)
           (if (>= (vlax-safearray-get-u-bound value 1) 0)
             (_kpblc-conv-vla-to-list (vlax-safearray->list value))
           )
          )
          ((and (= (type value) 'vla-object)
                (vlax-property-available-p value'count)
           )
           (vlax-for sub value
             (setq res (cons sub res))
           )
          )
          (t value)
    )
  )

  (if (= (type ent) 'ename)
    (setq ent (vlax-ename->vla-object ent))
  )
  (if (= (type ent) 'vla-object)
    (progn
      (setq res (car (vl-remove-if-not
                       (function
                         (lambda (x)
                           (= (strcase (vla-get-tagstring x)) tag)
                         )
                       )
                       (apply
                         (function append)
                         (mapcar
                           (function
                             (lambda (x) (_kpblc-conv-vla-to-list (vlax-invoke-method ent x)))
                           )
                           '("GetConstantAttributes" "GetAttributes")
                         )
                       )
                     )
                )
            res (list (cons "attref" res)
                      (cons "visible" (vla-get-visible res))
                )
      )
    )
  )
  res
)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 22.02.2024 в 07:47.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.02.2024, 08:10
#15
prajdziswet


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Чего получилось по-быстрому. Пример вызова - в комментарии.
спасибо, но пока не разбирался - код выдает ошибку:
Нажмите на изображение для увеличения
Название: Контрольное значение _240214104833.jpeg
Просмотров: 4
Размер:	56.4 Кб
ID:	261762
сначала небыло функции - догрузил с твоей библиотеки,
потом - неверный тип аргумента...
//нагрузили на работе (пока не до этого) => освобожусь, попробую посмотреть где ошибка... (у тебя почти везде проверки, но сходу код не пошел =( //выдает ошибку ) --наверное как в предыдущем примере (когда effective-name выбивал нил и тут наверное, что-то типа такого..)

п.с проверял на том файле (двг), что скидвал

Последний раз редактировалось prajdziswet, 22.02.2024 в 08:15.
prajdziswet вне форума  
 
Непрочитано 22.02.2024, 08:22
#16
Кулик Алексей aka kpblc
Moderator

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


Я недавно подправил код, теперь все должно работать нормально. У меня выдавал список из 2 точечных пар ("attref" . <vla-указатель на атрибут>) и ("visible" . <Видимость атрибута -:vlax-true или :vlax-false>)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.02.2024, 10:12
#17
prajdziswet


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
aka kpblc Я недавно подправил код, теперь все должно работать нормально. У меня выдавал список из 2 точечных пар ("attref" . <vla-указатель на атрибут>) и ("visible" . <Видимость атрибута -:vlax-true или :vlax-false>)

Огромное СПАСИБО
prajdziswet вне форума  
 
Автор темы   Непрочитано 22.02.2024, 20:01
#18
prajdziswet


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


Алексей твой код все равно не работает...

Цитата:
Сообщение от prajdziswet Посмотреть сообщение
наверное другая функция
vla-get-visible. Изначально ты правильно говорил, только не vla-get-visibility, а "vla-get-visible" (и я не то искал и не нашел) => у тебя в коде подсмотрел - вставил в свой код и он заработал (СПАСИБО большое).

п.с а твой код почему то не работает, почемуто res возращает nil....
п.с2 и похорошему мне она и надо было vla-get-visible
prajdziswet вне форума  
 
Непрочитано 22.02.2024, 20:52
#19
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,169


Цитата:
Сообщение от prajdziswet Посмотреть сообщение
атрибут находится в состоянии видимости блока?.... vla-get-visible
Позанудствую ...
Видимость атрибута, которая регулируется свойством visible, можно переключать и в статическом блоке. К состоянию видимости блока (которое регулирует видимость любых примитивов, относящихся к немуг) это свойство отношения не имеет.

Работать с состояниями видимости блока через лисп - тот еще квест... С ней и штатными средствми чокнуться можно...
kp+ вне форума  
 
Автор темы   Непрочитано 23.02.2024, 07:46
#20
prajdziswet


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


Цитата:
Сообщение от kp+ Посмотреть сообщение
Позанудствую ...
Видимость атрибута, которая регулируется свойством visible, можно переключать и в статическом блоке. К состоянию видимости блока (которое регулирует видимость любых примитивов, относящихся к немуг) это свойство отношения не имеет.

Работать с состояниями видимости блока через лисп - тот еще квест... С ней и штатными средствми чокнуться можно...
Незнаю, что оно "регулирует -нерегулирует" - но работает на динамическом блоке (в моем случае сработало), а вот invisible - только фэлс
п.с на какомто форуме встречал что 70 или 60 свойства dxf, тож возращает видимость (но не проверял)

Последний раз редактировалось prajdziswet, 23.02.2024 в 13:53.
prajdziswet вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как получить координату атрибута и VLisp?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить цифровую модель комнаты из dwg gizmo_zx Программирование 12 30.11.2019 14:32
Чем лучше получить значение из текста и вставить его в Z координату точки Rozman Программирование 12 09.11.2017 23:34
Как получить конечные точки занимаемой области? prajdziswet LISP 3 08.02.2017 12:19
ACAD Map 3D: получить координату Z из атрибутов. Petr_Tver Вертикальные решения на базе AutoCAD 1 28.11.2009 22:31
Быстро получить Набор объектов попадающих в Сферу [N.S] Программирование 10 09.08.2009 11:04