|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
VLA-***
Программист широкого профиля.
Челябинск
Регистрация: 08.09.2005
Сообщений: 722
|
||
Просмотров: 7080
|
|
|||||
Project Engineer Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392
|
Цитата:
Цитата:
Цитата:
Код:
Цитата:
|
||||
![]() |
|
||||
Программист широкого профиля. Регистрация: 08.09.2005
Челябинск
Сообщений: 722
|
Нашел такие функции
Vla-getpoint Vla-getangle Vla-getcorner И много других функций соответствующих обычным get-функциям. В качестве первого аргумента им надо передать Vla-объект. Вот только какой объект? Пробовал model-space – не получается. Мои рассуждения такие: Функция Vla-getpoint должна дать возможность выбрать точку в интерактивном режиме в графическом окне и возвратить вариант в WCS, что очень удобно при построении объектов с помощью Vla-add*, не нужно заморачиваться на трансформацию координат если они не WCS и не нужно преобразовывать координаты в вариант в отличии от простой getpoint. В справочной системе сказано примерно тоже самое о чем я подумал кроме объекта. Какойже тогда объект надо передавать?????????????????????????? |
|||
![]() |
|
||||
Программист широкого профиля. Регистрация: 08.09.2005
Челябинск
Сообщений: 722
|
Очень хорошо. Спасибо.
А как добавить vla-объект в блок. Например в пространстве модели нарисована окружность и она должна войти в блок. Как создать пустой блок я догадался: (setq blk (vla-add (vla-get-blocks (mmax-active-document);my-function ) (vlax-3d-point 0 0 0) "blkname")) применимые методы позволяют рисовать только новые объекты(есть еще несколько методов, предназначение которых мне не очень понятно), а как добавить имеющиеся??? |
|||
![]() |
|
||||
Lisp/VBA/VB.NET Hobbyist Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367
|
Цитата:
поскольку отмена не выходит Выбери вставку блока на экране а потом окружность Переделай по вкусу Код:
~'J'~ |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,408
|
Цитата:
Код:
Цитата:
Цитата:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
С неточности в терминологии начинаются неточные вопросы. А справку почему не открыть и не прочитать внимательно? Там все написано! Особенно если щелкать по стрелчкам вверхи вниз на странице описания объекта. Тогда и не будет "я догадался", "мои рассуждения такие", "о чем я подумал". Что касается таинственных VLA-объектов, то в LISР-функциях всегда первым аргументом передается объект, а далее - остальные аргументы, приводимые в "бейскиковых" примерах. Еще воможен разный синтаксис. Например, Fatty написал Код:
Код:
Код:
|
|||
![]() |
|
||||
Project Engineer Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392
|
Потому что, начавши какое дело, его следует доводить до конца. Код 128 используется для ввода с клавы улючевых слов (keyword) Как, спрашивается, глупая машина, хучь бы и с АвтоКадом, узнаит, каких именно ключевых слов вам бы хотелось? Потому писать следует так:
Код:
|
|||
![]() |
|
||||
Программист широкого профиля. Регистрация: 08.09.2005
Челябинск
Сообщений: 722
|
У меня идея такая: предложить пользователю указать точку на экране или ввести число с клавиатуры без всяких опций. возвращается точка или число.
выполняться будет примерно так Код:
если пользователь укажет точку то будет предложено указать еще две из этих трех точек будет сформирован угол, тоесть пользователю предлагается указать угол визуально. нечто подобное есть здесь http://dwg.ru/dwl/index.php?id=845 там надо выбрать "сегмент", угол предлагается создать только по трем точкам. К сожалению не имеет смысла выкладывать коды так как придется долго разбираться с библиотечными функциями (initget 128) (getpoint "Укажите точку:") может это реализовать если я вместо точки введу число, буквы и другие символы, то возвратится строка с этими символами |
|||
![]() |
|
||||
Project Engineer Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392
|
Цитата:
Да, а что касается vla-getPoint, то у вас ошибка в коде - пропущена точка ссылки. Сделайте так: Код:
|
|||
![]() |
|
||||
Программист широкого профиля. Регистрация: 08.09.2005
Челябинск
Сообщений: 722
|
Если быть кратким:
Я хочу предложить пользователю в ОДНОМ запросе указать точку или ввести число, одно из двух. Если введено число , то это число и будет значением угла и операция на этом закончится. Если указана точка, то операция получения угла по трем точкам будет продолжена. Но вот что мне удалось выяснить. В справке сказано: Если полльзователь ввел keyword то Акад выдаст ошибку. keyword потом можно прочитать с помощью vla-getinput. В чем я убедился. Но мне не нужна ошибка так как она прервет всю программу. И keyword я хочу прочитать сразуже а не в обработчике ошибок. Как то странно все здесь сделано. |
|||
![]() |
|
||||
Project Engineer Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392
|
Тогда ысе ваще просто. Вам нужна функция vla-getAngle
Код:
|
|||
![]() |
|
||||
Программист широкого профиля. Регистрация: 08.09.2005
Челябинск
Сообщений: 722
|
Нет, угол к горизонтали, а скорее всего к ANGBASE, не подходит так как я хочу указать его по трем точкам, Чтото врде опорного угла в команде _ROTATE.
Задача такая: 1. Указать вершину угла 2. указать первую сторону (резиновая нить от вершины до точки) 3. указать вторую сторону (резиновая нить от вершины) теперь имеются три точки характеризующие две линии пересекающиеся в точке указанной вершины. угол высчитывается от первой стороны до второй по направлению указанном в переменной ANGDIR. у меня уже реализован этот алгоритм, но в нем невозможно ввести число. Я немного разочарован в VLA-getметодах. Оказалось что vla-getpoint возвращает точку в ПСК, а VLAобъектам нужно передавать только в МСК. Нуда ладно, разберемся. А вот еще вопрос есть ли в ActiveX функции идентичные SSGET, и можно ли там применять такиеже фильтры. Вот тут бы было небольшое преимущество так как SSGET работает медленно и если выбрать более 70000 объектов то и вовсе зависает, а более 150000 даже не просыпается. |
|||
![]() |
|
|||||
Project Engineer Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392
|
Цитата:
Код:
Цитата:
Цитата:
Цитата:
|
||||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
ssget и vla-get-ActiveSelectionSet Глючит vla-SelectOnScreen! Знатоки ActiveX - отзовитесь! http://www.afralisp.net/vl/selsets.htm VxSsetSelect - ActiveX counterpart to 'ssget' Последний раз редактировалось VVA, 19.09.2015 в 00:05. |
|||
![]() |
|
||||
Программист широкого профиля. Регистрация: 08.09.2005
Челябинск
Сообщений: 722
|
Все советуют заглянуть в справку.
Я конечно туда заглядываю. Единственная проблема -- это незнание названий функций и плохое знание английского. Иногда бывает, что я не могу внятно перевести текст, вот и спрашиваю у знающих людей. |
|||
![]() |
|
||||
Программист широкого профиля. Регистрация: 08.09.2005
Челябинск
Сообщений: 722
|
Цитата:
Но всетаки я реализовал то что хотел по запросу угла. Выкладывать код не имеет смысла изза библиотечных функций, типа перевода градусов в радианы, активных space и др objects итп. Но я собрал их в VLX-файл и вы можете посмотреть реализацию на практике. Там получение угла реализовано несколько лучше и функции getangle vla-getangle вообще не используются. Но вопрос по vla-getметодам остается открытым: Код:
А вот у vla-соплеменников в любом случае сначала возвратит ошибку, а уже потом после ошибки я смогу прочитать keyword с помощью vla-getinput. Тоесть дальнейшие действия я смогу проделать только в функции *error*. Справка это подтверждает. И вот вопрос: а зачем все так коряво придумано? Функция *error* предназначена совсем для других действий и использовать ее как основную программу очень не хочется. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,408
|
Цитата:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |