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

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

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

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

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

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

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

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

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

Последний раз редактировалось Supermax, 15.12.2007 в 12:51.
Просмотров: 12235
 
Непрочитано 12.12.2007, 16:45
#2
Дима_

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


А не проще вообще никаких блоков не делать, а просто макрос который свойства меняет в соответсвии с текстом таблицы? Или я опять невьезжаю?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 12.12.2007, 16:49
#3
Supermax

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


Вот к примеру две линии и Mtext, который их связывает.

В первой формуле есть указатель на объект №1, а во второй - указатель на объект №2. Если договориться, что первая формула - ведущая, а вторая - ведомая, то прочтя макросом первую формулу, мы и объект найдем и свойство прочтем, затем прочтя вторую формулу - мы ведомый объект найдем, его свойство и приведем в соответствие длинну второй линии с первой.
Вложения
Тип файла: dwg
DWG 2004
Связанные линии.dwg (34.8 Кб, 666 просмотров)
Supermax вне форума  
 
Автор темы   Непрочитано 12.12.2007, 16:53
#4
Supermax

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


Проблема в том, что для каждого чертежа программу не напишешь. Взаимосвязи надо указать - это пожалуйста, алгоритм один и тот же как и для других чертежей. Макрос стандартный. Метить надо как-то такие связующие вещи, вот дин блок - идеальная для этого вещь. Можно и простым mtext-om пользоваться, только в начале надо значек условный ставить, чтобы такие штуки находились автоматом.
Есть что обсудить, короче.
Supermax вне форума  
 
Непрочитано 12.12.2007, 16:59
#5
Дима_

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


А - идею понял, ну тогда наверно правильней создать таблицу - две колонки в левой свойства, правая значения и два лиспика - импорт + экспорт, идея хорошая надо Крыса вызывать - что скажет?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 12.12.2007, 17:03
#6
Supermax

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


Таким макаром весь чертеж можно сделать динамическим и никакие дин. блоки просто не сравнятся по мощи инструментария.
Supermax вне форума  
 
Автор темы   Непрочитано 12.12.2007, 17:05
#7
Supermax

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


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

Добавлю:

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

Последний раз редактировалось Supermax, 12.12.2007 в 17:24.
Supermax вне форума  
 
Непрочитано 12.12.2007, 17:27
#8
Кулик Алексей aka kpblc
Moderator

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


А чего меня звать, я и так гляжу за темой
У меня сразу вопрос: вот, допустим, связали отрезки. Надо увеличить их длину. Какая вершина (или точка отрезка) остается "на месте"? Кто и как это определяет?
ИМХО - бесполезная затея. Это же фактически просто дин.блок получится. Ну да, большой. Ну да, с неочевидными моментами. Но смысл?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.12.2007, 17:31
#9
Дима_

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


Но опять-же в 3d ничерта так не сделать, да и не только в 3д - области полилинии только если их целиком передвинуть остальные поля типа площадь - read only!
p.s. Пока писал предыдущий пост появился - удобно в тех. случаях когда надо параметрически чего- нибудь большое задать, а в дин. блоках для этого 51 ручку потянуть надо, а здесь вбил и готово.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 12.12.2007, 18:15
#10
Supermax

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


Я думал, что это я размахнулся, а это оказывается вы размахнулись, что я со своим размахом совсем потерялся.

Есть очень много мест, в которых меняя одно значение на другое все корректно происходит. Меняя например значение свойства Distance - мы изменяем длинну в дин блоках конкретно в нужную сторону. Текстом можно манипулировать, Если известно, как площадь или объем должен изменяться, то по изменению текста, обозначающего площадь, можно перемещать заранее обусловленные вещи на вычисленную длинну.

В формуле можно написать столько всякой фигни, что и полилинию можно перестраивать и длины отрезкам менять с заданной точки и все, что угодно. Надо только условиться, что есть что и все. Кто макрос пишет, тот и диктует правила.

В обществе людей с вывихнутыми на программировании мозгами это называется формат записи.

Вот его давайте и обсудим. Бо перспектива дюже заманчивая.
Supermax вне форума  
 
Автор темы   Непрочитано 12.12.2007, 21:57
#11
Supermax

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


Возьмем за основу простой Mtext.
Как макросу отличить этот объект от простых mtext-ов?
Предлагаю в Hyperlink писать "Объект_связи"

Выбираем все Mtext-ы с Хуперлинком "Объект_связи"

Другой вариант - в начале строки текста писать ник создателя макроса. а перед ним знак доллара, на счастье.

Далее, как в лиспе следует имя функции, то есть некий термин, предполагающий совершение конкретных действий. Можно имя функции написанной на лиспе. Точно! Именно так и надо.

Далее аргументы для этой функции в виде чего угодно включая формулы с указанием на свойства конкретных объектов. Какая функция, такие ей и аргументы.

Например: $Kpblc text->distance_line (формула с указанием на объект Text или Mtext и его свойство Contents) ( формула с указанием на объект и свойство Start или End)

Cвойства Start и End содержат X, Y и Z координаты начала и конца линии. Если указан старт, то его функция пересчитывает на новое значение, взятое как производное от значения длинны из Contents текста и меняет старт, а если энд, то энд меняет.

Вот так, метка, имя функции из библиотеки и аргументы этой функции в виде данных и/или указателей на объекты.

Надо еще помнить, что в формулах можно считать, однако.
Вложения
Тип файла: dwg
DWG 2007
Связанные текст и линия.dwg (65.8 Кб, 637 просмотров)

Последний раз редактировалось Supermax, 12.12.2007 в 22:08.
Supermax вне форума  
 
Непрочитано 12.12.2007, 22:06
#12
Дима_

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


Ты прав - в формате и есть вся проблема - я считаю вначале надо задачу поставить и цель - для чего этот код (формат) предназначен, а то, так до DFX дойдем - штука конечно хорошая, но все же хочется на более земном уровне автоматизацию получить. Главное по моему предусмотреть зависимость одного параметра от другого (то есть x=5, y=2*x-14), а потом результаты примитивам присваивать, скорее даже не примитивам присваивать, а действиям которые их создают (с предварительным удалением старых) - дабы можно было и в 3d залезть.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 12.12.2007, 22:17
#13
Supermax

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


В данном контексте (тот формат, что я предложил, по аналогии с форматом лиспа) все зависит от функции, которая и определяет состав дальнейшей записи. Надо ей три аргумента - пожалуйста, надо четыре - пожалуйста, надо просто коэффициент умноженный на данные свойства и т.п. - пожалуйста. 3D говоришь - да нет проблем. Кстати совершенно не обязательно указывать формулой именно доступные свойства, достаточно просто указатель на объект. А дальше написать название свойства к примеру.
Можно в скобках после метки писать функции и ее аргументы, так можно и несколько функций применять в одном указателе. Такой супер лисп забацать.
Вложения
Тип файла: dwg
DWG 2007
Связанные текст и линия.dwg (66.1 Кб, 634 просмотров)
Supermax вне форума  
 
Автор темы   Непрочитано 12.12.2007, 22:24
#14
Supermax

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


Можно и действия совершать. Создавать требуемые объекты в требуемом месте опираясь на значения свойств других объектов.

Ой, че-то я такое придумал, аж самому страшно стало
Supermax вне форума  
 
Непрочитано 12.12.2007, 22:30
#15
Profan


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


Действия надо совершать с оглядкой.
Profan вне форума  
 
Автор темы   Непрочитано 12.12.2007, 22:36
#16
Supermax

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


Последний аккорд на сегодня.

Надо макрос - регенератор, который всеголишь ищет по метке Mtext-ы указатели и запускает из библиотеки указанные в них функции, передавая им их аргументы из текста самого указателя.

Ну а функции, оперирующие с созданием, или модификацией существующих примитивов - можно писать до бесконечности и все они лягут в отдельную библиотеку для пользователей.
Supermax вне форума  
 
Непрочитано 12.12.2007, 23:17
#17
Дима_

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


Не мне кажеться здесь немножко другая задача, для каждой "детали" параметрический лисп писать это одно (про что я ксати много раз говорил в замену 3д дин. блоков) - идея хорошая, но в данном случае хочется сделать автоматизацию для пользователя (которую может юзер без лиспа создать), а лисп программы и без таблиц сами по себе неплохо работают.
P.S. Ну так в итоге формат будем придумывать или в сторону лисп, функций беседу продолжим.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 13.12.2007, 11:17
#18
VVA

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


Где-то близко к этой теме
http://www.sapracad.h.com.ua/
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 13.12.2007, 12:14
#19
Кулик Алексей aka kpblc
Moderator

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


Связь с примитивами можно осуществлять только по хендлам этих примитивов (ObjectID может меняться, по-моему). Соответственно необходим загруженный и быстро работающий код, который и будет выполнять, во-первых, "связку", а, во-вторых, определять реакции связанных примитивов.
Ну народ, ну сами-то подумайте об удобстве пользования! Ведь невозможно же будет! Сначала указать на "родителя" изменения, потом на того, кого надо будет менять, потом выбрать свойство изменяемого, потом отследить возможную некорректность ввода... Застрелиться!
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.12.2007, 13:45
#20
Supermax

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


Kpblc, формула всегда зацеплена за объект не зависимо поменялся ObjectID или нет. Если он изменился у примитива, то автоматом меняется и в формуле.

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

Я еще раз для не внимательных напишу: Возьмите тройку ведомый объект, связующий объект и ведущий объект и скопируйте в сторонку сразу все, и вы увидите, что в новой тройке сохранилась взаимосвязь. О чем это говорит? О том, что формулы это не просто записи с указанием которые по ObjectID меняют свойства другого элемента. Скорее ObjectID просто демонстрация ориентации этой связи, а сама сцепка сделана намного глубже, иначе, как тогда такое могло бы происходить? В новой тройке новые ObjectID. Как и кто их туда вставил?

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

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

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

Про возможность не корректного ввода - надо защищаться до определенного здравого смысла. Если пользователь ткнул не в тот элемент и указал не те свойства, то и гори его компьютер ярким пламенем!
Если от случайного или не корректного ввода может вылететь фатал егор, то надо думать, а если просто модель покорежит, так откатом исправят.

Никакие загруженные и быстоработающие коды не нужны. Это не динамический блок, а программно регенерируемая модель.

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

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

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

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


Я дунувши слеганца, поэтому на возможную резкость прошу внимания обращать поменьше.
Теперь по делу:
Объект надо каким-то образом идентифицировать. Я с этим делом воевал, когда пытался прописать командный реактор на копирование объектов (по некоторым условиям применение полей там невозможно было в принципе). Последовательность создания копируемых объектов не может быть однозначно предсказана. Поясню на примере:
Ведущий объект имеет 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,626


"Если абстрагироваться от трудностей технической реализации, то в принципе можно себе представить..." ...как отрезок, сгруппированный с МТекстом, описывающим формулу неизвестно чего, вставляется в пустой чертеж с координатами 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,450


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


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


Дима_ все правильно понял, кого бы он не спрашивал.
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,450


Блин, я сейчас материться начну. Ты в поле 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,450


Твою дивизию... Не, ну ты что, собираешься эту связь в каждом файле, что ли, настраивать? С нуля, так? На фига оно такое надо-то?
А сильно хочется поизвращаться - ну добавь в объект 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,450


Цитата:
Сообщение от 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,450


Усложняем эксперимент. Сделай следующее: рисуется 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 вне форума  
 
Автор темы   Непрочитано 13.12.2007, 18:00
#41
Supermax

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


А ты после копирования регенерацию делал? (command "_regenall")

Последний раз редактировалось Supermax, 13.12.2007 в 18:21.
Supermax вне форума  
 
Автор темы   Непрочитано 13.12.2007, 18:15
#42
Supermax

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


Даже не вникая в детали, я тупо включаю ручку по очереди в каждом mtext-e и запускаю функцию VVA
(C:FLDVIZ) из поста #7 темы http://dwg.ru/f/showthread.php?p=187684#post187684
Котрая включает ручку у связанного с полем объекта.
А после этого я могу да хоть на луну. Это, что касается id, который я даже и не видел.

Правда у VVA надо строчку (setq txt (car(nentsel "\nУкажите объект с полем")))
поменять. типа (setq txt txt-i) Поскольку я в переменную txt буду сразу имя кидать и ручки включать тогда mtext-ам не надо. А переменную txt-i я уж сделаю.

Последний раз редактировалось Supermax, 13.12.2007 в 18:31.
Supermax вне форума  
 
Автор темы   Непрочитано 13.12.2007, 18:32
#43
Supermax

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


Все это конечно через одно место, это просто, чтобы не осталось сомнения по поводу доступа к элементам
Supermax вне форума  
 
Автор темы   Непрочитано 13.12.2007, 18:50
#44
Supermax

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


Добыл я из функции VVA все данные, так что и ручки включать не надо и так все в шоколаде выходит, а если вообще целевым назначением все делать, так просто будет как в эмиратах у эмира.

VVA, что молчишь? Я ж вижу, шныряешь туда, сюда, видать уже чего-то ваяешь?

Я не зря тогда ту тему про поля затеял. Теперь вот пригодилось. Низкий тебе поклон за это.
Supermax вне форума  
 
Непрочитано 13.12.2007, 18:51
#45
Кулик Алексей aka kpblc
Moderator

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


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

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


Да получил я все коды на все дуги!

Только они белые, однако. А красные у тебя "простые"

Переменная lst в функции VVA, однако.

Последний раз редактировалось Supermax, 13.12.2007 в 19:11.
Supermax вне форума  
 
Автор темы   Непрочитано 13.12.2007, 19:18
#47
Supermax

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


Указатель на объект есть, теперь надо вытащить указатель на свойство из этого же поля.
Supermax вне форума  
 
Непрочитано 14.12.2007, 03:59
#48
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Supermax Посмотреть сообщение
Да получил я все коды на все дуги!

Только они белые, однако. А красные у тебя "простые"

Переменная lst в функции VVA, однако.
А именно красные и есть "связываемые". Если бы все было просто, все было бы уже давно решено.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 14.12.2007, 04:25
#49
Supermax

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


Kpblc, ты не шутишь? Я конечно поздравляю тебя еще раз с днем рождения, но ты как, адекватно себя чувствуешь?

Я запускаю макрос VVA, он включает ручки белым дугам, за ручки белые дуги подергал, формула отреагировала, а каким боком ты связал формулу с красными? Если бы ты в mtext вставил второе поле и в нем указал красную дугу, я бы понял. У меня в mtext-е два поля, одно указывает на один объект, другое на другой. Поскольку оба поля в одном mtext-e, то получается, что один объект связан с другим. Ладно, набирайся сил.

Последний раз редактировалось Supermax, 14.12.2007 в 04:41.
Supermax вне форума  
 
Автор темы   Непрочитано 14.12.2007, 08:53
#50
Supermax

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


Kpblc, так как красные дуги ты собирался связать и с чем?
Supermax вне форума  
 
Непрочитано 14.12.2007, 08:54
#51
Кулик Алексей aka kpblc
Moderator

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


К примеру: Длина первой полилинии (которая, кстати, не попала в набор копирования) должна быть равной длине дуги. Полный механизм лично я придумать не смог.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 14.12.2007, 09:09
#52
Supermax

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


Вот, наконец-то все стало на свои места. Красные дуги - побоку, на них поле ставить надо а на белые уже стоит, значит будем с белыми связывать. Добавляем еще одно поле в mtext с указанием в нем на полилинию и ее свойство... да любое, без разницы, но сразу за полем пишем буковками Vertex 1. У тебя получается четыре аргумента. Первый - указатель на объект "дуга" и ее свойство Length. Второй - указатель на элемент "полилиния" с любым установленным свойством. Третий - текст с именем свойства, которое надо уже выколупывать из найденного объекта лиспом, и четвертое - номер узла полилинии.
Supermax вне форума  
 
Непрочитано 14.12.2007, 10:18
#53
VVA

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


Выложил здесь еще одну функцию, создающую поля в объекте. Но ценность ее в том, что там описываютя код поля и его значение. По поводу "чего молчишь ..." так 2 варианта
1. окончательно пока еще все не утряслось ни у меня ни у вас.
2. конец года, понимаешь.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 14.12.2007, 10:59
#54
Supermax

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


VVA, молоток!

Надо из всего этого многообразия склеить следующее:
Есть mtext, в котором последовательно с разделителями пробел стоит метка $Kpblc (имя_функции аргумент1 аргумент2 аргумент_n)
Надо эту строку прочесть и передать в соответствующую переменную. Поскольку макрос, который читает эту строку и запускает функции к самим функциям не имеет никакого отношения, то предлагаю переменную назвать также как и метку, только без доллара, но возможно с каким-нибудь префиксом. Чтобы тот, кто будет сочинять очередную функцию точно знал через какую переменную ему передадут параметры аргументов.

Параметры предлагаю делать сразу списком, а не строкой. В список вставлять простой текст строками, значение полей сразу превращать в -1 код объекта и название свойства строкой.

Получаются вполне читабельные данные для простого усвоения функцией.

Я посмотрю на новую прогу и попробую вычленить из строки mtexta первое поле, второе поле и так далее.
Supermax вне форума  
 
Автор темы   Непрочитано 14.12.2007, 11:20
#55
Supermax

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


VVA, а у тебя это работало?
Вот к примеру.
Код:
[Выделить все]
(defun VALUE (num ent /)(cdr (assoc num ent)))
Совсем не работающая вещь. Вообще к тексту отношения не имеет. Наверное в том сайте num и ent в других лиспах определены. Ща гляну.
Supermax вне форума  
 
Непрочитано 14.12.2007, 11:25
#56
VVA

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


Имя последнего отрисованного примитива
(value 0 (entget(entlast)))
Если num-dxf код поля, ent - список dxf кодов, возвращаемый entget
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 14.12.2007, 11:27
#57
Supermax

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


Нет там на его странице этих определений. Разобрать та все можно, просто тут дедушка Облом с визитом вежливости пришел.
Supermax вне форума  
 
Непрочитано 14.12.2007, 11:28
#58
VVA

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


В AddObjectField строку
(vl-position (value 0 EntData) '("MTEXT" "ATTRIB" "ATTDEF"))
заменить на
(vl-position (cdr(assoc 0 EntData)) '("MTEXT" "ATTRIB" "ATTDEF"))
то от нее можно отказаться
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 14.12.2007, 11:29
#59
Supermax

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


Ага. Щас поколдую.
Supermax вне форума  
 
Непрочитано 14.12.2007, 11:30
#60
VVA

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


Есть, в посте №6
Цитата:
No problem; I'll help as much as i can.

First look:
Code:
(vl-position (value 0 EntData) '("MTEXT" "ATTRIB" "ATTDEF"))

I dont have a `value' function so i cant run this.



Dang! Thought I didn't use one of the subs. Guess I wasn't sure if I was going to post the code.
Here you go.

Code:
(defun VALUE (num ent /)
(cdr (assoc num ent))
)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 14.12.2007, 11:32
#61
Supermax

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


Я так понимаю, что AddToEname, LinkObj, PropName надо делать самому?
Supermax вне форума  
 
Автор темы   Непрочитано 14.12.2007, 11:38
#62
Supermax

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


Типа
(setq AddToEname (car (entsel "укажите MTEXT или ATTRIB или ATTDEF")))
(setq LinkObj (vlax-ename->vla-object (car (entsel))))
(setq PropName "length")

Так?

Последний раз редактировалось Supermax, 14.12.2007 в 11:52.
Supermax вне форума  
 
Автор темы   Непрочитано 14.12.2007, 11:42
#63
Supermax

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


Не работает так. Чего-то не хватает.
Supermax вне форума  
 
Автор темы   Непрочитано 14.12.2007, 11:58
#64
Supermax

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


А это что? (vlax-get LinkObj PropName)

Нет такой функции у меня vlax-get . Может у него библиотека подгружена своя?
вот vlax-get-propery есть. Но все равно не работает.

Последний раз редактировалось Supermax, 14.12.2007 в 12:06.
Supermax вне форума  
 
Непрочитано 14.12.2007, 12:19
#65
Кулик Алексей aka kpblc
Moderator

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


vlax-get - недокументированный способ получения определенного свойства activex-представления объекта. Официально не поддерживается и дальнейшая его судьба неизвестна (по информации, полученной от Полещука Н.Н. еще с год назад, если не больше).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 14.12.2007, 12:26
#66
Supermax

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


У меня в lspdump его нет.
Supermax вне форума  
 
Непрочитано 14.12.2007, 12:35
#67
VVA

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


(vlax-get LinkObj "Length") это тоже, что и (vla-get-length Linkobj)
У меня тоже не работает. Буду разбираться почему, но позже.
Там же выложил еще парочку набросков своих ф-ций и примеров их использования
DEMO1 - сносит все поля в тексте
DEMO2 - сносит поля AcVar (ссылающиеся на переменные)
DEMO3 втавляет поле с текущей датой в текст
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 14.12.2007, 13:31
#68
Supermax

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


Вскрыл я мозг тексту. Четыре словаря, вложенных друг в друга
Код:
[Выделить все]
(2 . "$Kpblc (имя_функции Первое поле_%<\\_FldIdx 0>% второе поле_%<\\_FldIdx 1>% и_еще_что-нибудь)")
Короче, все нашел, что нужно для обработки.

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

Для скорости
Цитата:
(setq ad1 (entget (cdr (assoc 360 (entget (cdr (assoc 360 (entget (cdr (assoc 360 (entget (car (entsel)))))))))))))
(entget (cdr (assoc 360 ad1)))

Последний раз редактировалось Supermax, 14.12.2007 в 13:42.
Supermax вне форума  
 
Автор темы   Непрочитано 15.12.2007, 10:12
#69
Supermax

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


Пересмотрел принцип передачи аргументов функции из mtext. Найдя mtext и выявив в нем имя функции, макрос запускает эту функцию и передает ей -1 код с именем самого mtext-a. Переменную, куда стартовый макрос записывает -1 код для этой функции надо именовать также как и саму функцию с префиксом, скажем, @. Стартовых макросов может быть много и разных производителей. Метки тоже естественно будут разные. А вот имя переменной должно быть не зависимым от производителя стартового макроса. Поэтому я и предлагаю ее называть точно также как и саму функцию, только с префиксом @.

Чтобы не было написано дальше в теле mtext-a значения не имеет. Если функция требует или принимает целые лисп выражения в теле аргументов к ней, так она и прочитает, то, что ей нужно, а если ей много не надо, то значит и наворотов по распознавани. вложенных в аргументы подфункций не будет.
Кому какие аргументы надо, тот и функцию пишет так, как хочет.

Короче, в стартовом макросе не будет процедуры анализа текста с целью поиска указателей на объекты, нахождения гороха в мешке с гречкой и т.п.
Нашли mtext по метке в начале строки, прочли имя функции, создали переменную с тем-же именем и сохранив в нее -1 код данного mtexta запустили функцию.
Supermax вне форума  
 
Автор темы   Непрочитано 15.12.2007, 12:36
#70
Supermax

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


У меня такая радость, такая радость -заказчик приболел,

что я, даже пофлудю немного.

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

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

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

Как простому юзеру привязать нужный элемент к нужному макросу при этом, не потеряв своей юзерской девственности?

Вот так:

Создаете mtext, в котром в начале пишете $Kpblc или другое ключевое слово, по которому стартовый макрос найдет данный mtext, пробел, открываете скобку, имя макроса, и дальше то, что от вас попросит создатель макроса.
Это могут быть и просто цифровые или буквенные выражения и естественно поля. Какие поля с формулами или без вам тоже скажет создатель макроса.

Например, зайдя в библиотеку макросов вы видете, что некий чел написал макрос, который изменяет параметр дин. блока в зависимости от длинны выбранной вами линии. В хелпе к этому макросу написано, что его имя (в смысле, макроса) например Lendh->Distance и после имени макроса надо указать полем на линию, затем пробел, затем полем на нужный блок и выбрать в нем нужное свойство, которое должно быть дистанцией.

получится типа $Kpblc (Lendh->Distance 12345 91045)

Я специально выбрал цвет, чтобы было понятно, что это поля.

Вы помещаете этот mtext на край рабочего пространства, чтобы в чертеже не появился и дальше:

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

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

Если что не понятно - спрашивайте.

Последний раз редактировалось Supermax, 15.12.2007 в 16:11.
Supermax вне форума  
 
Непрочитано 18.12.2007, 20:00
#71
VVA

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


На досуге немного "напрограммировал". Очень сырой примерчик установки длины отрезка(ов). Источником длины служат дуга, отрезок или круг, ссылки на которые прописаны в поле.
На запрос "Укажи текст-источник примитива" выбираем любой красный текст, на запрос "Укажи текст-приемник свойства" синий текст. Синий и фиолетовый отрезок "равняются" по длинне объекта, на который ссылается поле текста-источника.
Код:
[Выделить все]
;;; Возвращает имя примитивов и свойств из полей текста
(defun _get-en-and-prop-from-field (txt / dict field field_data lst lst1)
  (and
    (setq dict (cdr (assoc 360 (entget txt)))) ;_Ename Dictionary Словарь примитива
    (setq dict
           (cdr (assoc 360 (member '(3 . "ACAD_FIELD") (entget dict))))
    ) ;_Enable Field Dictionary Есть поля в объекте
    (setq dict (cdr (assoc 360 (member '(3 . "TEXT") (entget dict))))) ;_ Field Record Запись поля
 ;_Sub Field Records Вторичные записи полей
    (setq field (mapcar 'cdr
                        (vl-remove-if
                          '(lambda (x) (/= (car x) 360))
                          (entget dict)
                        ) ;_ end of vl-remove-if
                ) ;_ end of mapcar
    ) ;_ end of setq
    (or (setq lst1 ;_прямые ссылки полей на примитивы
        (vl-remove-if-not '(lambda (x)(and (car x)(cdr x)))
                (mapcar '(lambda (field_data)
     (cons
                                  (mapcar 'cdr
                                         (vl-remove-if
                                           '(lambda (x) (/= (car x) 331))
                                           (entget field_data)
                                         ) ;_ end of vl-remove-if
                                  ) ;_ end of mapcar
      (cdr(assoc 1 (member '(6 . "ObjectPropertyName") (entget field_data))))
      )
                               ) ;_ end of lambda
                              field
                      ) ;_ end of mapcar
   )
               ) ;_ end of setq
        t
    ) ;_ end of or
    (if (setq ;_вложенные ссылки полей на примитивы (формулы в полях)
          lst (apply 'append
                     (mapcar '(lambda (field_data)
                                (mapcar 'cdr
                                        (vl-remove-if
                                          '(lambda (x) (/= (car x) 360))
                                          (entget field_data)
                                        ) ;_ end of vl-remove-if
                                ) ;_ end of mapcar
                              ) ;_ end of lambda
                             field
                     ) ;_ end of mapcar
              ) ;_ end of apply
        ) ;_ end of setq
      (setq lst 
                   (mapcar '(lambda (field_data)
         (cons
                              (mapcar 'cdr
                                      (vl-remove-if
                                        '(lambda (x) (/= (car x) 331))
                                        (entget field_data)
                                      ) ;_ end of vl-remove-if
                              ) ;_ end of mapcar
         (cdr(assoc 1 (member '(6 . "ObjectPropertyName") (entget field_data))))
    )
                            ) ;_ end of lambda
                           lst
                   ) ;_ end of mapcar
            
      ) ;_ end of setq
    ) ;_ end of if
  ) ;_ end of and
  (append lst lst1)
) ;_ end of defun

(defun C:TEST ()
  (if (and (setq text_from (car(entsel "\nУкажи текст-источник примитива: ")))
           (wcmatch (cdr(assoc 0 (entget text_from))) "*TEXT")
    (setq text_to (car(entsel "\nУкажи текст-приемник свойства: ")))
           (wcmatch (cdr(assoc 0 (entget text_to))) "*TEXT")
    (if
    (= (length (setq lst (_get-en-and-prop-from-field text_from))) 1)
    lst
    (progn
      (alert "В поле должен быть указан один примитив")
      nil
      )
    )
    (setq lst1 (mapcar 'caar (_get-en-and-prop-from-field text_to)))
           )
    (progn
      (setq en (caaar lst)
     prp (cdar lst)
     )
      (foreach en_to lst1
 (setq obj_to (vlax-ename->vla-object en_to))
 (if (vlax-write-enabled-p obj_to)
    (if (and (= (cdr(assoc 0 (entget en_to))) "LINE")
      (wcmatch (strcase prp) "*LENGTH,CIRCUMFERENCE")
      )
      (progn
        (setq p1 (cdr(assoc 10 (entget en_to)))
       p2 (cdr(assoc 11 (entget en_to)))
       len (vlax-get-property (vlax-ename->vla-object en) prp)
       )
      (vla-put-EndPoint obj_to (vlax-3d-point(polar p1 (angle p1 p2) len)))
            (vl-cmdf "_updatefield" text_to "")
        )
   )
 )
      )
    )
    )
  (princ)
  )
Вложения
Тип файла: dwg
DWG 2004
test.dwg (34.1 Кб, 563 просмотров)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 18.12.2007, 21:18
#72
Supermax

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


Блин! Ну почему под конец дня? Когда мне надо бежать домой
Supermax вне форума  
 
Непрочитано 19.12.2007, 09:32
#73
VVA

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


Цитата:
Сообщение от Supermax Посмотреть сообщение
Блин! Ну почему под конец дня? Когда мне надо бежать домой
Так заказчики пока только у тебя болеют
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 19.12.2007, 11:44
#74
Supermax

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


Ну, во первых ты не молоток, ты отбойный молоток!
Наконец-то хоть один человек просек, о чем я базарю.
Только пару поправок:
Во-первых надо все поля писать в одном mtext-e. Именно этим они и связываются в группу. Первое поле - ведущее, остальные - ведомые. Ну да ладно, надо все по человечески сделать. Главное наглядный пример, что все пашет, уже есть.
Во-вторых - ты линии по длине только в 2D делаешь, а надо 3D. Но все равно, молодец, молодец, молодец!

Постоянное "укажи то", да "укажи се" не катит никак. Тексты должны опознаваться автоматически, а значит, в них должна быть какая-то метка. Вот в строке в 2-ом dxf коде есть такая метка - это сочетание _%<\\ для опознания, что дальше идет имя объекта поля, а >%, то, что дальше описания поля нет. У нас я предлагал такую метку сделать как $Kpblc это типа подарка ему на день рождения. Но как тщательнее подумал, понял, что меток надо много, поскольку не всегда удобно корректировать все сразу. Поэтому возник вопрос, а где их держать?
Вот ко мне пришел чужой чертеж, а там чужие метки. Сколько их и какие они я не знаю. По доллару в начале строки можно догадаться, что это метка. Может и два доллара надо ставить. А вот остальное надо по моему, хранить прямо в чертеже. Метки должны быть доступны к редактированию, дополнению и удалению.
Вопрос открытый и я до конца его не доковырял.

Второй вопрос - это последовательность запуска отдельных меченных mtext-ов. Предлагаю сразу за меткой ставить число, соответствующее очередности запуска данного связующего mtext-a. Оно не обязательно и его можно не ставить, если очередность не имет значения. типа $Kpblc 123 (имя функции .....
Если попались два одинаковых номера, то надо, либо останавливать работу, подсвечивать ручками оба mtext-а и выбрасывать сообщение, что они бракованные. Либо надо выбрать тот, кто был создан первый и запускать по приоритету старшинства. Кстати имя элемента несет в себе порядковый номер создания.
Вопрос также - открытый.

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

Четыре - я передумал передавать функции -1 код текста. Надо взять строку типа:
Код:
[Выделить все]
"$Kpblc 123 (имя_функции %<\\_FldIdx 0>% %<\\_FldIdx 1>%)"
Стереть в начале строки до скобки $Kpblc 123 , затем в точном соответствии с содержимым указателя поля создать одноименные переменные FldIdx0 и FldIdx1 и прописать в них указатели на их словари. Стереть в строке все эти скобки и подчеркивания чтобы получилась вот такая строка:
Код:
[Выделить все]
"(имя_функции FldIdx0 FldIdx1)"
и ее запустить в лиспе.
Именно функция уже и будет разбираться с этим словарем. Формула там, или объект - без разницы.

Вот такой вот план.

Последний раз редактировалось Supermax, 19.12.2007 в 11:59.
Supermax вне форума  
 
Автор темы   Непрочитано 19.12.2007, 13:20
#75
Supermax

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


Добавлю:
Если взять простой текст и посмотреть на его свойства, то в них вы 360 пары не найдете. Но, как только вы перед текстом вставите %<\ а после >% с нажатием процентов весь текст превратится в поле, а в свойствах появится словарь.
Supermax вне форума  
 
Автор темы   Непрочитано 19.12.2007, 17:00
#76
Supermax

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


С долларом облом приключился. в DIESEL фигурирует.

Не, доллар пока вроде не помеха.

Последний раз редактировалось Supermax, 19.12.2007 в 17:09.
Supermax вне форума  
 
Непрочитано 19.12.2007, 17:14
#77
Дима_

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


ставь тогда ?!
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 19.12.2007, 18:02
#78
Supermax

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


Да, недоработка, однако у евросоюза. На клавах бакс е, а евро нема! Ай, яй яй! Дык, а как его в клаву впихнуть?
Supermax вне форума  
 
Непрочитано 19.12.2007, 18:51
#79
VVA

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


1. Все пишестя в 1 (м)тексте
2. Пока в 2D
3. Пока команда XX_TEST, а не ф-ция
3. Нужные тексты помечаются расширенными данными (далее РД)
для выбора и дальнейшей обработки. Структура имени РД маска $DwgRu далее случайные уникальные числа. Команды для маркировки/демаркировки XX_Mark, XX_Del, XX_SEL присвоенное РД записывается в гиперссылку текста.
Команда XX_TEST проходится по маркированным текстам, берет из них поля, причем первое поле - ведущее (берется примитив и его свойство), остальные - ведомые (берутся имена примитивов и пытаемся установить им св-во ведущего примитива).
В прилагаемом примере после применения команда XX_TEST синий и зеленый отрезок уравняют длину с красным (источник - Текст1), и синий отрезок поменяет цвет на фиолетовый (источник Текст2)
Вложения
Тип файла: dwg
DWG 2004
test.dwg (43.0 Кб, 546 просмотров)
Тип файла: lsp supermax-field.LSP (16.4 Кб, 76 просмотров)
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 20.12.2007 в 10:41. Причина: Добавлена ф-ция mip-conv-to-str
VVA вне форума  
 
Автор темы   Непрочитано 19.12.2007, 19:25
#80
Supermax

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


VVA, у меня ощущение, что я стал миллиардером, но сижу на раскаленной сковородке.
Почему ты не дискутируя по поводу метки, взял и ее впихнул в текст, да еще и в расширенные данные?
Теперь, чтобы понять, кто меченый, а кто нет, надо постоянно подсвечивать твоей командой тексты.

У меня задумка была "продлить" лисп. Сделать текст, или мтекст продолжением макроса, чтобы можно было писать лиспы сложной конфигурации, но чтобы в теле программы были поля. Для этого я и изголялся по поводу обработки строк с указателями на поля.
Какой бы ты текст не написал (тра-ля-ля ...поле1 полеN (тра-ля-ля ... полеn)) все сведется к нормальному выражению, которое можно будет слизав из текста запустить в работу.

Не губи перспективу!!! Умоляю!!!

А так, круто и весьма впечатляет. Еще больше впечатлит, если текст начнет изменять длину (а не наоборот, как раньше) Можно даже текст в конце предложения сделать ведущим, только точку в разделителе вместо запятой надо автоматом подставлять.

Сразу скажу, что если написать просто (функция - поля), то это для любого юзера понятно, но мне надо больше чем простым юзерам, да и многим тоже. От постановки задачи зависит все. Чуть в сторону и уже не тот результат. Юзеры будут использовать этот микроскоп как молоток, а мы как положено (как антураж великих умов).
Supermax вне форума  
 
Автор темы   Непрочитано 19.12.2007, 19:38
#81
Supermax

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


Command: XX_Mark
Выберите тексты ОД для маркировки
Select objects: 1 found
Select objects:
; error: no function definition: MIP-CONV-TO-STR
Supermax вне форума  
 
Непрочитано 19.12.2007, 20:06
#82
Дима_

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


К теме не очень относится, но раз уж спросил то ? в русской раскладке - alt+0136, в английской alt 0128 (нажимаешь alt, код на цифровой клавиатуре по очереди, отпускаеш).
P.S. особенно удобно на ноутбуках где цифровой клавиатуры нет, а как ее включить еще найти надо.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 19.12.2007, 20:36
#83
Supermax

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


Ценно! Спасибо. Я вот тут произвел переучет своих ценностей и весьма сконфужен стал. Как мне быстро находить то, что мне понадобилось? Макросы множатся как тараканы. Скоро я просто не смогу в голове держать все, что у меня есть. А тут еще Kpblc мне свою библиотеку подкинул - КАРАУЛ! Жадность фраера сгубила, однозначно.
Supermax вне форума  
 
Непрочитано 20.12.2007, 11:16
#84
VVA

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


Обновил лисп в #79. Теперь понимашь ценность библиотеки?
По поводу РД - считай это как предложение другого варианта. Нужные тексты пометил XX_MARK и они используются. Хотя не сложно сделать по некоей сигнатуре в тексте.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 20.12.2007, 12:06
#85
Supermax

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


По поводу РД я подумал, подумал и понял, что если оставить как есть, то никто мне не мешает написать в начале текста все, что в голову взбредет. Поэтому отличие текста-указателя от других текстов пользователь делает так, как ему заблагорассудится.
Немного муторно с маркировкой РД, но в принципе - сойдет.

Ценность библиотеки я никогда не оспаривал. Я оспаривал применение ее, как части программы и взаимосвязанность функций в ней мне не нравится, а так - двумя руками за.

VVA, Kpblc, я тут пытаюсь строку в список превратить не теряя уровня регистра букв и все, что я придумал сводится к следующему:
Вот строка
Код:
[Выделить все]
"(setq ss1\"БОЛЬШИЕ БУКВЫ маленькие буквы\")"
Мне надо запустить ее и чтобы в переменной ss1 появилась именно такая запись, а не одни большие буквы. Косые я поставил, для того, чтобы при записи в файл кавычки прописались.
Я открываю файл с расширением .lsp и записываю в него эту строку. Затем этот файл запускаю. Если мне надо это выражение сохранить осуществляю сцепление строк
Код:
[Выделить все]
"(defun ddd () " "(setq ss1\"БОЛЬШИЕ БУКВЫ маленькие буквы\")" ")"
и имею в результате ddd, которое запускает вытянутое из строки выражение.

кто-нибудь, когда-нибудь пытался сделать функцию строка->список?

Последний раз редактировалось Supermax, 20.12.2007 в 12:29.
Supermax вне форума  
 
Непрочитано 20.12.2007, 12:50
#86
VVA

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


Если я правильно понял
Код:
[Выделить все]
 
(setq str "(setq ss1\"БОЛЬШИЕ БУКВЫ маленькие буквы\")")
(eval(read str))
(princ "\nПеременная ss1=")(princ ss1)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 20.12.2007, 13:03
#87
Supermax

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


Нет, ты меня не понял, а я правильно не выразился.
Есть в активХ вещи чувствительные к регистру и они без кавычек. (read поганит эти функции и их аргументы если читает их из строки. Если в выражении появятся функции активХ, то будет труба.

P.S. Маркировка заработала. Мне не понятно назначение кучи цифр. Это типа очередность будет ими определяться?
Supermax вне форума  
 
Автор темы   Непрочитано 20.12.2007, 13:14
#88
Supermax

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


Забыл еще одну феньку сказать.
Если в атрибут блока, именно в пространстве редактора блока вставить поле и указать на любой выбранный элемент содержимого блока, а потом выйдя из редактора, запустив команду attsync и через свойства блока вставить в тот же атрибут втрое поле с указанием уже на элемент пространства модели, то мы тем самым свяжем элемент внутри блока с элементом снаружи.
Supermax вне форума  
Ответ
Вернуться   Форум 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