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

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

как извлечь вещественное число?

Ответ
Поиск в этой теме
Непрочитано 20.03.2012, 08:02 #1
как извлечь вещественное число?
Jonas
 
конструктор машиностроитель
 
Новосибирск
Регистрация: 14.05.2007
Сообщений: 893

Вопрос в следующем.
Извлекаю из CANNOSCALE ее значение, получаю "1:10" и далее можно 1:10.
Нужно в лиспе использовать число 10 как коэффициент, ни как не получается, цифру 1 можно извлечь а вот 10 ни как.
Можно ли решить эту задачу в лис-выражении?

Полищук под руками, гугл тоже.
Просмотров: 3727
 
Непрочитано 20.03.2012, 08:29
#2
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


В теме "как извлечь вещественное число?"
А потом
Цитата:
Сообщение от Jonas Посмотреть сообщение
Нужно в лиспе использовать число 10 как коэффициент, ни как не получается, цифру 1 можно извлечь а вот 10 ни как.
И 1 и 10 целые числа
Цитата:
Сообщение от Jonas Посмотреть сообщение
Полищук под руками, гугл тоже.
Тогда не понятно в чем проблема
Код:
[Выделить все]
 
_$ (setq canscl (getvar 'CANNOSCALE))
"1:10"
_$ (atoi (substr canscl (vl-string-search ":" canscl) 1))
1
_$ (atoi (substr canscl (+ 2 (vl-string-search ":" canscl))))
10
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 20.03.2012, 08:44
#3
Кулик Алексей aka kpblc
Moderator

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


Только не следует забывать, что название масштаба может быть одним, а значения - совсем другими. ИМХО вот так будет правильнее:
Код:
[Выделить все]
 (defun get-scale-values (/ dict)
  (if (setq dict (dictsearch (namedobjdict) "acad_scalelist"))
    (progn
      (car (vl-remove-if-not
             '(lambda (x)
                (= (car x) (getvar "cannoscale"))
                ) ;_ end of lambda
             (mapcar '(lambda (x)
                        (mapcar
                          '(lambda (a)
                             (cdr (assoc a (entget (cdr x))))
                             ) ;_ end of lambda
                          '(300 140 141)
                          ) ;_ end of mapcar
                        ) ;_ end of lambda
                     (vl-remove-if-not '(lambda (x) (= (car x) 350)) dict)
                     ) ;_ end of mapcar
             ) ;_ end of vl-remove-if-not
           ) ;_ end of car
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of defun
Структуру списка, думаю, пояснять не надо
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.03.2012, 09:11
#4
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


Кулик Алексей aka kpblc, есть вопрос, зачем к списку всех масштабов, полученному mapcar'ом, применять такую сложную конструкцию
Код:
[Выделить все]
(vl-remove-if-not
            '(lambda (x)
               (= (car x) (getvar "cannoscale"))
               )
...
Так не проще?
Код:
[Выделить все]
(defun get-scale-values1 (/ dict)
 (if (setq dict (dictsearch (namedobjdict) "acad_scalelist"))
   (progn
     (assoc (getvar "cannoscale")
            (mapcar '(lambda (x)
                       (mapcar
                         '(lambda (a)
                            (cdr (assoc a (entget (cdr x))))
                            ) ;_ end of lambda
                         '(300 140 141)
                         ) ;_ end of mapcar
                       ) ;_ end of lambda
                    (vl-remove-if-not '(lambda (x) (= (car x) 350)) dict)
                    )
            )
     ) ;_ end of progn
   ) ;_ end of if
 ) ;_ end of defun
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 20.03.2012, 09:21
#5
Кулик Алексей aka kpblc
Moderator

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


Можно и так, конечно Писал-то на бегу
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.03.2012, 14:22
#6
smashik


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


Добрый день. Может кто-нибудь доработать этот лисп, чтобы в соответствии с аннотативным масштабом устанавливался глобальный масштаб типа линий?
smashik вне форума  
 
Непрочитано 20.03.2012, 15:09
#7
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
 (vl-catch-all-apply
  (function
    (lambda ()
      (setvar "ltscale"
              (cadr ((lambda (/ dict)
                       (if (setq dict (dictsearch (namedobjdict) "acad_scalelist"))
                           (assoc (getvar "cannoscale")
                                  (mapcar '(lambda (x)
                                             (mapcar
                                               '(lambda (a)
                                                  (cdr (assoc a (entget (cdr x))))
                                                  ) ;_ end of lambda
                                               '(300 140 141)
                                               ) ;_ end of mapcar
                                             ) ;_ end of lambda
                                          (vl-remove-if-not '(lambda (x) (= (car x) 350)) dict)
                                          ) ;_ end of mapcar
                                  ) ;_ end of assoc
                         ) ;_ end of if
                       ) ;_ end of lambda
                     )
                    ) ;_ end of cadr
              ) ;_ end of setvar
      ) ;_ end of lambda
    ) ;_ end of function
  ) ;_ end of vl-catch-all-apply
Или
Код:
[Выделить все]
 (setvar "ltscale"
        (cond
          ((cadr ((lambda (/ dict)
                    (if (setq dict (dictsearch (namedobjdict) "acad_scalelist"))
                      (progn
                        (assoc (getvar "cannoscale")
                               (mapcar '(lambda (x)
                                          (mapcar
                                            '(lambda (a)
                                               (cdr (assoc a (entget (cdr x))))
                                               ) ;_ end of lambda
                                            '(300 140 141)
                                            ) ;_ end of mapcar
                                          ) ;_ end of lambda
                                       (vl-remove-if-not '(lambda (x) (= (car x) 350)) dict)
                                       ) ;_ end of mapcar
                               ) ;_ end of assoc
                        ) ;_ end of progn
                      ) ;_ end of if
                    ) ;_ end of lambda
                  )
                 ) ;_ end of cadr
           )
          (t (getvar "ltscale"))
          ) ;_ end of cond
        ) ;_ end of setvar
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.03.2012, 17:57
#8
smashik


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


Они изменяют ltscale на 1, а не в соответствии с cannoscale( В чем может быть ошибка?
smashik вне форума  
 
Непрочитано 20.03.2012, 19:52
#9
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


а так
Код:
[Выделить все]
(setvar "ltscale"
       (cond
         ((cadr ((lambda ( dict)
                       (assoc (getvar "cannoscale")
                              (mapcar '(lambda (x)
                                         (mapcar
                                           '(lambda (a)
                                              (cdr (assoc a (entget (cdr x))))
                                              ) ;_ end of lambda
                                           '(300 140 141)
                                           ) ;_ end of mapcar
                                         ) ;_ end of lambda
                                      (vl-remove-if-not '(lambda (x) (= (car x) 350)) dict)
                                      ) ;_ end of mapcar
                              ) ;_ end of assoc
                   ) ;_ end of lambda
                  (dictsearch (namedobjdict) "acad_scalelist")
                 )
                ) ;_ end of cadr
          )
         (t (getvar "ltscale"))
         ) ;_ end of cond
       ) ;_ end of setvar
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 20.03.2012, 21:22
#10
smashik


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


Увы, тоже на единицу изменяет ltscale.
smashik вне форума  
 
Непрочитано 20.03.2012, 21:31
#11
Кулик Алексей aka kpblc
Moderator

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


А установлен-то какой масштаб аннотаций? И работаешь в пространстве модели?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.03.2012, 21:46
#12
smashik


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


Работаю в пространстве модели, масштаб аннотаций установлен 1:15.
Команда: get-scale-values1
("1:15" 1.0 15.0)
Т.е. масштаб находится правильно.
Изменяю ltscale на любое значение, после выполнения кодов с постов 7, 9 получается
Команда: (LOAD "C:/Users/Desktop/ltscale.lsp") 1.0
smashik вне форума  
 
Непрочитано 20.03.2012, 21:51
1 | #13
Кулик Алексей aka kpblc
Moderator

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


Понятно... Я ступил, и следом ошибка пошла...
Переделанный вариант от VVA:
Код:
[Выделить все]
(setvar "ltscale"
       (cond
         ((last ((lambda ( dict)
                       (assoc (getvar "cannoscale")
                              (mapcar '(lambda (x)
                                         (mapcar
                                           '(lambda (a)
                                              (cdr (assoc a (entget (cdr x))))
                                              ) ;_ end of lambda
                                           '(300 140 141)
                                           ) ;_ end of mapcar
                                         ) ;_ end of lambda
                                      (vl-remove-if-not '(lambda (x) (= (car x) 350)) dict)
                                      ) ;_ end of mapcar
                              ) ;_ end of assoc
                   ) ;_ end of lambda
                  (dictsearch (namedobjdict) "acad_scalelist")
                 )
                ) ;_ end of cadr
          )
         (t (getvar "ltscale"))
         ) ;_ end of cond
       ) ;_ end of setvar
Мой вариант:
Код:
[Выделить все]
(setvar "ltscale"
       (cond
         ((last ((lambda (/ dict)
                   (if (setq dict (dictsearch (namedobjdict) "acad_scalelist"))
                     (progn
                       (assoc (getvar "cannoscale")
                              (mapcar '(lambda (x)
                                         (mapcar
                                           '(lambda (a)
                                              (cdr (assoc a (entget (cdr x))))
                                              ) ;_ end of lambda
                                           '(300 140 141)
                                           ) ;_ end of mapcar
                                         ) ;_ end of lambda
                                      (vl-remove-if-not '(lambda (x) (= (car x) 350)) dict)
                                      ) ;_ end of mapcar
                              ) ;_ end of assoc
                       ) ;_ end of progn
                     ) ;_ end of if
                   ) ;_ end of lambda
                 )
                ) ;_ end of cadr
          )
         (t (getvar "ltscale"))
         ) ;_ end of cond
       ) ;_ end of setvar
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.03.2012, 21:55
#14
smashik


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


Спасибо, работает.
smashik вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > как извлечь вещественное число?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Autolisp Как узнать, что число четное Zaghim LISP 8 19.11.2010 10:56
ГОСТ Р 53231-2008 UnyqUm Поиск литературы, чертежей, моделей и прочих материалов 5 15.09.2009 14:41
Умножение цифр в выбранных мтекстах на некое число Red Nova Программирование 7 23.11.2008 22:28
Как дать лиспу число? Димас LISP 7 15.04.2005 10:34