|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
20.05.2006, 00:52 | #1 | |
Осевые линии
Программист широкого профиля.
Челябинск
Регистрация: 08.09.2005
Сообщений: 722
|
||
Просмотров: 12025
|
|
||||
Регистрация: 20.07.2005
СПб
Сообщений: 89
|
Посмотри на http://dwg.ru/dwl/395
Отрисовка осей окружностей (дуг, эллипсов) и осевой линии при выборе отрезков, а если при первом диалоге правый клик то ось рисуется по двум точкам и концы выносятся на заданное расстояние |
|||
|
||||
могу ещё один вариант на ВБА - http://dwg.ru/dwl/153
если нужны будут какие то объяснения а может и новая версия (так, маленько чего добавлено), то я тоже из той же деревни.... пиши - найдёмся... |
||||
|
||||
Регистрация: 14.10.2005
Сообщений: 42
|
Уважаемые программисты, у меня такой вопрос: возможно ли в программе Axis_Den прописать зависимость масштаба осевой линии (параметр LineType Scale) от величины диаметра круга или от расстояния между двумя линиями. Т.е. чтобы величина LineType Scale вычислялась по определенной формуле и осевая линия получалась бы сразу гостированного вида?
|
|||
|
||||
инженер (КМ) Регистрация: 30.10.2004
Красноярск
Сообщений: 3,826
|
Цитата:
|
|||
|
||||
Регистрация: 20.07.2005
СПб
Сообщений: 89
|
rodion,
В последней версии "Axis_Den" "CELTSCALE" (коэффициент масштабирования для типа линий) меняется при малых длинах нарисованных осей (с учетом "LTSCALE"). Правда, рисую оси в "ACAD_ISO10W100" и, возможно, для использования других типов линий потребуется небольшая корректировка программы. |
|||
|
||||
Регистрация: 20.07.2005
СПб
Сообщений: 89
|
rodion,
Посмотрел ГОСТ: Длина штрихов 5...30, расстояние между ними 3...5. И примечание: Длину штрихов в штриховых и штрих-пунктирных линиях следует выбирать в зависимости от величины изображения. Поэтому загвоздка не в корректировке программы (это не сложно), я написать, как ты сказал, "определенную формулу" для этой зависимости. |
|||
|
||||
Регистрация: 14.10.2005
Сообщений: 42
|
To Денис Флюстиков,
Ок. Тогда можно ли реализовать в программе следующую формулу: Lsc=D/50, где: Lsc - параметр Linetype scale; D - диаметр окружности или расстояние между двумя отрезками; 50 - коэффициент (получен мною стихийно-эмпирическим путем ) Тип линии ACAD_ISO10W100 |
|||
|
||||
Программист широкого профиля. Регистрация: 08.09.2005
Челябинск
Сообщений: 722
|
Цитата:
1. Запрос длины первого штриха и запрос длины второго штриха, запрос расстояния между штрихами. 2. Указание двух точек 3. между двумя этими точками пытаемся программно нарисовать массив линий в соответствии с выбранными параметрами, если данный массив не влезает между выбранными точками, то также программно обрезать его с обоих концов. А чтобы массив был одной линией -- сделать его блоком. |
|||
|
||||
Регистрация: 20.07.2005
СПб
Сообщений: 89
|
rodion,
Для изменения масштаба типа линии по твоей формуле откорректируй "Axis_Den" замени: aa2 (/ aa2 18 )) (if (< aa2 (getvar "CELTSCALE")) (command "_.change" bb0 "" "_p" "_s" aa2 "")) на: aa2 (/ aa2 25)) (command "_.change" bb0 "" "_p" "_s" aa2 "") замени: aa1 (/ aa1 36)) (if (< aa1 (getvar "CELTSCALE")) (command "_.change" aa2 "" "_p" "_s" aa1 "")) на: aa1 (/ aa1 50)) (command "_.change" aa2 "" "_p" "_s" aa1 "") замени: bb0 (/ bb0 18 ) ang 0) (if (< bb0 bb2) (setvar "CELTSCALE" bb0)) на: bb0 (/ bb0 25) ang 0) (setvar "CELTSCALE" bb0) замени: aa1 (/ aa1 36)) (if (< aa1 (getvar "CELTSCALE")) (command "_.change" aa3 "" "_p" "_s" aa1 "")) )) на: aa1 (/ aa1 50)) (command "_.change" aa3 "" "_p" "_s" aa1 "") Программу пока не меняю, т.к. мне кажется, что зависимость здесь должна быть нелинейной, а при больших длинах осей шаг штрихов должен стремиться согласно ГОСТу к максимальной величине 35 мм. |
|||
|
||||
Регистрация: 14.10.2005
Сообщений: 42
|
To Денис Флюстиков,
Попробовал отредактировать программу по твоим указаниям: Пишет: Unknown command "AXIS_DEN" Начал производить замены кодов поэтапно - прога отказывается работать после последней замены: замени: aa1 (/ aa1 36)) (if (< aa1 (getvar "CELTSCALE")) (command "_.change" aa3 "" "_p" "_s" aa1 "")) )) на: aa1 (/ aa1 50)) (command "_.change" aa3 "" "_p" "_s" aa1 "") В чем может быть дело? |
|||
|
||||
Регистрация: 20.07.2005
СПб
Сообщений: 89
|
Прошу прощения, последняя замена должна быть такой:
замени: aa1 (/ aa1 36)) (if (< aa1 (getvar "CELTSCALE")) (command "_.change" aa3 "" "_p" "_s" aa1 "")) на: aa1 (/ aa1 50)) (command "_.change" aa3 "" "_p" "_s" aa1 "") Если утилита не заработала, дай твой mail, можно мне на [email protected] (вышлю тебе откорректированный код). Удачи! |
|||
|
||||
Регистрация: 11.09.2004
г. Гомель
Сообщений: 65
|
У меня тут еще один вариантик завалялся. Не помню откуда взялся.
;;;Простановка осевой линии типа "Acad_iso04w100" на слое "оси" красного цвета с переменным ;;;текущим масштабом (адаптированным под длину осевой линии). ;;;Разработал Андрон Сазонов E-MAIL: [email protected] -------------------------------------------------------------------------------- (defun C:Osl (/ sna cmd lin scal LAY col ooi first SECOND dist add) (SETQ sna (GETVAR "osmode")) (setq cmd (getvar "cmdecho")) (setvar "cmdecho" 0) (setq lin (getvar "celtype")) (setq scal (getvar "celtscale")) (SETQ LAY (GETVAR "CLAYER")) (SETQ col (GETVAR "Cecolor")) (setq ooi (GETDIST "\nУвеличение осевой линии с каждой стороны <5>: ") ooi (if (null ooi) 5 ooi ) ) (setq first 1 second 2 ) (while (and first second) (setvar "osmode" 19) (setq first (getpoint "\n Осевая линия>> Первая точка: ")) (if (null first) '(0) (setq SECOND (getpoint first "\n Осевая линия>> Вторая точка: ")) ) (cond ((equal first second) (print "Ошибка >> Введенные точки совпадают!") ) ((and first second) (command "linetype" "s" "Acad_iso04w100" "") (COMMAND "LAYER" "M" "ОСИ" "C" "RED" "" "") (setvar "cecolor" "bylayer") (setq dist (distance first second)) (setq add (list (* (/ (- (car first) (car second)) dist) ooi) (* (/ (- (cadr first) (cadr second)) dist) ooi) (* (/ (- (caddr first) (caddr second)) dist) ooi) ) first (mapcar '+ first add) second (mapcar '- second add) ) (setvar "celtscale" (* (DISTANCE FIRST SECOND) 0.01) ) (command "Line" first second "") ) ) ) (setvar "celtscale" scal) (setvar "celtype" lin) (SETVAR "CLAYER" LAY) (SETVAR "Cecolor" col) (SETVAR "osmode" sna) (setvar "cmdecho" cmd) ) -------------------------------------------------------------------------------- Вроде работает, но: 1. Слишком мелкий масштаб линии. 2. После отработки не возвращается рабочий слой и тип линии, а остаются такими, какие были в момент выполнения команды. |
|||
|
||||
Программист широкого профиля. Регистрация: 08.09.2005
Челябинск
Сообщений: 722
|
Всем спасибо за предоставленную информацию.
По проблеме rodionа: Мне кажется здесь все не так просто. По условию задачи для минимальной линии идет отношение штриха и пробела 3/5, для максимальной 5/30. Ввиду того, что эти отношения непропорциональны, то и изменение масштаба типа линии будет не правильным. Например если вы попытаетесь из минимального перевести в максимальный, то у вас получится 3*6/5*6,тоесть удлинив штрих в 6 раз удлинится пробел тоже в 6 раз и станет = 18, а масимальнодопустимое 5, хотя штрих примет нужное значениею Тоесть только какойто один параметр может быть правильным(спасибо ГОСТу). Всвязи с этим у меня появилась маленькая идея. Код:
Для малых 5/3 Для средних 17,5/4 Для больших 30/5 Единственный недостаток – слишком мало возможностей, и если добавить к этим типам еще типов, то можно среди них запутаться. Математически можно посчитать и сделать лисп функцию которая будет выдавать для каждого значения штриха значение пробела, но масштаб типа линии , как я уже говорил выше, с такими значениями работать не будет, а генерация lin-файла может привести к тому что у вас окажется миллион линий. Возможно я ошибаюсь и математический подход существует. Если создать для каждого типа отдельный слой, то можно самим вручную для определенной длинны линии выбирать нужный слой. Но этот процесс можно автоматизировать – создать реактор объектов находящихся на этих слоях, который будет сам отслеживать длину линий и в соответствии с этой длинной будет перекидывать их со слоя на слой. Как вы думаете стоит заняться? |
|||
|
||||
Регистрация: 14.10.2005
Сообщений: 42
|
Блин, только на 3й день заметил что появилась 2я страница темы.....
To Денис Флюстиков, Спасибо Денис, все получилось! Эта программа полностью удовлетворяет мои рабочие потребности. Но вот возникло еще одно предложение: нельзя ли сделать так, чтобы осевые линии чертились не только на виде сверху а и на всех остальных видах? To Cnapmak, спасибо за инфу То mmax, конечно стоит! Всегда нужно стремиться к совершенству! Хотя такая задача, как мне кажется, слишком уж геморойная... |
|||
|
||||
Регистрация: 20.07.2005
СПб
Сообщений: 89
|
Отрисовка осей окружностей кругового массива:
http://www.autocad.ru/cgi-bin/f1/board.cgi?t=31693BA |
|||