|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Заметил на форуме ShaggyDoc
![]() (defun C:OTV (/ ang P1 P2 P3 P4 P5 P6 D Rdug) (initget 1) (setq P1 (getpoint "\nНачальная точка:")) (setq ang (getorient P1 "\nУкажите направление отвода:")) (setq D (getdist "\nДиаметр отвода:")) (setq Rdug (getdist "\nРадиус отвода:")) (setq Rv (- Rdug (* 0.5 D))) (setq Rn (+ Rdug (* 0.5 D))) (setq Dist1 (sqrt (* 2 Rv Rv))) (setq Dist2 (sqrt (* 2 Rn Rn))) (setq P2 (polar P1 (+ ang (* 0.5 pi)) (* 0.5 D))) (setq P3 (polar P2 (+ ang (* 0.25 pi)) Dist1)) (setq P4 (polar P3 ang (* 0.5 D))) (setq P5 (polar P4 ang (* 0.5 D))) (setq P6 (polar P5 (+ ang (* 1.25 pi)) Dist2)) (Command "_.PLine" P1 P2 "_A" "_R" Rv P3 "_L" P5 "_A" "_R" Rn "_ANG" -90 P6 "_L" P1 "_A" "_R" Rdug P4 "" ) (princ) ) Теперь отвод рисуется по любой оси. Вот как его покрутить вверх вниз? Из функции ввода данных я уже одну использовал, getorient. Осталась getangle.. пойдет? Чота у меня ничерта не получается, отупел совсем ![]() |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Рyslan, книжку-то ты не прочитал... Картинки только посмотрел. Иначе не делал бы подряд 4 незащищенных от ошибок GETxxx... Но это к слову.
Ты же за деревьями леса не видишь. Вот зачем спрашиваешь каждый раз диаметр и радиус? И в "бою" так же будешь, по 100 раз в час? Вынеси их в аргументы функции, не делай её "командой". Например, так: Код:
Теперь легче будет с геометрией. А что для геометрии отвода надо: 1. Начальная точка на оси трубы 2. Направление трубы - точка, а не угол. 3. В какую сторону (влево или вправо от направления) рисовать отвод. Это можно или получить запросом еще одной точки или, более примитивно, нарисовать отвод в любую сторону, а потом спросить "Отзеркалить?" и, если надо, сделать MIRROR для отвода и его оси. Для удобства надо отделить ввод данных от самого рисования. То есть расширить объявление функции рисования наподобие: Код:
Цитата:
|
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Код:
Shaggy_Doc, ну как? Вот как отзеркалить? после рисования ввести запрос на зеркало? Давай замечания свои, даже если ты уже говорил об этом. До меня пока дойдет ![]() Последний раз редактировалось Кулик Алексей aka kpblc, 21.02.2009 в 11:11. Причина: Code не забывай |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Рyslan, а программа в таком виде (то, что в закрытой ветке) не может правильно рисовать. Прилагаю картинку - черные отводы. Видишь, что получается? И это на пустом месте, а что будет, если ещё обстановка нарисована. Догадаешься, почему?
Ты тестируешь, чтобы доказать себе - "Ура! Заработало!". А надо в реальных условиях, и тогда оказывается, что не работает. Или работает, но не так. Да и осевая линия тоненькая должна быть, и тип у нее свой должен быть. Мелочь, но радикально изменяет всё рисование Вот попробуй нарисовать, как на второй картинке - красной. Нарисуй как-нибудь прямой участок, а от него построй скобу из своих отводов. Чтоб как на этой картинке. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426
|
Offtop: Рyslan, про "кучу балбесов" и прочую муть - пальцем покажи. Точнее, ссылки. В ПМ, чтобы не загрязнять тему.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
1. Почему рисует неправильно? Да ты не то, что в книжке - в этой ветке не прочитал, что при рисовании функцией command надо отключать привязки. А потом восстанавливать. Первая и самая распространенная ошибка. 2. Ты по-прежнему принципиально неверно ввод организуешь. Ну как пользователь может точно указать "направление отвода"? Как он поймет, что это такое? Отвод-то как раз изменяет направление трассы. А как ввести угол? Вот есть конец ранее нарисованной трубы, к середине торца можно привязать начальную точку, а дальше? Как ты укажешь "направление отвода", чтобы потом отвод правильно нарисовался "приварившись" к концу трубы? 3. А разве отводы только 90 градусов бывают? А 30, 45, 60, да и 180 может быть. А разве радиус только 1.5 Д? В данном варианте ты геометрию рассчитываешь под конкретный вариант, а она должна быть функцией от диаметра, центрального угла и радиуса. Тогда и все расчеты точек иначе будут. 4. Осевую линию, конечно надо отдельно делать, всегда тонкую (LWDEFAULT), а "края" - с текущим весом линии. Кстати, никакой гарантии нет, что во время рисования PLINE у неё не будет какая-то ненужная тебе физическая ширина. Значит надо и Width принудительно устанавливать. 5. А попробуй просто вручную нарисовать отвод полилинией - сначала в одну сторону, а потом в другую. Увидишь, что он вообще не нарисуется. Чтобы правильно рисовалась дуга отвода, её надо начинать не от угла, надо сделать маленькое плечико (например 1 ед) и только тогда можно дугу сделать по точкам. Плечики, конечно, на обеих концах, а это точки дополнительные. Всё это должно решаться на этапе постановки задачи. Ты её сам себе ставишь, наверняка знаешь, как отводы рисуются, та подумай немного заранее. А код, кода всё понятно, проще всего написать. Это первый раз кажется сложно. Ты же освоил главную функцию для черчени - polar. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426
|
ShaggyDoc, по-моему, объектными средствами (да и через entmakex) можно создать любую полилинию. Я не работал с отводами, но вот, как вариант (точки жестко заданы, высчитывать их лениво):
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Инженеру command понятна, а вот DXF-коды - тёмный лес поначалу. В AddArc(Center, Radius, StartAngle, EndAngle) - замучаешься эти углы вычислять, да еще с учётом ПСК. А так, оно конешно, можно. |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
(defun c:OTVOD (/ p1 p2 p3 p4 p5 p6 ang) при таком виде локальных переменных ввод данных появляется в командной строке
(defun c:OTVOD (centr_ang D Rdug / p1 p2 p3 p4 p5 p6 ang) при таком- нет почему? вроде объявляю слева аргументы, справа локальные переменные...хмм и вообще, чем в автолиспе аргументы отличаются от переменных? насколько помню из математики x-аргумент или переменная, y-функция. еще про привязки хотел спросить, зачем их выключать? когда потом точку вводишь приходится снова привязку включать |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426
|
что и где появляется - вообще-то регулируется кодом, прописанным в функции.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426
|
Ок, расскажу как я сам понимаю. Возможно, это и неверно.
Есть в лиспе "нормальные функции", а есть "оформленные как команды" (с префиксом с:). Первые нормально воспринимают такое понятие, как аргументы. Вторые - не всегда. Если честно, я стараюсь не делать команд с аргументами вызова, хотя и видел корректно работающие коды команд с аргументами. Теперь о вызове. Если есть Код:
Код:
Код:
Код:
Код:
Код:
Для варианта команды Код:
Код:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Просто не надо никогда создавать C:-функции (псевдокоманды) с аргументами.
Цитата:
|
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Привет Алексей и Shaggy_Doc! Да, я читал что defun C: Отвод (), а можно defun Отвод (). Первый вариант удобен для создания кнопки, про второй не знаю, можно ли макрос для него создать. Vlide постоянно мне пишет- maloformed list on input, когда проверяю выделеный фрагмент тела функции с переменными и аргументами. Вчера зашел на сайт Толстобы Н, там прочел, что обычно maloformed list on input озночает, что скобки неправильно расставлены или не хватает. Скобки проверяю, вроде все правильно. Сегодня взял лисп чужой, где-то скачал до этого, так же проверил выделеный фрагмент тела функции с переменными- maloformed list on input. Ну вообщем сегодня весь день туда сюда тасовал и вроде заработало. Правда у меня все равно получается 4 ввода, 1) ввожу центральный угол 45/60/90 2)Ввожу диаметр отвода из списка 3) Начальная точка 4) Точка на оси трубы. Привязки поставил. Осевую на слой 0 не получается подгрузить из linetype, поэтому создал слой Center и после рисования меняю осевую. Shaggy_Doc, будешь опять ругаться
![]() ![]() Код:
Последний раз редактировалось Рyslan, 03.03.2009 в 18:32. |
|||
![]() |