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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Загадочная линия нулевой длины

Загадочная линия нулевой длины

Ответ
Поиск в этой теме
Непрочитано 26.06.2004, 05:22 #1
Загадочная линия нулевой длины
Vova
 
Engineer
 
New-York
Регистрация: 05.09.2003
Сообщений: 10,288

Сделайте следующее:
Командoй Line начните отрезок от произвольной точки. Далее введите
'cal и нажмите Enter.
>>Extression: Введите p1=@ В командной строке появятся координаты точки и приглашение - Specify next point. Закончите отрезок. В принципе мы ничего не сделали плохого, только запомнили попутно координаты начала отрезка при помощи функции калькулятора.
Теперь введите команду Pline и все повторите. Теперь выделите левой рамкой только начала отрезка и полилинии, не захватывая всей их длины. Увидели разницу? В начале отрезка появилась ручка, а в начале полилинии ее нет. В этой ручке сидит отрезок нулевой длины, можно проверить листом или пропертями. Теперь все повторите с командой Arc. Дуга почему-то не строится, Rectangle тоже.
Кто знает, почему так по-разному получается? Это не задача, я и сам не знаю. Программисты, попробуйте повторить опыт с выражениями ЛИСП. Каков будет результат?
Просмотров: 6993
 
Непрочитано 26.06.2004, 11:07
#2
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


В результате опыта получается отрезок с совпадающими, начальной и конечной точками:
Код:
[Выделить все]
((-1 . <Entity name: 7ef51e90>) (0 . "LINE") (330 . <Entity 
name: 7ef51cf8>) (5 . "82") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . 
"0") (100 . "AcDbLine") (10 343.148 244.563 0.0) (11 343.148 244.563 0.0) (210 
0.0 0.0 1.0))
Обратите внимание на DXF-группы 10 и 11.

С полилинией ничего не получилось, она у меня нормальная:
Код:
[Выделить все]
Command: _pline
Specify start point:
Current line-width is 0.0000
Specify next point or [Arc/Halfwidth/Length/Undo/Width]: 'cal
>> Expression: p1=@
(716.115 131.141 0.0)

Specify next point or [Arc/Close/Halfwidth/Length/Undo/Width]:
Specify next point or [Arc/Close/Halfwidth/Length/Undo/Width]:
Specify next point or [Arc/Close/Halfwidth/Length/Undo/Width]:
Specify next point or [Arc/Close/Halfwidth/Length/Undo/Width]:
Т. е. при попытке отметить конец не захватывая всю полилинию ничего не отмечается. DXF- тоже вроде нормальный:
Код:
[Выделить все]
((-1 . <Entity name: 7ef51ec8>) (0 . "LWPOLYLINE") (330 . 
<Entity name: 7ef51cf8>) (5 . "89") (100 . "AcDbEntity") (67 . 0) (410 . 
"Model") (8 . "0") (100 . "AcDbPolyline") (90 . 5) (70 . 0) (43 . 0.0) (38 . 
0.0) (39 . 0.0) (10 716.115 131.141) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 
716.115 131.141) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 716.115 283.613) (40 . 
0.0) (41 . 0.0) (42 . 0.0) (10 932.513 283.613) (40 . 0.0) (41 . 0.0) (42 . 
0.0) (10 932.513 510.549) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0))
{Smirnoff} вне форума  
 
Непрочитано 27.06.2004, 02:07
#3
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Если честно, ничего не понял.... может быть я что то не так делаю, но никаких отрезков нулевой длины не получается. Хоть тресни.

А вот с полилинией - в натуре... получаются парные вершины.

Да, а в каком АКАДе Вы наблюдали сей глюк? Я в 2002 ковырялся....
vk вне форума  
 
Непрочитано 27.06.2004, 02:32
#4
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Покурил, подумал, перечитал лог....
Все верно! Команда 'cal не только запоминает в p1, а еще и возвращает в командную строку координаты точки @ в ответ на приглашение указать следующую точку.
С отрезками... ну да, сразу не догнал... выдается сообщение "Zero length line created at <координаты>" которым АКАД и уведомляет о таком казусе.
Rectangle строится!!! Обратите внимание на маааааленькую точку в @ - это не что иное как полилиния , у которой все четыре вершины имеют одну и ту же координату Нафига он такой нам нужен...
vk вне форума  
 
Автор темы   Непрочитано 27.06.2004, 06:45
#5
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Казалось бы, зачем все это? У меня есть кнопка, делающая разрыв трубы, такая кривая, похожая на неполную восьмерку. Я ее начинаю (в макросе) с отрезка. Запоминаю начало как точка Р1. Все нормально работает, а потом приспичило трубы подвинуть. А труб много. Короче, заметил что точки какие-то на экране. Мусор. Вот, разобрался, что это, заменил линию на полилинию и мусор исчез Но почему точки, то бишь отрезки нулевой длины, появляются?
Vova вне форума  
 
Непрочитано 27.06.2004, 06:58
#6
Startrek

AutoCAD/AutoLISP
 
Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133


Вот програмка для обрезания труб - как алтернатива твоей Vova

;==============================================
;By Leonid Nemirovsky 1995/97
;============================================
(defun cend (/ mode pt1 pt2 pt3 r rad)
(setq mode (getvar "osmode"))
(setvar "orthomode" 0)
(setvar "osmode" 1)
(princ "\nSelect points COUNTERCLOCKWISE....")
(setq pt1 (getpoint "\nSelect first point: "))
(if (= pt1 nil)(exit))
(setq pt2 (getpoint pt1 "\nSelect second point: "))
(if (= pt2 nil)(exit))
(setvar "osmode" 0)
(setvar "orthomode" 1)
(setq pt3 (polar pt1 (angle pt1 pt2)(/ (distance pt1 pt2) 2)))
(setq r (distance pt1 pt3))
(setq rad (/ r 1.6))
(command "arc" pt1 "e" pt3 "r" rad)
(command "arc" "" pt2)
(setq last (ssget "l"))
(command "mirror" last "" pt3 pt2 "n")
(setvar "osmode" mode)
(princ)
)
Startrek вне форума  
 
Непрочитано 27.06.2004, 23:40
#7
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
Сообщение от Vova
....Вот, разобрался, что это, заменил линию на полилинию и мусор исчез Но почему точки, то бишь отрезки нулевой длины, появляются?
Повторю еще раз.... Внимательно читаем лог и анализируем каждую строчку. Мои комментарии подчеркнуты.
Цитата:
Command: _line Specify first point: указываем первую точку
Specify next point or [Undo]: 'cal вместо указания второй точки вызываем калькулятор

Initializing...>> Expression: p1=@ присваиваем значение переменной p1. Собственно говоря, работа калькулятора на этом закончена...
(111.028 168.206 0.0) ...и он возвращает значение выражения p1=@, которое и было вычислено. АКАД берет это значение и.... подставляет его как ответ на предыдущий запрос "Specify next point or [Undo]: " когда мы вызывали 'cal
Zero length line created at (111.0281, 168.2062, 0.0000) Вот и получилось, что начальная и конечная точки совпадают

Specify next point or [Undo]: а здесь мы указываем вторую, хотя на самом деле уже ТРЕТЬЮ точку
Specify next point or [Close/Undo]: завершение команды - пробел

Command:
Можно попробовать хранить координату в переменной Лисп. Например так
Цитата:
Command: _line
Specify first point:
Specify next point or [Undo]: (progn (setq p1 (getvar "lastpoint")) (princ)) это Лисп-выражение не возвращает никакого значения

Specify next point or [Undo]: а здесь мы указываем натурально вторую точку
Specify next point or [Undo]: завершение команды - пробел
Как использовать сохраненное значение в p1? Например вот так
Цитата:
Command: point
Current point modes: PDMODE=0 PDSIZE=0.0000
Specify a point: !p1 вызываем значение Лисп-переменной
(226.516 158.822 0.0) Лисп вернул значение

Command:
Что касается полилинии, то в Вашем случае у нее появляется "двойная" вершина в начале. Это можно проверить теми же пропертями...
vk вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Загадочная линия нулевой длины

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