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

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

Помогите разобраться с ошибкой

Ответ
Поиск в этой теме
Непрочитано 11.12.2007, 15:19 #1
Помогите разобраться с ошибкой
Василич
 
Екатеринбург
Регистрация: 19.07.2007
Сообщений: 32

Доброго вечера!
Нашел учебник по Лиспу. Смотрю пример. Задача должна рисовать10 кругов и квадратов вписанных друг в друга. Подскажите, в чем ошибка?
Код:
[Выделить все]
(defun ceq ()
  (setvar "cmdecho" 0)
  (setvar "osmode" 0)
  (command "ucs" "")
  (command "ucsicon" "off")
  (command "erase" "all")
  (setq pnt (getpoint "Укажите центр фигуры "))
  (setq dstn (getdist pnt "Укажите начальный радиус "))
    (repeat 10
    (command "circle" pnt dstn "")
    (command "polygon" "4" pnt "i" dstn)
    (setq dstn (/ dstn (sqrt 2)))
    )
  )
Это результат:

Command: (ceq) Укажите центр фигуры 0,0,0
Укажите начальный радиус 15


*Invalid selection*
Expects a point or
Window/Last/Crossing/BOX/ALL/Fence/WPolygon/CPolygon/Group/CLass
; error: Function cancelled

Select objects: *Cancel*

Command:
Command: _ai_selall Selecting objects...done.
Просмотров: 3758
 
Непрочитано 11.12.2007, 15:36
#2
Кулик Алексей aka kpblc
Moderator

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


Вариант 2:
Код:
[Выделить все]
(defun mceq (/ pt dist)
  (if (and (setq pt (getpoint "\nУкажите центр : "))
           (setq dist (getdist pt "\nУкажите начальный радиус : "))
           ) ;_ end of and
    (repeat 10
      (entmakex (list (cons 0 "CIRCLE")
                      (cons 10 pt)
                      (cons 40 dist)
                      ) ;_ end of list
                ) ;_ end of entmakex
      (entmakex (append (list (cons 0 "LWPOLYLINE")
                              (cons 100 "AcDbEntity")
                              (cons 100 "AcDbPolyline")
                              (cons 90 4)
                              (cons 70 1)
                              (cons 43 0.)
                              (cons 38 0.)
                              (cons 39 0.)
                              ) ;_ end of list
                        (mapcar '(lambda (x) (cons 10 x))
                                (list (polar pt 0. dist)
                                      (polar pt (/ pi 2.) dist)
                                      (polar pt pi dist)
                                      (polar pt (* pi 1.5) dist)
                                      ) ;_ end of list
                                ) ;_ end of mapcar
                        ) ;_ end of append
                ) ;_ end of entmakex
      (setq dist (/ dist (sqrt 2.)))
      ) ;_ end of repeat
    ) ;_ end of if
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 11.12.2007 в 16:50. Причина: Удалил неверный вариант кода.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.12.2007, 15:38
#3
Profan


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


Правильный код:
Код:
[Выделить все]
 
(defun ceq ()
(setvar "cmdecho" 0)
(setvar "osmode" 0)
(command "ucs" "")
(command "ucsicon" "off")
(command "erase" "all" "")
(setq pnt (getpoint "Укажите центр фигуры "))
(setq dstn (getdist pnt "Укажите начальный радиус "))
     (repeat 10
           (command "circle" pnt dstn)
           (command "polygon" "4" pnt "i" dstn)
           (setq dstn (/ dstn (sqrt 2)))
      )
)
Но сама программа "неправильная".
Profan вне форума  
 
Непрочитано 11.12.2007, 15:44
#4
Дима_

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


Еще один неправильный но работает:
Код:
[Выделить все]
(defun ceq ()
  (setvar "cmdecho" 0)
  (setvar "osmode" 0)
  (command "_ucs" "")
  (command "_ucsicon" "_off")
  (command "_erase" "_all" "")
  (setq pnt (getpoint "Укажите центр фигуры "))
  (setq dstn (getdist pnt "Укажите начальный радиус "))
    (repeat 10
    (command "_circle" pnt dstn)
    (command "_polygon" 4 pnt "_i" dstn)
    (setq dstn (/ dstn (sqrt 2)))
    )
  )
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 11.12.2007, 15:44
#5
Кулик Алексей aka kpblc
Moderator

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


Кстати, вариант с "горизонтальным" положением квадрата:
Код:
[Выделить все]
(defun mceq (/ pt dist)
  (if (and (setq pt (getpoint "\nУкажите центр : "))
           (setq dist (getdist pt "\nУкажите начальный радиус : "))
           ) ;_ end of and
    (repeat 10
      (entmakex (list (cons 0 "CIRCLE")
                      (cons 10 pt)
                      (cons 40 dist)
                      ) ;_ end of list
                ) ;_ end of entmakex
      (entmakex (append (list (cons 0 "LWPOLYLINE")
                              (cons 100 "AcDbEntity")
                              (cons 100 "AcDbPolyline")
                              (cons 90 4)
                              (cons 70 1)
                              (cons 43 0.)
                              (cons 38 0.)
                              (cons 39 0.)
                              ) ;_ end of list
                        (mapcar '(lambda (x) (cons 10 x))
                                (list (polar pt (* pi 0.25) dist)
                                      (polar pt (* pi 0.75) dist)
                                      (polar pt (* pi 1.25) dist)
                                      (polar pt (* pi 1.75) dist)
                                      ) ;_ end of list
                                ) ;_ end of mapcar
                        ) ;_ end of append
                ) ;_ end of entmakex
      (setq dist (/ dist (sqrt 2.)))
      ) ;_ end of repeat
    ) ;_ end of if
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.12.2007, 16:13
#6
Profan


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


Дима_ зачем-то повторил мой вариант. Или я не заметил различий?
Profan вне форума  
 
Автор темы   Непрочитано 11.12.2007, 16:18
#7
Василич


 
Регистрация: 19.07.2007
Екатеринбург
Сообщений: 32


2 Profan, Дима_
А в чем неправильность? Я только второй день разбираюсь.
Василич вне форума  
 
Непрочитано 11.12.2007, 16:19
#8
Дима_

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


Просто вставил свой и не посмотрел что ты меня опередил - отличие в _ и "4" в полигоне - сути не менят, на копирайт не претендую
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 11.12.2007, 16:23
#9
Дима_

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


Василичу - устарелый метод работы, но наиболее легкий для понимания, по сути мы просто вызываем команды акада с параметрами - быстро пишется но долго работает, хотя в данном примере наверное не принципиально. Вот у Крыса создается на уровне примитивов, это высший пилотаж, я бы такую-же 2 дня писал.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 11.12.2007, 16:26
#10
VVA

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


Твой вариант
(command "erase" "all")
Вариант Дима_
(command "_erase" "_all" "")
Команды и опции команд в command личшу писать в английском варианте предворяя префиксом _ (будет работать в любой локализованной версии)(см. #4)
Символ "" в command означает Enter
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 11.12.2007, 16:38
#11
Profan


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


Да еще переменные остаются глобальными, да еще нет возврата к исходному состоянию переопределенных системных переменных...
Profan вне форума  
 
Автор темы   Непрочитано 12.12.2007, 07:12
#12
Василич


 
Регистрация: 19.07.2007
Екатеринбург
Сообщений: 32


Доброго всем утра!
Вот этот оператор:
Код:
[Выделить все]
     (entmakex (list (cons 0 "CIRCLE")
                      (cons 10 pt)
                      (cons 40 dist)
                      ) ;_ end of list
                ) ;_ end of entmakex
Что означают эти цифры? Откуда и по какому принципу берутся эти значения?

Про команды с префиксом, такая же мысль дома вечером пришла

Последний раз редактировалось Кулик Алексей aka kpblc, 12.12.2007 в 08:10.
Василич вне форума  
 
Непрочитано 12.12.2007, 08:10
#13
Кулик Алексей aka kpblc
Moderator

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


DXF Reference, объект CIRCLE:
10 - координаты центра окружности
40 - радиус создаваемой окружности.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.12.2007, 09:46
#14
VVA

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


>Василич На всякий случай, т.к. здесь озвучено не было. В Автокаде есть редактор Visual Lisp. Набери в командной строке VLIDE. Там много вкусностей
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 12.12.2007, 10:53
#15
Василич


 
Регистрация: 19.07.2007
Екатеринбург
Сообщений: 32


>VVA
я VLISP набираю, в чем отличие?
Василич вне форума  
 
Непрочитано 12.12.2007, 11:13
#16
Profan


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


VLIDE используется для передачи управления Visual LISP. Назначение этой команды аналогично назначению команды VLISP.
Profan вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Помогите разобраться с ошибкой

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться с армированием фундаментной плиты Жека Основания и фундаменты 49 10.09.2013 10:32
ANSYS 10 Помогите разобраться. Aндрeй ANSYS 6 12.12.2007 00:03
Помогите разобраться с расчетом сваи kt133a Основания и фундаменты 6 19.10.2007 07:43
Помогите разобраться c AutoPlant aiver Прочее. Программное обеспечение 2 30.06.2006 07:51