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

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

NanoCAD-23.1 - как управлять режимом привязки?

Ответ
Поиск в этой теме
Непрочитано 15.07.2024, 14:08 #1
NanoCAD-23.1 - как управлять режимом привязки?
===AAA===
 
г. Норильск
Регистрация: 15.08.2005
Сообщений: 616

Всем привет!

Понятно, что (setvar "osmode"), но как оказалось, этого недостаточно.

Нужно ещё "что-то", что делает F3 включая/отключая установленные
режимы привязки.

Для АК у меня (для включения режима) вполне работала конструкция

(setq p (getvar "osmode"))
(setq p1 (logand p 16383))
(setvar "osmode" p1)

а в НК она работать уже не хочет.

Куда они там бит управления привязкой спрятали?
__________________
Счастливо, Алексей!
Просмотров: 2439
 
Непрочитано 15.07.2024, 14:11
#2
Кулик Алексей aka kpblc
Moderator

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


Попробуй тупо сбрасывать в 0.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 15.07.2024, 14:15
#3
===AAA===


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


Так мне - наоборот - включить нужно...
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 15.07.2024, 14:17
#4
Кулик Алексей aka kpblc
Moderator

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


(setq osmode (getvar "osmode"))
(setvar "osmode" 0)
; ....
(setvar "osmode" osmode)

----- добавлено через 24 сек. -----
И стесняюсь спросить - на фига вообще привязку скидывать?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 15.07.2024, 14:45
#5
===AAA===


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


Просто в процессе выполнения программы на одном из её участков,
мне нужно выставить для пользователя привязку "Ближайший".
Чтобы он мимо объекта не промахнулся. Куда попадёт - не особо
важно, но точка должна быть на объекте.

Поэтому в программе, написанной ещё ... ох, в 1991 году в этом
месте стояло (setvar "osmode" 512) и до сих пор всё работало.

Пока лучшее, что придумал, для НК, это связку:

(setvar "osmode" (logior 512 16384))
(command "ToggleOSnapNext")

Т.е. сперва выставляю в отключенное состояние нужную
мне привязку, потом включаю её командой.

Изврат, дебилизм, но работает...

Не, тоже не годится :-(

Эта конструкция работает только с командной строки.

А из-под ЛИСПа

(command "ToggleOSnapNext")

диалоговое окно вызывает, даже если CDMDIA=0
__________________
Счастливо, Алексей!

Последний раз редактировалось ===AAA===, 15.07.2024 в 14:59.
===AAA=== вне форума  
 
Непрочитано 15.07.2024, 14:59
#6
Кулик Алексей aka kpblc
Moderator

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


Ну поменяй в моем варианте 0 на 512 и не парься. В чем проблема?
Ну или (как вариант, написано насухую и без проверок):
Код:
[Выделить все]
 (defun fun-get-closest-point (/ sysvar res) 
  (setq sysvar (mapcar 
                 (function 
                   (lambda (x / temp) 
                     (if (setq temp (getvar (car x))) 
                       (progn 
                         (setvar (car x) (cdr x))
                         (cons (car x) temp)
                       )
                     )
                   )
                 )
                 '(("osmode" . 512))
               )
  )
  (setq res (vl-catch-all-apply 
              (function 
                (lambda () 
                  (getpoint "\nSelect closest point <Cancel> : ")
                )
              )
            )
  )
  (foreach item sysvar 
    (setvar (car item) (cdr item))
  )
  (if (= (type res) 'list) 
    res
  )
)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 15.07.2024, 15:17
#7
===AAA===


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


Цитата:
Ну поменяй в моем варианте 0 на 512 и не парься. В чем проблема?
Проблема в НК. Как выяснилось, даже такой вот участок кода

(setvar "osmode" 512)
(setq p (getpoint "Для ... кабеля укажите ее точку: "))

не гарантирует, что р будет получена с привязкой к объекту.

в АК - гарантировалось, в НК - нет.

Для НК нужен ещё какой-то "пинок", чтобы он принял к сведению,
что режим привязки включён. Возможно, это глюк только моей
версии 23.1. А возможно - и дальше всё то же самое.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 15.07.2024, 15:32
#8
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,297
Отправить сообщение для doctorraz с помощью Skype™


конечно это все видели
Нажмите на изображение для увеличения
Название: Image 1.png
Просмотров: 48
Размер:	18.5 Кб
ID:	263804

както так
Код:
[Выделить все]
 
(defun C:ё ()
  ;;перекл орто привязка шаг вкл/выкл все
  ;;(command nil)
  (if (= (getvar "SNAPMODE") 0)
    ;;привязка к сетке
    (progn (setvar "SNAPMODE" 1)
	   (setvar "ORTHOMODE" 0)
	   (if (< (getvar 'OSMODE) 16384)
	     (setvar "OSMODE" (+ (getvar 'OSMODE) 16384))
	   ) ;_endif
	   (prompt "\\nШагаем ")
    ) ;_endprogn
    ;;_endprogn
    (progn (setvar "SNAPMODE" 0)
	   (setvar "ORTHOMODE" 1)
	   (if (> (getvar 'OSMODE) 16383)
	     (setvar "OSMODE" (- (getvar 'OSMODE) 16384))
	   ) ;_endif
	   (prompt "\\nЧертим ")
    ) ;_endprogn
    ;;_endprogn
  ) ;_endif
  ;;_ end if
  (princ)
) ;_enddefun
__________________
Мастерская СПДС
doctorraz вне форума  
 
Автор темы   Непрочитано 15.07.2024, 15:51
#9
===AAA===


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


Да видели, конечно... Всё это работает в АК.

Требует проверки, но пока у меня сложилось впечатление, что НК
внутри ЛИСП-программы вообще игнорирует назначения
(setvar "osmode" ...), кроме (setvar "osmode" 0)

Т.е., какие привязки были до вызова своей функции, с теми
она и работает. Проверьте, плиз, кому не лень. Именно связку:

(setvar "osmode" 512)
(setq p (getpoint "Для ... кабеля укажите ее точку: "))

Только не с клавиатуры, а из ЛИСП-программы.
Всегда ли удаётся получить точку p с привязкой к объекту?
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 15.07.2024, 16:08
#10
Кулик Алексей aka kpblc
Moderator

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


В телеге подсказали - оказывается, надо еще и AppOptions.xml проверять. Там тоже подобные настройки хранятся. И, похоже, конфликтуют.
На хрена одно и то же было разбрасывать в несколько мест - тайна.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.07.2024, 16:14
#11
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,297
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
Только не с клавиатуры, а из ЛИСП-программы.
в нк 24.1
(setvar "osmode" 512)
неважно как дальше я буду пытаться получить точку, ближайшаЯ не срабатывает (срабатывают привязки которые были назначены до этого)
пока не зайдешь в настройки привязки, увидишь одинокую ближайшую и не тыкнешь ей Ок.
Очевидно один из "немногих" нанобагов.
надо в сапорт тикет писать, нана сам себя чинить не будет.
----------
нанобетатестерам кейс со ссылкой сюда скинул
__________________
Мастерская СПДС
doctorraz вне форума  
 
Автор темы   Непрочитано 15.07.2024, 16:27
#12
===AAA===


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


Цитата:
нанобетатестерам кейс со ссылкой сюда скинул
Спасиб! У меня этих "нанобагов" уже набралось...
Из последнего - игнор установки BLIPMODE.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 15.07.2024, 16:39
#13
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,297
Отправить сообщение для doctorraz с помощью Skype™


пробуй так
(setvar "osmode" 16384)
(setvar "osmode" 512)
(setq p (getpoint "Для ... кабеля укажите ее точку: "))
у меня получилось

-
уже нет , колдунство какое то(((
__________________
Мастерская СПДС

Последний раз редактировалось doctorraz, 15.07.2024 в 16:47.
doctorraz вне форума  
 
Автор темы   Непрочитано 15.07.2024, 16:42
#14
===AAA===


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


Попробую, но пока копаю в сторону (vla-SetVariable ...)
Похоже, работает, но уже завтра буду плотно это тестировать.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Автор темы   Непрочитано 16.07.2024, 06:37
#15
===AAA===


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


Первое впечатление - (vla-SetVariable ...) в НК нифига не панацея.

Тоже тот ещё глюкодром.

Например, с переменной "cecolor" она справиться не может.
Т.е. связка:

(setq p (vla-getVariable acddoc "cecolor"))
;,,, меняем цвет ...
;снова восстанавливаем его
(vla-SetVariable acddoc "cecolor" p)

в АвтоКаде работает на ура, а в НК - нет.

А вот

(setq p (getvar "cecolor"))
;,,, меняем цвет ...
;снова восстанавливаем его
(setvar "cecolor" p)

Работает и там и там.

Но!

В НК она "тупит", т.е. после изменения цвета через
(setvar "cecolor" p), текущий установленный цвет
в индикаторе на панели инструментов (цветной такой
квадратик - красный там или синий или ещё какой)
не меняется.

Создаётся впечатление, что (setvar "cecolor" p) не отработала,
но стоит начать рисовать (скажем, отрезок), НК получает
"волшебный пендель" и меняет цвет индикатора.

Кстати, этот "волшебный пендель" в НК пора выносить в отдельный
вид глюков, т.к. он проявляется во многих местах.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 16.07.2024, 06:59
#16
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,297
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
волшебный пендель
В телеге пришли к выводу, что волшебный пендель это command
Тогда переключает
__________________
Мастерская СПДС
doctorraz вне форума  
 
Автор темы   Непрочитано 16.07.2024, 07:06
#17
===AAA===


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


Цитата:
В телеге пришли к выводу, что волшебный пендель это command
Да, я примерно так и делаю

(command "_.line" '(0 0) '(1 0) "")

и тут же его стираю.

Изврат, но работает. :-)

И да - (vla-SetVariable ...) проблему с привязкой решает.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 18.07.2024, 08:59
#18
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,297
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
(setvar "osmode" ...),
нанодиалект лиспа , как выяснилось регистрозависим(((
надо капсом OSMODE, тогда все Ок)))
__________________
Мастерская СПДС
doctorraz вне форума  
 
Автор темы   Непрочитано 18.07.2024, 09:02
#19
===AAA===


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


Фигасе! Кто бы мог подумать.

Ладно бы для всех системных переменных,
а то ведь выборочно...
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 18.07.2024, 09:20
#20
Кулик Алексей aka kpblc
Moderator

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


Offtop:
Цитата:
Сообщение от doctorraz Посмотреть сообщение
нанодиалект лиспа , как выяснилось регистрозависим(((
надо капсом OSMODE, тогда все Ок)))
Дер брэд оф сивый мэрин
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > NanoCAD-23.1 - как управлять режимом привязки?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
NanoCAD 23.1: (command "_.save") - глюк ... ===AAA=== LISP 1 11.07.2024 10:55
NanoCAD 23.1: Как заблокировать окно "Свойства" ? ===AAA=== LISP 2 28.06.2024 13:06
NanoCAD 23.1 и MS Visual Studio 2022 - первые шаги ===AAA=== .NET 54 26.03.2024 14:09
NanoCAD 5. Привязки "от" и "середина между точками" Primeiro Другие CAD системы 3 07.12.2016 06:56
Предложение по автоматизации привязки растра Neznayka Программирование 7 27.01.2012 12:17