Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1319445988
OW
2011-10-24 12:46
2012.02.19
java + t-sql vs Delphi+ t-sql. На сколько сложно туда-сюда перекл


2-1320915674
alex-2011h
2011-11-10 13:01
2012.02.19
Секционированный DbGrid


6-1250621874
cerber
2009-08-18 22:57
2012.02.19
Отправить Ctrl+A, Ctrl+V в окно webbrowser


2-1320878543
DolboBoB
2011-11-10 02:42
2012.02.19
Как правильно вывести в DBGrid таблицу? BDE.


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский