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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Команда _STRETCH

Команда _STRETCH

Ответ
Поиск в этой теме
Непрочитано 17.11.2008, 12:10 #1
Команда _STRETCH
Ева
 
Воронеж
Регистрация: 01.04.2008
Сообщений: 40

Подскажите, пожалуйста, как решить такую проблему. Есть код, с использованием функции _stretch.

(setq t1 (getpoint "\n Первый угол : "))
(setq t2 (getcorner t1 "\n Второй угол : "))
(command "_stretch" "_C" t1 t2 "_R") ;;; до исключения объектов
(while (> (getvar "CMDACTIVE") 0)(command pause))
(setq sposob (getint "\n Введите что-нибудь"))

во время выполнения самой команды ее стандартные запросы -Укажите объекты для исключения,Базовая точка и тд не показываются. Как можно настроить работу команды в обычном порядке? с запросами и тд. Далее в программе необходимо выполнение команды в след виде:
(command "_stretch" "_C" t1 t2 "_R" pnt1 pnt2) ;;; pnt1-базовая точка
;;; pnt2-точка смещения
(command "_stretch" "_C" t1 t2 "_R" pnt) ;;; pnt -базовая точка
При передаче таких данных команда также работает с ошибками. Помогите, пожалуйста, разобраться в проблеме!
Просмотров: 5648
 
Непрочитано 17.11.2008, 12:14
#2
Profan


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


Установите переменную "CMDECHO" в 1.
Profan вне форума  
 
Автор темы   Непрочитано 17.11.2008, 12:17
#3
Ева


 
Регистрация: 01.04.2008
Воронеж
Сообщений: 40
<phrase 1=


Цитата:
Сообщение от Profan Посмотреть сообщение
Установите переменную "CMDECHO" в 1.
установила, ничего не изменилось
Ева вне форума  
 
Непрочитано 17.11.2008, 12:22
#4
Profan


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


Стандартные запросы команды "_STRETCH" не отображаются в командной строке? А весь код можете привести?
Profan вне форума  
 
Автор темы   Непрочитано 17.11.2008, 12:26
#5
Ева


 
Регистрация: 01.04.2008
Воронеж
Сообщений: 40
<phrase 1=


а это и есть весь код:
(setq t1 (getpoint "\n Первый угол : "))
(setq t2 (getcorner t1 "\n Второй угол : "))
(command "_stretch" "_C" t1 t2 "_R") ;;; до исключения объектов
(while (> (getvar "CMDACTIVE") 0)(command pause))
(setq sposob (getint "\n Введите что-нибудь"))
Если не использовать оператор while, те без строки (while (> (getvar "CMDACTIVE") 0)(command pause)), то
при отработке функции _stretch после выделения рамкой объектов происходит вызов запроса (setq sposob (getint "\n Введите что-нибудь")). После ввода какого либо числа на запрос, функция _stretch продолжает работу — те запрашивает объекты на исключение. так что опять появляется ошибка только другого рода.
Ева вне форума  
 
Автор темы   Непрочитано 17.11.2008, 12:37
#6
Ева


 
Регистрация: 01.04.2008
Воронеж
Сообщений: 40
<phrase 1=


Забыла уточнить, использую Bricscad, проверила данный код с "CMDECHO" = 1 в Autocad, все работает Подскажите пожалуйста как правильно передать данные в двух последних случаях(с точками), чтобы отображались запросы и не выводился запрос с getint.
Ева вне форума  
 
Непрочитано 17.11.2008, 12:42
#7
Profan


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


Цитата:
(command "_stretch" "_C" t1 t2 "_R")
Вообще-то, выбор объектов надо заканчивать "".
Опции "_R" у команды "_STRETCH" нет.
Profan вне форума  
 
Автор темы   Непрочитано 17.11.2008, 12:45
#8
Ева


 
Регистрация: 01.04.2008
Воронеж
Сообщений: 40
<phrase 1=


команда не закончена, ее должен закончить пользователь. Опция _R у команды _stretch означает - указать объекты для исключения из набора
Ева вне форума  
 
Непрочитано 17.11.2008, 13:01
#9
Profan


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


Действительно, есть "_R", но это относится к выбору объектов...
Profan вне форума  
 
Непрочитано 17.11.2008, 13:35
#10
VVA

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


Ева, Откуда берутся точки pnt1 и pnt2? Кто и какие значения в них задает?
Повторяю вопрос отсюда:
Цитата:
Напиши по пунктам словами что нужно сделать?
PS. Указывать что делаешь в Bricscad нужно сразу
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 17.11.2008, 13:47
#11
Ева


 
Регистрация: 01.04.2008
Воронеж
Сообщений: 40
<phrase 1=


нужно написать программу, которая бы растягивала объекты одним из 3х способов.
1. обычно через задание базовой точки и точки смещения (но обязательно используя опцию _R, тк вначале пользователь выделяет объекты а потом должен иметь возможность удалить неправильно выбранные) через командную строку.
2. выделяется область (с нужными объектами)и задается расстояние в командной строке на которое нужно растянуть объекты. И сразу же должно произойти растяжение. Те программно расчитываются через заданное расстояние и точки выбранной области базовая точка и точка смещения.Тут необходимо использовать команду в виде (command "_stretch" "_C" t1 t2 "_R" pnt1 pnt2) ;;; pnt1-базовая точка
;;; pnt2-точка смещения
3. также выбирается область и базовая точка высчитывается в программе как средняя между точками, определяющими область. Те тут используется команда в виде
(command "_stretch" "_C" t1 t2 "_R" pnt) ;;; pnt -базовая точка
Ева вне форума  
 
Непрочитано 17.11.2008, 14:08
#12
VVA

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


п.1
Код:
[Выделить все]
(setvar "cmdecho" 1)
(setq t1 (getpoint "\n Первый угол : "))
(setq t2 (getcorner t1 "\n Второй угол : "))
  (setq t1 (getpoint "\n Первый угол : "))
  (setq t2 (getcorner t1 "\n Второй угол : "))
  (setq ss (ssget "_C" t1 t2))
  (command "_.SELECT" ss "_R")
  (while (> (getvar "CMDACTIVE") 0)(command pause))
  (setq ssR (ssget "_P"))
  (setq i 0)
  (while (setq e1 (ssname ss i))
    (if (not (ssmemb e1 ssR))
       (ssdel e1 ss)
      (setq i (1+ i))
      )
    )
  (setq ssR nil)
 (command "_stretch" ss "")
п.2
Код:
[Выделить все]
  (setvar "cmdecho" 1)
  (setq t1 (getpoint "\n Первый угол : "))
  (setq t2 (getcorner t1 "\n Второй угол : "))
  (setq ss (ssget "_C" t1 t2))
  (command "_.SELECT" ss "_R")
  (while (> (getvar "CMDACTIVE") 0)(command pause))
  (setq ssR (ssget "_P"))
  (setq i 0)
  (while (setq e1 (ssname ss i))
    (if (not (ssmemb e1 ssR))
       (ssdel e1 ss)
      (setq i (1+ i))
      )
    )
  (setq ssR nil)
  (initget 1)
  (setq dst (getdist "\nУкажите расстояние: "))
  (command "_stretch" ss "" t1 (polar t1 0 dst))
п.3 По образу и подобию
PS. Тестировал на Автокаде
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 17.11.2008, 14:19
#13
Ева


 
Регистрация: 01.04.2008
Воронеж
Сообщений: 40
<phrase 1=


При передаче в команду _stertch набора произойдет только перемещение оьбъектов, а не растяжение. Тк объекты входят целиком. Для того чтобы произошло растяжение необходимо выделить рамкой, передавая в команду 2 точки(t1,t2) -для выбора рамкой.
Из справки Autocad: Выбрать объекты секущей рамкой или секущим многоугольником и нажать ENTER . Отдельно выделенные объекты и объекты, которые полностью включены в секущую рамку, перемещаются, а не растягиваются.
Ева вне форума  
 
Непрочитано 17.11.2008, 15:11
#14
VVA

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


Ева, Так произойдет или происходит?
Справка верна для "ручной" работы. Набор, соpданный ssget "запоминает" способ указания объектов, узнать который можно с помощью функции ssnamex
Соответственно справка из Autolisp'a (выделено мной)
Цитата:
(ssnamex ss [index])
Retrieves information about how a selection set was created
Я не зря выделил жирным PS в #12. Эти лиспы я тестировал на Автокаде и они ведут себя правильно (по крайней мере так как я понят твое ТЗ). По поводу BricsCad ничего обещать не могу. Пробуй.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 17.11.2008, 15:27
#15
Ева


 
Регистрация: 01.04.2008
Воронеж
Сообщений: 40
<phrase 1=


VVA, действительно, В Autocad все работает Пробовала в Bricscad, здесь не идет, тк команда вообще не понимает передачу набора, только точки рамки. Может быть есть решение и для случая передачи точек рамки в команду?
Ева вне форума  
 
Непрочитано 17.11.2008, 16:06
#16
Profan


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


Вот такая конструкция работает в BricsCAD 9.1
Код:
[Выделить все]
 
(defun C:TEST ( / echo t1 t2) )
(setq echo (getvar "CMDECHO"))
(setvar "CMDECHO" 1)
(setq t1 (getpoint "\n Первый угол : "))
(setq t2 (getcorner t1 "\n Второй угол : "))
(command "_stretch" "_C" t1 t2 "_R")
(setvar "CMDECHO" echo)
(princ)
)
Profan вне форума  
 
Автор темы   Непрочитано 17.11.2008, 16:17
#17
Ева


 
Регистрация: 01.04.2008
Воронеж
Сообщений: 40
<phrase 1=


Profan, да, это работает. Но требуется использование команды типа:
(command "_stretch" "_C" t1 t2 "_R" pnt1 pnt2) ;;; pnt1-базовая точка
;;; pnt2-точка смещения
(command "_stretch" "_C" t1 t2 "_R" pnt) ;;; pnt -базовая точка

Где точки pnt1,pnt2,pnt -высчитываются определенным образом внутри программы через t1 и t2. Каким образом можно передать в команду _stretch c опцией _R базовую точку и точку смещения (pnt1,pnt2)?
Ева вне форума  
 
Непрочитано 17.11.2008, 16:23
#18
Profan


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


Ну, допустим, базовая точка - это t1...
Profan вне форума  
 
Автор темы   Непрочитано 17.11.2008, 16:25
#19
Ева


 
Регистрация: 01.04.2008
Воронеж
Сообщений: 40
<phrase 1=


Profan, t1 и t2 - точки, определяющие рамку для выбора объектов.
Ева вне форума  
 
Непрочитано 17.11.2008, 16:44
#20
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
(defun test1 (/ pt1 pt2)

  (if (and (= (type (setq pt1 (vl-catch-all-apply
                                (function
                                  (lambda ()
                                    (getpoint "\nПервый угол <Отмена> : ")
                                    ) ;_ end of lambda
                                  ) ;_ end of function
                                ) ;_ end of vl-catch-all-apply
                          ) ;_ end of setq
                    ) ;_ end of type
              'list
              ) ;_ end of =
           pt1
           (= (type
                (setq pt2 (vl-catch-all-apply
                            (function
                              (lambda ()
                                (getcorner pt1 "\nВторой угол <Отмена> : ")
                                ) ;_ end of lambda
                              ) ;_ end of function
                            ) ;_ end of vl-catch-all-apply
                      ) ;_ end of setq
                ) ;_ end of type
              'list
              ) ;_ end of =
           (not (equal pt1 pt2 1e-3))
           ) ;_ end of and
    (progn
      (command "_.stretch" "_c" pt1 pt2 "_r")
      (while (/= (getvar "cmdactive") 0)
        (command pause)
        ) ;_ end of while
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of defun
BricsCAD 8.2.11.11749 - работает вроде бы...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Команда _STRETCH

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
DwgRuLispLib: Команда. Загрузка lisp файлов из указанной папки VVA Библиотека функций 7 15.02.2018 10:10
Преобразование полей в текст YuraVel AutoCAD 17 14.04.2015 14:30
Команда, чтобы заимствовать свойства (обратная MATCHPROP)? I.Van AutoCAD 2 05.08.2007 21:09
ACAD-2002. Глюк начальной загрузки ЛИСП? ===AAA=== LISP 27 31.08.2005 07:58