Форум: "Начинающим";
Текущий архив: 2012.02.19;
Скачать: [xml.tar.bz2];
ВнизЛенточный конвейер.... Найти похожие ветки
← →
dj-Oleg © (2011-11-03 14:37) [0]Подскажите пожалуйста, можно ли нарисовать из Делфи в Автокаде ленточный конвейер? Есть задача в делфи уже есть приложение которое расчитывает все параметры ленточного конвейера, который рассчитывается. Результаты занесены в переменные. Возможно ли по этим данным изобразить собственно сам конвейер в автокаде либо каким-то другим способом?
← →
Омлет © (2011-11-03 14:53) [1]Да и да.
1. Можно сформировать dwg-файл и передать его автокаду.
2. Можно нарисовать конвейер прямо в автокаде, управляя им через OLE.
3. Можно нарисовать конвейер в своём приложении, используя какой-либо 3d-движок, если нужна трехмерная модель, или даже средствами GDI, если надо только 2d.
Я советую не трогать автокад и выбрать третий вариант.
← →
Anatoly Podgoretsky © (2011-11-03 15:47) [2]> dj-Oleg (03.11.2011 14:37:00) [0]
Автокад является СОМ сервером, значит можно.
← →
Dimka Maslov © (2011-11-03 16:13) [3]Проще всего сформировать dxf и открыть его в автокаде.
Но если вспомнить, что автокад это интерфейс командной строки, можно напрямую сформировать список команд, скопировать в буфер обмена, и вставить в командную строку автокада.
← →
И. Павел © (2011-11-03 17:19) [4]
> dj-Oleg © (03.11.11 14:37)
Вот статьи по работе с автокадом из Delphi:
http://www.itspecial.ru/theme/IT-praktikum_-_Delphi-i-AutoCAD-Organizacija-svjazi-dvuh-populjarnyh-programmnyh-kompleksov/10106/default.asp
http://dwg.ru/art/4
Еще массу статей можно найти, введя в гугле запрос вида "Autocad ole delphi"
← →
Плохиш © (2011-11-03 17:31) [5]
> Еще массу статей можно найти, введя в гугле запрос
Нафига, если есть интелектуальная гугля?
← →
dj-Oleg © (2011-11-07 09:46) [6]Омлет ©, я честно говоря был бы счастлив нарисовать эту всю беду в своем приложении пусть это будет на 2d это не критично, просто представляю так что это ж: а) прийдется прорисовывать каждый пиксель и б) как их прорисовывать? Относительно чего? И как эти рисунки будут себя вести если изменяться параметры конвейера, ведь задумано так, чтоб можно было расчитывать разные конвейера. Если есть намек как это в своем приложении сделать - это вообще будет замечательно!
← →
Inovet © (2011-11-07 10:03) [7]> [6] dj-Oleg © (07.11.11 09:46)
Зачем всё попиксельно. Есть же несколько примитивов - линия, элипс. Для векторной графики самое то. Рисовать на Canvas.
← →
KilkennyCat © (2011-11-07 10:04) [8]
> а) прийдется прорисовывать каждый пиксель
эт смотря насколько все сложно...
если все просто, то ну, например, есть ленточный конвейер, длиной метр, внутри ленты 5 опорных роликов.
соответственно, имеем 4 готовых рисунка - кусок ленты на концах конвейера, лента посередине и ролик.
задача - сделать конвейер в два раза длиннее:
копируем рисунок одного конца ленты, потом растягиваем рисунок середины ленты до требуемой длины, другой конец ленты и напоследок закидываем внутрь 10 рисунков роликов.
собственно, не рисование, а сплошное копирование битмапов.
← →
dj-Oleg © (2011-11-07 10:43) [9]Кстати отличный вариант, а возможно ли в таком случае реализовать чтоб код сам же формировал набор битмапов в зависимости от посчитанных параметров? Или прийдется прописывать все возможные виды конвейеров в природе и закладывать в него? Т.е пример посчитан конвейер из 10 роликоопор с одной стороны и с другой 10 роликоопор. Следующий кон-р у нас получился допусти с 5 роликоопорами только с одной стороны и т.д. Вот вопрос, сможет тогда код как-бы ориентироваться в куда ему врисовать например в первом случае эти 10 роликоопор,а куда вторые 10. Вот этот момент немного недопонимаю......
← →
Омлет © (2011-11-07 10:45) [10]> dj-Oleg © (07.11.11 09:46) [6]
Попиксельно не надо, надо примитивами.
К примеру.. Берем компонент TPainBox, указываем Align = alClient, в обработчике OnPaint рисуем домик, размеры которого зависят от размеров компонента:procedure TForm1.PaintBox1Paint(Sender: TObject);
var
W, H: integer;
HouseW, HouseH: integer;
RoofH : integer;
begin
W := PaintBox1.Width;
H := PaintBox1.Height;
HouseW := round(W * 0.8); // ширина дома
HouseH := round(H * 0.8); // высота дома
RoofH := round(HouseH * 0.3); // высота крыши относительно высоты дома
with PaintBox1.Canvas do
begin
// Очищаем рисунок
Brush.Color := clWhite;
FillRect(Rect(0, 0, W, H));
// Рисуем коробку дома
Brush.Color := clGray;
Rectangle((W - HouseW) div 2, (H - HouseH) div 2 + RoofH,
W - (W - HouseW) div 2, H - (H - HouseH) div 2);
// Рисуем крышу
Brush.Color := clYellow;
Polygon([Point((W - HouseW) div 2, (H - HouseH) div 2 + RoofH),
Point(W div 2, (H - HouseH) div 2),
Point(W - (W - HouseW) div 2, (H - HouseH) div 2 + RoofH)]);
end;
end;
Меняем размер формы - меняется размер рисунка, т.к. все координаты относительны.
Также и с конвейером - вычислять всё можно в метрах, а вот рисовать надо уже в масштабе и относительно каких-то величин.
← →
Омлет © (2011-11-07 10:46) [11]> dj-Oleg © (07.11.11 10:43) [9]
> а возможно ли в таком случае реализовать чтоб код сам же
> формировал набор битмапов в зависимости от посчитанных параметров?
Да. Всё можно динамически высчитывать и прорисовывать.
← →
dj-Oleg © (2011-11-07 11:19) [12]Домик прикольно получается - это классно! А вот насчет динамически высчитывать и прорисовывать какой-нибудь примерец кинуть можешь? хотя бы чтоб попробовать идею уловить....
← →
Омлет © (2011-11-07 11:52) [13]> какой-нибудь примерец кинуть можешь?
Какой пример? Что именно не понятно?
← →
Inovet © (2011-11-07 11:53) [14]> [12] dj-Oleg © (07.11.11 11:19)
> А вот насчет динамически высчитывать и прорисовывать какой-
> нибудь примерец
А домик неа?
← →
Inovet © (2011-11-07 11:55) [15]> [13] Омлет © (07.11.11 11:52)
> Какой пример? Что именно не понятно?
Домик ты ему сделал, теперь конвейер давай, да код не забудь прокомментировать. Разленились тут панимаааешь.
← →
Плохиш © (2011-11-07 13:43) [16]
> А вот насчет динамически высчитывать и прорисовывать какой-
> нибудь примерец кинуть можешь? хотя бы чтоб попробовать
> идею уловить....
Пример изменения двух координат и двух размеров? Может вашей конторе программиста нанять всё-таки?
← →
dj-Oleg © (2011-11-08 09:34) [17]Спасибо уважаемые Inovet © и Плохиш © за такую прекрасную подсказку по вопросу:
>Домик ты ему сделал, теперь конвейер давай, да код не забудь >прокомментировать. Разленились тут панимаааешь.
>Пример изменения двух координат и двух размеров? Может вашей конторе программиста нанять всё-таки?
Это очень помогает любую минуту, я хорошо понимаю что намного прикольнее погнать с кого-то чем что-то внятное сказать по проблеме, это я и сам хорошо это умею делать! Если я не ошибаюсь на форуме вас силой никто не заставляет напрягаться и помогать кому либо, так в чем проблема? - кто-то просил вашей помощи? Так это у вас завышенная самооценка уважаемые!
По самому вопросу я кажется и не просил решить здесь мне что-то, обратился бы во фриланс. Формулирую вопрос иначе:(Пример домика мне понятен что динамически отрисовывать фигуры в зависимости от меняющейся переменной можно) Пример: известно что у полученного конвейера 4 барабана, но кажд барабан находиться мало того что на разном расстоянии друг от друга, а + то что под разными углами... вот и вопрос как мне тогда располагать в координатной плоскости эти например барабаны?
Чтоб никто не подумал что я намекаю на "код типа мне скинуть", оговариваю, что просьба сказать просто на словах, с целью уловить логику, не более.
P.S очень проханных просьба не напрягаться в помощи, я и так понимаю что вы слишком заняты чтоб тратить на меня свое время, поэтому не отвлекайтесь!
← →
Inovet © (2011-11-08 09:55) [18]> [17] dj-Oleg © (08.11.11 09:34)
> : известно что у полученного конвейера 4 барабана, но кажд
> барабан находиться мало того что на разном расстоянии друг
> от друга, а + то что под разными углами... вот и вопрос
> как мне тогда располагать в координатной плоскости эти например
> барабаны?
Ты сказал, что с масшьабированием и началом координат тебе всё ясно на примере домика. с конвейером остаётся чистая геометрия. Для удобства можно сделать класс Барабан, пусть он умеет себя рисовать в заданных координатах и с заданным углом, рисование организовать в процедуре Draw. Останется создать 4 объекта класса Барабан, задать им координаты и углы, вызвать в OnPaint процедуру Draw см домик.
← →
Омлет © (2011-11-08 10:39) [19]> dj-Oleg © (08.11.11 09:34) [17]
> известно что у полученного конвейера 4 барабана, но кажд
> барабан находиться мало того что на разном расстоянии друг
> от друга, а + то что под разными углами... вот и вопрос
> как мне тогда располагать в координатной плоскости эти например
> барабаны?
Во-первых, надо учитывать, что точка начала координат (0, 0) находится в левом верхнем углу. Во-вторых, выбрать для конвейера какую-то точку отсчета. Например, левый нижний угол основания.
Допустим, известно, что центр барабана 1 находится на расстоянии 10 метров по оси абсцисс и 5 метров по оси ординат от точки отсчета, и барабан повернут на 40 градусов.
Сначала переводим расстояние в пиксели. Если масштаб, допустим, 0.05 м/пикс, то 10 и 5 надо разделить на 0.05, чтобы получить координаты барабана в пикселях. Прибавляем координаты точки отсчета - получаем координаты на канве. Дальше вызываем процедуру отрисовки барабана в нужных координатах под заданным углом. И так далее. Чистая геометрия.
P.S.
Повернуть точку (X,Y) на угол A с центром вращения в точке (Сx,Cy) можно по формуле:RotatedX = Cx + (X - Cx) * Cos(A) - (Y - Cy) * Sin(A)
RotatedY = Cy + (X - Cx) * Sin(A) + (Y - Cy) * Cos(A)
← →
dj-Oleg © (2011-11-08 10:44) [20]Ага, вроде въезжаю.....
← →
Inovet © (2011-11-08 10:52) [21]И ещё. Ты какой чертёж делаешь? А то может ты изометрическую проекцию хочешь построить.
← →
Омлет © (2011-11-08 11:16) [22]> Inovet © (08.11.11 10:52) [21]
> А то может ты изометрическую проекцию хочешь построить.
Тут бы хоть с видом спереди разобраться.. )
← →
dj-Oleg © (2011-11-08 11:20) [23]Та никаких изометрических фигур - задача просто изобразить эту радость вообще шоб было похоже на конвейер!
← →
Плохиш © (2011-11-08 11:25) [24]
> dj-Oleg © (08.11.11 09:34) [17]
> вот и вопрос как мне тогда располагать в координатной плоскости
> эти например барабаны?
Так в вашей конторе и конструкторов нет?
А если есть, то спроси у них чертёж конвейера, там всё в координатной плоскости прорисовано. Или "высшее" образование чертежи читать не умеет?
← →
Плохиш © (2011-11-08 11:26) [25]
> dj-Oleg © (08.11.11 11:20) [23]
>
> Та никаких изометрических фигур - задача просто изобразить
> эту радость вообще шоб было похоже на конвейер!
Так на бумажке нарисуй, разбей на объекты и программируй. Про классы в ветке уже сказали.
← →
dj-Oleg © (2011-11-08 11:30) [26]Опа! Товарищь Плохиш © вы опять решили затратить на нас свое драгоценное? Не стоило!
← →
app © (2011-11-08 12:32) [27]Огласите весь список, кто имеет право тратить время на тебя?
← →
dj-Oleg © (2011-11-08 14:04) [28]У кого есть желание просто помочь а не погнобить!
← →
Jeer © (2011-11-08 20:05) [29]Тут уже за 20 постов, кто просто помогает.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2012.02.19;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.005 c