Когда команда AutoCAD STRETCH
выдает подсказку для выбора объектов, выбранных с использованием окна пересечения (пересекающего сегменты, которые должны быть растянуты), подсказка является стандартной подсказкой выбора, и впоследствии команда STRETCH
получитинформация о том, как выбор был получен таким же образом, как вы могли бы использовать функцию AutoLISP ssnamex
.
В связи с этим, я бы предложил предоставить команде STRETCH
набор выбора, который уже был получен с использованиемметод выбора окна пересечения.
Например, вы можете определить такую функцию, как:
(defun mystretch ( dis / pt1 pt2 sel )
(while
(and
(setq pt1 (getpoint "\nSpecify first point of crossing window: "))
(setq pt2 (getcorner pt1 "\nSpecify opposite point of crossing window: "))
(not (setq sel (ssget "_C" pt1 pt2)))
)
(princ "\nNo objects were found within the crossing window.")
)
(if sel
(progn
(command "_.stretch" sel "" "_non" '(0 0) "_non" (list 0 dis))
t
)
)
)
Затем вы можете оценить вышеуказанную функцию с расстоянием, на которое вы хотите растянуть объекты. направление Y, например:
(mystretch 10.0)
Или, используя переменные в вашем коде:
(mystretch d)
(mystretch e)
Затем функция вернет t
(True), если пользователь предоставилдве действительные точки и введена команда STRETCH
- вы можете проверить это в своей программе, прежде чем продолжить.
Используя этот подход, вы можете убедиться, что пользователь предоставил две точки, определяющие окно пересечения, которое пересекает один или несколько объектов до , для выдачи команды AutoCAD STRETCH
.
Использованиестрока ssget
режима пересечения (C
) также гарантирует, что вы всегда вводите команду STRETCH
, полученную с использованием метода выбора пересечения.
Вы также можете обратиться к этот ответ относительно использования модификатора привязки объекта _non
, а также префикса команды _.
в приведенном выше примере кода.