Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.02.19;
Скачать: CL | DM;

Вниз

Ленточный конвейер....   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.017 c
2-1320822681
Fr
2011-11-09 11:11
2012.02.19
FlashWindow


2-1320748521
bam
2011-11-08 13:35
2012.02.19
Файл уже открыт 107


2-1320826326
I_D
2011-11-09 12:12
2012.02.19
Перевод проекта с Delphi 7 в Delphi XE. Проблема с ShortString


15-1319715427
Бездомный
2011-10-27 15:37
2012.02.19
Как лучше называть ключевое (и не только) поля таблиц?


2-1320820407
Юлька
2011-11-09 10:33
2012.02.19
Turbo Pascal - Композиция Двух Двумерных Массивов 100x100