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

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

Осевые линии

Ответ
Поиск в этой теме
Непрочитано 20.05.2006, 00:52 #1
Осевые линии
mmax
 
Программист широкого профиля.
 
Челябинск
Регистрация: 08.09.2005
Сообщений: 722

Осевые линии проставляю сначала от края до края детали, в основном по привязке к центрам. А потом их оттягиваю за край детали на нужное расстояние :evil: .

Согласитесь, процедура болезненная и долгая.

Надо как то автоматизировать этот процесс
Например указал две точки, вылет линии за точку(только чтобы с обеих сторон линия увеличивалась на данное расстояние) и впринципе и все.

А еще лучше чтобы эту операцию можно было проводить с набором линий.

Работы сейчас много(сессия), программа помоему получится не в две строчки, времени на разработку нет. Слышал, что таких программ много, Скиньте пожалуйста если у кого есть.
Просмотров: 12025
 
Непрочитано 20.05.2006, 16:10
#2
Денис Флюстиков


 
Регистрация: 20.07.2005
СПб
Сообщений: 89


Посмотри на http://dwg.ru/dwl/395
Отрисовка осей окружностей (дуг, эллипсов) и осевой линии при выборе отрезков, а если при первом диалоге правый клик то ось рисуется по двум точкам и концы выносятся на заданное расстояние
Денис Флюстиков вне форума  
 
Непрочитано 21.05.2006, 15:09
#3
ssn

Инженер проектировщик (раздел ТМ - фриланс)
 
Регистрация: 06.12.2003
Геленджик
Сообщений: 1,794
Отправить сообщение для ssn с помощью Skype™


могу ещё один вариант на ВБА - http://dwg.ru/dwl/153
если нужны будут какие то объяснения а может и новая версия (так, маленько чего добавлено), то я тоже из той же деревни....
пиши - найдёмся...
ssn вне форума  
 
Непрочитано 24.11.2006, 10:33
#4
rodion


 
Регистрация: 14.10.2005
Сообщений: 42


Уважаемые программисты, у меня такой вопрос: возможно ли в программе Axis_Den прописать зависимость масштаба осевой линии (параметр LineType Scale) от величины диаметра круга или от расстояния между двумя линиями. Т.е. чтобы величина LineType Scale вычислялась по определенной формуле и осевая линия получалась бы сразу гостированного вида?
rodion вне форума  
 
Непрочитано 24.11.2006, 12:16
#5
Pilot

Проектировщик свиноводство
 
Регистрация: 21.08.2003
Сообщений: 2,268


Удлинение линий на заданную величину
Код:
[Выделить все]
(defun C:MkOsi ( / s1 d1 c1 l1 p1 p2)
(setvar "cmdecho" 0)
(setq s1 (ssget (list (cons 0 "LINE")))
      c1 0
      d2 2 ;Величина удлинения
)
(repeat (sslength s1)
   (setq l1 (entget (ssname s1 c1))
         p1 (cdr (assoc 10 l1))
         p2 (cdr (assoc 11 l1))
         p2 (polar p1 (angle p1 p2)(+ (distance p1 p2) d1))
         p1 (polar p2 (angle p2 p1)(+ (distance p1 p2) d1))
         l1 (subst (cons 10 p1)(assoc 10 l1) l1)
         l1 (subst (cons 11 p2)(assoc 11 l1) l1)
         c1 (1+ c1))
   (entmod l1))
(princ)
); end c:MkOsi
Pilot вне форума  
 
Непрочитано 24.11.2006, 12:59
#6
rodion


 
Регистрация: 14.10.2005
Сообщений: 42


Уважаемый Pilot, меня интересует не удлинение осевых линий за пределы окружности, а изменение масштаба типа линий (расстояния между отрезками в осевых линиях: -------------)
rodion вне форума  
 
Непрочитано 24.11.2006, 13:09
#7
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,826


Цитата:
Сообщение от rodion
Уважаемый Pilot, меня интересует не удлинение осевых линий за пределы окружности, а изменение масштаба типа линий (расстояния между отрезками в осевых линиях: -------------)
Ты будешь смеяться, но это не тебе.
Krieger вне форума  
 
Непрочитано 24.11.2006, 13:22
#8
Денис Флюстиков


 
Регистрация: 20.07.2005
СПб
Сообщений: 89


rodion,

В последней версии "Axis_Den" "CELTSCALE" (коэффициент масштабирования для типа линий) меняется при малых длинах нарисованных осей (с учетом "LTSCALE"). Правда, рисую оси в "ACAD_ISO10W100" и, возможно, для использования других типов линий потребуется небольшая корректировка программы.
Денис Флюстиков вне форума  
 
Непрочитано 24.11.2006, 13:34
#9
rodion


 
Регистрация: 14.10.2005
Сообщений: 42


Денис Флюстиков,
а нельзя ли как-нибудь сделать так чтобы коэффициент масштабирования для типа линий менялся и при больших диаметрах (расстояниях)?
rodion вне форума  
 
Непрочитано 24.11.2006, 13:42
#10
Pilot

Проектировщик свиноводство
 
Регистрация: 21.08.2003
Сообщений: 2,268


2 rodion
Конечно не тебе. См. пост 1 в этом топике.
Pilot вне форума  
 
Непрочитано 24.11.2006, 14:24
#11
Денис Флюстиков


 
Регистрация: 20.07.2005
СПб
Сообщений: 89


rodion,

Посмотрел ГОСТ:
Длина штрихов 5...30, расстояние между ними 3...5.
И примечание:
Длину штрихов в штриховых и штрих-пунктирных линиях следует выбирать в зависимости от величины изображения.

Поэтому загвоздка не в корректировке программы (это не сложно), я написать, как ты сказал, "определенную формулу" для этой зависимости.
Денис Флюстиков вне форума  
 
Непрочитано 24.11.2006, 15:03
#12
rodion


 
Регистрация: 14.10.2005
Сообщений: 42


To Денис Флюстиков,
Ок. Тогда можно ли реализовать в программе следующую формулу: Lsc=D/50,
где:
Lsc - параметр Linetype scale;
D - диаметр окружности или расстояние между двумя отрезками;
50 - коэффициент (получен мною стихийно-эмпирическим путем )

Тип линии ACAD_ISO10W100
rodion вне форума  
 
Автор темы   Непрочитано 24.11.2006, 17:15
#13
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Цитата:
зависимость масштаба осевой линии (параметр LineType Scale) от величины диаметра круга или от расстояния между двумя линиями. Т.е. чтобы величина LineType Scale вычислялась по определенной формуле и осевая линия получалась бы сразу гостированного вида?
Можно сделать лисп:
1. Запрос длины первого штриха и запрос длины второго штриха, запрос расстояния между штрихами.
2. Указание двух точек
3. между двумя этими точками пытаемся программно нарисовать массив линий в соответствии с выбранными параметрами, если данный массив не влезает между выбранными точками, то также программно обрезать его с обоих концов.
А чтобы массив был одной линией -- сделать его блоком.
mmax вне форума  
 
Непрочитано 24.11.2006, 21:44
#14
Денис Флюстиков


 
Регистрация: 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 мм.
Денис Флюстиков вне форума  
 
Непрочитано 27.11.2006, 10:38
#15
rodion


 
Регистрация: 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 "")

В чем может быть дело?
rodion вне форума  
 
Непрочитано 27.11.2006, 11:25
#16
Денис Флюстиков


 
Регистрация: 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] (вышлю тебе откорректированный код). Удачи!
Денис Флюстиков вне форума  
 
Непрочитано 28.11.2006, 23:59
#17
Cnapmak


 
Регистрация: 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. После отработки не возвращается рабочий слой и тип линии, а остаются такими, какие были в момент выполнения команды.
Cnapmak вне форума  
 
Автор темы   Непрочитано 29.11.2006, 02:10
#18
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Всем спасибо за предоставленную информацию.

По проблеме rodionа:

Мне кажется здесь все не так просто.
По условию задачи для минимальной линии идет отношение штриха и пробела 3/5, для максимальной 5/30. Ввиду того, что эти отношения непропорциональны, то и изменение масштаба типа линии будет не правильным. Например если вы попытаетесь из минимального перевести в максимальный, то у вас получится 3*6/5*6,тоесть удлинив штрих в 6 раз удлинится пробел тоже в 6 раз и станет = 18, а масимальнодопустимое 5, хотя штрих примет нужное значениею Тоесть только какойто один параметр может быть правильным(спасибо ГОСТу).

Всвязи с этим у меня появилась маленькая идея.

Код:
[Выделить все]
;Типы линий по ГОСТ 2,303

;********************************************************************

;Осевая линия
*CENTER_SMALL,Center_Small __ _ __ 
A, 5.0, -1.0, 1.0, -1.0

*CENTER_AVERAGE,Center_Average ____ _ ____
A, 17.5,-1.5,1,-1.5

*CENTER_BIG, Center_Big ______  _  ______
A,30.0,-1.75,1.5,-1.75
Здесь каждый тип линии выполнен в следующем соответствии: при масштабе = 1 размеры штрихов и пробелов будут соответствовать нормам
Для малых 5/3
Для средних 17,5/4
Для больших 30/5
Единственный недостаток – слишком мало возможностей, и если добавить к этим типам еще типов, то можно среди них запутаться. Математически можно посчитать и сделать лисп функцию которая будет выдавать для каждого значения штриха значение пробела, но масштаб типа линии , как я уже говорил выше, с такими значениями работать не будет, а генерация lin-файла может привести к тому что у вас окажется миллион линий.

Возможно я ошибаюсь и математический подход существует.

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

Как вы думаете стоит заняться?
mmax вне форума  
 
Непрочитано 29.11.2006, 12:24
#19
rodion


 
Регистрация: 14.10.2005
Сообщений: 42


Блин, только на 3й день заметил что появилась 2я страница темы.....

To Денис Флюстиков,
Спасибо Денис, все получилось! Эта программа полностью удовлетворяет мои рабочие потребности.
Но вот возникло еще одно предложение: нельзя ли сделать так, чтобы осевые линии чертились не только на виде сверху а и на всех остальных видах?

To Cnapmak,
спасибо за инфу

То mmax,
конечно стоит! Всегда нужно стремиться к совершенству! Хотя такая задача, как мне кажется, слишком уж геморойная...
rodion вне форума  
 
Непрочитано 02.12.2006, 01:00
#20
Денис Флюстиков


 
Регистрация: 20.07.2005
СПб
Сообщений: 89


Отрисовка осей окружностей кругового массива:
http://www.autocad.ru/cgi-bin/f1/board.cgi?t=31693BA
Денис Флюстиков вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Осевые линии

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