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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Нумерация и позиционирование (дубль 2)

Нумерация и позиционирование (дубль 2)

Ответ
Поиск в этой теме
Непрочитано 12.12.2007, 16:24
Нумерация и позиционирование (дубль 2)
Supermax
 
Руководитель фирмы
 
Москва
Регистрация: 28.03.2007
Сообщений: 1,831

Мне на ум пришла одна мысль, как связать один элемент с другим в пару. Вот есть у меня динамический блок, а в нем атрибут с номером позиции и атрибут с номером элемента. Есть рядом с блоком значек с текстом внутри. Мне надо, чтобы текст в значке стал таким-же как и в атрибуте.

Я понимаю, что в блок можно вставить и значек с таким номером, и текст с формулой, но пока я о другом, это просто пример. Мне надо, чтобы значение свойства определенного элемента поменялось на определенное, другое значение. К примеру текст в элементе mtext в значке.

Ставим в блок атрибут. В атрибут вставляем формулу, которая указывает на выбранный объект и выбранное свойство в этом объекте. Далее, вставляем туда же еще одну формулу и указываем скажем другой атрибут и его значение. Макрос должен прочтя первое значение найти объект, который надо изменить и свойство, которое надо в нем отредактировать, прочтя второе, найти второй элемент, прочитать что у него записано в значении свойства и изменить свойство первого объекта на такое же.

Сумбурно, непонятно, но в теории осуществимо и изменить длинну линии к примеру по данным в тексте - возможно.
Меняешь в таблице цифры, а в модели после регенерации макросом меняется геометрия. Причем ни таблица, ни сами объекты никак не модернизируются, они остаются обычными, как и всегда. Просто в чертеж вставлен динамический блок (не видимый) в котором прописаны все взаимосвязи.

Можно и текст менять в таблицах, при этом он не будет с формулой, а чистый пречистый.
Более доходчиво идея описана в посте #70

Последний раз редактировалось Supermax, 15.12.2007 в 12:51.
Просмотров: 12169
 
Непрочитано 13.12.2007, 14:07
#21
Кулик Алексей aka kpblc
Moderator

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


Я дунувши слеганца, поэтому на возможную резкость прошу внимания обращать поменьше.
Теперь по делу:
Объект надо каким-то образом идентифицировать. Я с этим делом воевал, когда пытался прописать командный реактор на копирование объектов (по некоторым условиям применение полей там невозможно было в принципе). Последовательность создания копируемых объектов не может быть однозначно предсказана. Поясню на примере:
Ведущий объект имеет ID 1; связующий - 2; ведомый - 3 (беру простейший пример). Создали / посносили еще сотни 2-3 объектов. Копируем эту "тройку", и в результате запросто может получиться, что копия ведущего получит ID 301, связующего - 307, ведомого - 305. Или в любом ином порядке. И все потому, что придется создавать и модифицировать словарные записи, а там не все очевидно и предсказуемо.
На поля можно не кивать, их работа обуславливается отдельным реактором, нарисованным на arx и автоматически подгружаемым AutoCAD'ом.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.12.2007, 14:22
#22
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


"Если абстрагироваться от трудностей технической реализации, то в принципе можно себе представить..." ...как отрезок, сгруппированный с МТекстом, описывающим формулу неизвестно чего, вставляется в пустой чертеж с координатами 0,0,0. На этом проектирование можно закончить.
Profan вне форума  
 
Непрочитано 13.12.2007, 14:22
#23
Дима_

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


Я правильно понял, что по твоему нету 100% способа идентификации объекта?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 13.12.2007, 14:37
#24
Кулик Алексей aka kpblc
Moderator

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


Дима_, это ты кого спрашивал?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.12.2007, 14:48
#25
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Дима_ все правильно понял, кого бы он не спрашивал.
Profan вне форума  
 
Автор темы   Непрочитано 13.12.2007, 15:38
#26
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Еще раз, и еще более разжевано, на гоблинский переведенное.

Мне допустим надо чтобы в выбранном мною динамическом блоке, смещался по встроенному в него направлению определенному параметром distance и Move Action? некий элемент на расстояние равное длинне дуги.

Я использую стандартную функцию приравнивания параметров см. описание в файле

Мне, короче, дали библиотеку, и я в ней нашел подходящую для меня функцию и вставил как в описании у нее написано в mtext. Надавил кнопку "дин. регенерация" и все стало нищак.

Про какую идентификацию вы тут гутарите? Поле связано с объектом и его свойством намертво, что, прочесть на какой объет оно указывает не можете?

Тогда сюда лезьте http://dwg.ru/f/showthread.php?p=187684#post187684

Если при стопервом копировании тетя клава заела, так и вешаться что ли?

Выбераем короче все mtext-ы, из них все с меткой, читаем каждый и все, что после имени функции в переменную загоняем. Запускаем указанную функцию и она, прочев данные из переменной совершает требуемое действие, на которое она запрограммирована и ради которого созданна, а именно меняеят значение свойства одного объекта на значение полученное из свойства другого.
Ничего больше выдумывать не надо. Весь формат на этом и надо ограничить.

Лисп пишется в файле txt с расширением lsp, а здесь лисп пишется в mtext-е с меткой перед скобкой и в качестве аргументов могут быть и формулы и простые выражения.
Вложения
Тип файла: dwg
DWG 2007
Связка дин блока и дуги.dwg (68.3 Кб, 726 просмотров)
Supermax вне форума  
 
Непрочитано 13.12.2007, 15:43
#27
Кулик Алексей aka kpblc
Moderator

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


Блин, я сейчас материться начну. Ты в поле ObjectID поменять поменяешь, но как ты определишь, к какому объекту оно будет относиться? Я ж не зря тут распинался.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.12.2007, 15:53
#28
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Блин, я сейчас заплачу! Нафига мне менять ObjectID? Ты вообще меня не понимаешь что ли? Я по нему до примитива добираюсь, а меняю уже сам примитив лиспом. Любые его свойства. После прочтения формулы мне она уже не нужна. Связана она с каким-то объектом - ну и ладушки. Это аргумент функции, как указатель на объект и его свойство, блин!
Supermax вне форума  
 
Автор темы   Непрочитано 13.12.2007, 15:54
#29
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Скачай DWG! Срочно! и посмотри.
Миниатюры
Нажмите на изображение для увеличения
Название: Связка дин блока и дуги.jpg
Просмотров: 91
Размер:	18.2 Кб
ID:	1506  
Supermax вне форума  
 
Непрочитано 13.12.2007, 16:21
#30
Дима_

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


Поля это просто текст в формате (индетефикатор что это поле, id объекта, имя свойства и формат отображения свойства), Supermax предлагает использовать этот текст для хранения указателя на объект и его свойства + действия которые надо над ним совершить - повторяю вопрос еще раз, но более развернуто - если создан объект, потом совершенна куча операций в том числе и над ним - его id может изменится? Ответ на этот вопрос решает судьбу дальнейшей дискусии.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 13.12.2007, 16:23
#31
Кулик Алексей aka kpblc
Moderator

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


Твою дивизию... Не, ну ты что, собираешься эту связь в каждом файле, что ли, настраивать? С нуля, так? На фига оно такое надо-то?
А сильно хочется поизвращаться - ну добавь в объект ldata по типу того, что я на абоке показывал, потом читай и выполняй. Функция (eval) тебе поможет.
Еще раз подчеркиваю - смысла в этой затее лично я не вижу никакого.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.12.2007, 16:28
#32
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Я посмотрел id дуги, сохранил его, вышел в пространство модели, потянул ручку у дуги, то есть ее увеличил, регенерировал модель, изменились при этом показания в полях, вошел опять в редактирование поля и посмотрел id ObjId 2130318984 - первый раз
ObjId 2130318984 - второй раз.

И третий и четвертый и десятый. не меняется. А вот после перезагрузки файла - другое значение, как в именах.
Supermax вне форума  
 
Автор темы   Непрочитано 13.12.2007, 16:40
#33
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Kpblc, это способ связать в данном файле параметры нескольких элементов в нужном алгоритме не делая при этом специально для этого файла программ.

Ведь не только о взаимосвязи длин идет речь. Можно вычерчивать программно элементы опираясь на данные таблицы, свойства других элементов, менять динамические свойства дин. блоков в зависимости от текстовых данных, параметров других дин блоков.

Я долго ломал голову как сместить болт, если у него шайбу другой толщины поставить. Вот самое оно как раз для этого. Берешь в болте делаешь move и управляешь им параметром толшина из шайбы. И связующий mtext можно прямо в болт, в атрибут вставить. Правда VVA там что-то про облом в этом плане изрекал, но разберемся.

Надо пользователю связать несколько параметров, если написали для этого функцию - пожалуйста. И не надо на каждую функцию кнопку делать и прыгать по файлу как кузнечек. Одна единственная кнопка, которая запускает эти функции, читая их из mtext-a.
Supermax вне форума  
 
Автор темы   Непрочитано 13.12.2007, 16:50
#34
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Да даже если бы id менялся, ничего страшного бы не было. Когда идет обработка - читается сначала формула (поле), затем по полученному id находится объект, видоизменяется и все. Повторное действо опять прочтетет id и если он уже другой, то оно найдет объет все равно, потому что это его id. Если бы я потянул ручку у дуги и id поменялся только в объекте, то формула бы перестала работать. Говорю, что они связаны на низком пренизком уровне, а id выбрасывают для наглядной агитации.
Supermax вне форума  
 
Непрочитано 13.12.2007, 16:50
#35
Дима_

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


2 Supermax по твоему получается на каждую шайбу надо свое поле заводить - гемор, проще блок болта с шайбой создать - потом его поменял и все вхождения "подпрыгнули", так что либо твой пример не удачный, либо мы о разном говорим.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 13.12.2007, 16:51
#36
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Supermax Посмотреть сообщение
Я посмотрел id дуги, сохранил его, вышел в пространство модели, потянул ручку у дуги, то есть ее увеличил, регенерировал модель, изменились при этом показания в полях, вошел опять в редактирование поля и посмотрел id ObjId 2130318984 - первый раз
ObjId 2130318984 - второй раз.

И третий и четвертый и десятый. не меняется. А вот после перезагрузки файла - другое значение, как в именах.
А ты скопируй дугу рядышком. И попробуй посмотреть ее ID (имею в виду новой).
Все, что ты пытаешься сделать, ИМХО давно придумано и реализовано. Просто для этого надо брать не AutoCAD, а либо вертикальное решение на его основе (ADT | AA / MDT / ABS | MEP), либо вообще "уходить" в другие системы типа Revit, Inventor, SoliWorks, ProE, PTModeler etc.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.12.2007, 17:00
#37
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Цитата:
2 Supermax по твоему получается на каждую шайбу надо свое поле заводить - гемор, проще блок болта с шайбой создать - потом его поменял и все вхождения "подпрыгнули", так что либо твой пример не удачный, либо мы о разном говорим.
Пример как пример, Болт - отдельный блок, динамический между прочим. Шайба - другой блок - тоже динамический. Нельзя их одним блоком делать не посчитаешь тогда. А шайбу можно и не под головку подкладывать, а под основание прикручиваемого объекта. Его что тоже в блок толкать? Есть такие регулировочные шайбы и прокладки.

И не внимательно читаешь мои посты. #20
Цитата:
Я еще раз для не внимательных напишу: Возьмите тройку ведомый объект, связующий объект и ведущий объект и скопируйте в сторонку сразу все, и вы увидите, что в новой тройке сохранилась взаимосвязь.
Приклеил mtext внутрь блока с болтом и шайбой и копируй эту тройку хоть в другой файл через буфер. Связь не рвется.

Реализация этого идиотизма настолько проста, что я и сам сделаю (когда-нибудь). Как сделаю - посмотрим насколько востребована.

Последний раз редактировалось Supermax, 13.12.2007 в 17:07.
Supermax вне форума  
 
Автор темы   Непрочитано 13.12.2007, 17:03
#38
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Kpblc, Если я скопирую только одну дугу, то и будет у меня одна дуга. какой в ней id уже не имеет значения. А вот если я дугу выделю и формулу, к ней привязанную, то скопировав, сразу пару, в этом новом поле будет id новой дуги. И ясно, что это будет уже не то id, что у дуги прототипа.
Supermax вне форума  
 
Автор темы   Непрочитано 13.12.2007, 17:10
#39
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Меня больше всего бесит, что никто до сих пор не скачал связку дин. блока и дуги, а в полемику лезят!
Вы файло-то скачайте сначала, пост #26, покопируйте сами и убедитесь, а мне нервы портить не надо
Supermax вне форума  
 
Непрочитано 13.12.2007, 17:39
#40
Кулик Алексей aka kpblc
Moderator

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


Усложняем эксперимент. Сделай следующее: рисуется 2 отрезка, дуга (которую ты хочешь связать). Еще дуга, 3 отрезка и 2 полилинии. Поле на вторую дугу. _.copy, выделить один из отрезков, которые были отрисованы до дуги, дуга "простая", дуга "связанная", 2 отрезка "после", поле и 1 полилиния. Выделение выполнять именно в таком порядке.
Копирование выполнять 2 раза, внутри одной команды. Определи (лиспом) ID своих новых скопированных "связанных" объектов. Определение выполнять программно.
Говорю сразу - лично мне не удалось это сделать.
Для того, чтобы исключить всякие возможные толкования, код:
Код:
[Выделить все]
(defun test (/ selset ent_lst link)
  (vl-load-com)
  (setq selset  (ssadd)
        ent_lst (list
                  (entmakex
                    '((0 . "LINE")
                      (10 101.035 70.5952 0.0)
                      (11 211.885 146.384 0.0)
                      )
                    ) ;_ end of entmakex
                  (entmakex
                    '((0 . "LINE")
                      (10 142.604 66.3633 0.0)
                      (11 186.482 149.847 0.0)
                      )
                    ) ;_ end of entmakex
                  (setq link (entmakex '((0 . "ARC")
                                         (62 . 1)
                                         (10 251.4 91.4222 0.0)
                                         (40 . 54.3108)
                                         (50 . 1.16783)
                                         (51 . 3.39313)
                                         )
                                       ) ;_ end of entmakex
                        ) ;_ end of setq
                  (entmakex '((0 . "ARC")
                              (10 278.801 95.224 0.0)
                              (40 . 34.2187)
                              (50 . 2.71279)
                              (51 . 5.89073)
                              )
                            ) ;_ end of entmakex
                  (entmakex
                    '((0 . "LINE") (10 209.19 39.818 0.0) (11 223.817 63.6703 0.0))
                    ) ;_ end of entmakex
                  (entmakex
                    '((0 . "LINE")
                      (10 223.817 63.6703 0.0)
                      (11 219.583 10.9644 0.0)
                      )
                    ) ;_ end of entmakex
                  (entmakex
                    '((0 . "LINE")
                      (10 219.583 10.9644 0.0)
                      (11 258.072 47.5123 0.0)
                      )
                    ) ;_ end of entmakex
                  (entmakex '((0 . "LWPOLYLINE")
                              (100 . "AcDbEntity")
                              (100 . "AcDbPolyline")
                              (90 . 4)
                              (70 . 0)
                              (43 . 0.0)
                              (38 . 0.0)
                              (39 . 0.0)
                              (10 315.037 120.223)
                              (40 . 0.0)
                              (41 . 0.0)
                              (42 . 0.0)
                              (10 275.777 167.928)
                              (40 . 0.0)
                              (41 . 0.0)
                              (42 . -2.02737)
                              (10 343.134 170.236)
                              (40 . 0.0)
                              (41 . 0.0)
                              (42 . 1.04112)
                              (10 376.62 148.308)
                              (40 . 0.0)
                              (41 . 0.0)
                              (42 . -125.769)
                              )
                            ) ;_ end of entmakex
                  (entmakex '((0 . "LWPOLYLINE")
                              (100 . "AcDbEntity")
                              (100 . "AcDbPolyline")
                              (90 . 4)
                              (70 . 0)
                              (43 . 0.0)
                              (38 . 0.0)
                              (39 . 0.0)
                              (10 368.537 104.835)
                              (40 . 0.0)
                              (41 . 0.0)
                              (42 . 0.0)
                              (10 336.206 59.8232)
                              (40 . 0.0)
                              (41 . 0.0)
                              (42 . 1.46786)
                              (10 390.861 45.9734)
                              (40 . 0.0)
                              (41 . 0.0)
                              (42 . -0.420071)
                              (10 421.268 84.4449)
                              (40 . 0.0)
                              (41 . 0.0)
                              (42 . -4.72622)
                              )
                            ) ;_ end of entmakex
                  ) ;_ end of list
        ent_lst (append
                  ent_lst
                  (list (vlax-vla-object->ename
                          (vla-addmtext
                            (vla-objectidtoobject
                              (vla-get-activedocument (vlax-get-acad-object))
                              (vla-get-ownerid (vlax-ename->vla-object (entlast)))
                              ) ;_ end of vla-ObjectIDToObject
                            (vlax-3d-point '(266.925 88.2921 0.0))
                            0.
                            (strcat
                              "%<\\AcObjProp Object(%<\\_ObjId "
                              (vl-princ-to-string
                                (vla-get-objectid
                                  (vlax-ename->vla-object
                                    (cadr (vl-remove-if-not
                                            '(lambda (x)
                                               (= (cdr (assoc 0 (entget x))) "ARC")
                                               ) ;_ end of lambda
                                            ent_lst
                                            ) ;_ end of vl-remove-if-not
                                          ) ;_ end of cadr
                                    ) ;_ end of vlax-ename->vla-object
                                  ) ;_ end of vla-get-objectid
                                ) ;_ end of vl-princ-to-string
                              ">%).ArcLength>%"
                              ) ;_ end of strcat
                            ) ;_ end of vla-addmtext
                          ) ;_ end of vlax-vla-object->ename
                        ) ;_ end of list
                  ) ;_ end of append
        ) ;_ end of setq
  (foreach item '(0 3 2 4 6 9 7)
    (setq selset (ssadd (nth item ent_lst) selset))
    ) ;_ end of foreach
  (sssetfirst selset selset)
  (command "_.copy" selset "" "" "_m" pause pause pause "")
  ) ;_ end of defun
Как говорится, (test).
P.S. Я специально скачал файлик, хотя и знал, что ничего принципиально нового там не увижу. Я тебе еще раз говорю: связб можно осуществлять между объектами либо по ObjectID (внутри одной сессии файла), либо по хендлам объектов (внутри одного файла). Даже если будет сделана эта функция на одно вхождение твоей формулы, она не будет работать на второе / третье / четвертое без капитальнейшего ломания мозгов.
Dixi.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 13.12.2007 в 17:45.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Нумерация и позиционирование (дубль 2)

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сквозная нумерация чертежей Alxd Прочее. Архитектура и строительство 26 19.06.2024 09:01
Нумерация в МТекст Bull AutoCAD 36 01.12.2022 14:24
Нумерация листов в AutoCad Sergk AutoCAD 21 11.03.2022 05:21
Автоматическая нумерация текстов dorofei Программирование 8 18.01.2007 09:31
Нумерация страниц в файлах Димас AutoCAD 1 22.12.2005 10:31