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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Генерация файла .dwg с web-страницы

Генерация файла .dwg с web-страницы

Ответ
Поиск в этой теме
Непрочитано 24.11.2009, 09:44 #1
Генерация файла .dwg с web-страницы
UDove
 
Регистрация: 24.11.2009
Сообщений: 7

Добрый день. Есть проблемка, помогите разобраться. Если вопрос очень сложный, то наша организация готова на договорной основе оплатить выполнение такой задачи.
Задача в следующем:
Есть Web-приложение ASP.NET, на странице заполняются данные (несколько текстовых полей и выпадающих списков). По нажатию кнопки происходит сохранение указанной информации в базе данных, и тут же должна происходить генерация файла AutoCAD (.dwg - доступного для дальнейшего редактирования), содержащего в себе:
1) рамку (формат рамки указывается при заполнении данных на странице - A3, A2 ... и т.д.),
и
2) заполненный угловой штамп рамки (заполнение штампа рамки, как понимаете, происходит данными, указанными на странице).
Файл размещается где-то на пространстве web-сервера, и ссылка на него должна присутствовать на странице, отображающей информацию о вновь созданной учётной записи.
Как я понял заполнение рамки должно происходить на основе шаблона, по аналогии с тем, как я сам уже делал с word`овскими файлами (там проще), но столкнулся с проблемой заполнения полей, находящихся в колонтитулах. Было бы не плохо и это решить.
Если кто-то захочет решить этот вопрос на платной основе, то к рассмотрению принимаются готовые решения (необходимо продемонстрировать рабочую страницу с выполнением всех указанных процессов). Размер вознаграждения обсуждается дополнительно, после принятия рабочей (действующей) модели, удовлетворяющей всем требованиям.
P.S.: программный код будет необходим как на C#.Net, так и на VB.Net
Просмотров: 4574
 
Непрочитано 24.11.2009, 11:00
#2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Программа будет состоять из двух блоков:
1 - Циклически, с заданным интервалом обращаеться к БД и ищет записи без пометки готового чертежа (поле X).
2 - Собственно генерит чертеж на основе данных и заполняет поле X - место сохранения чертежа.
Первая часть - можеш считать уже готова (надо только настроить под БД), т.к. нечто подобное я уже делал, вторая - нужен пример данных и алгоритм "построения" - сколко времени может уйти на вторую часть (даже примерно) можно будет сказать только посмотрев на ТЗ.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 24.11.2009, 11:39
#3
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


1) Ох щас придут старшие товарищи и начнется.
2) уже несколько раз обсуждались проблемы создания подобных web сервисов.
3) вы не рассказываете всю задачу, возможно вам dwg не нужен, чтобы dwg напрямую генерить нужно вступать в Opendwg alliance а это стоит 25 тык евро в год. Если использовать acad как приложение посредник для генерации dwg и писать под него, то за это autodesk по головке не погладит, они запретят вам использовать акад в подобных целях, а разрешение стоит немалых денех. Ребята попроще типа брикса возможно и бровью не поведут.
4) имхо нужно генерить dxf напрямую, но тогда смысл обращаться к программерам под акад.
5) есть немного другие решения когда акад на стороне клиента, два товарища здесь могут похвастать своими web макросами для акад, но оно очень не надежное для серьезного web сервиса.
6) у меня есть программка одной фирмы генерит файлы 3д из своего каталога во все возможные форматы какие тока можно придумать, пока не понял как она работает ... буду думать немци писали.
Sleekka вне форума  
 
Автор темы   Непрочитано 24.11.2009, 13:28
#4
UDove


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


повтор ...

Последний раз редактировалось UDove, 24.11.2009 в 13:52.
UDove вне форума  
 
Автор темы   Непрочитано 24.11.2009, 13:45
#5
UDove


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


Я старался полностью изложить мысль, но видимо мене не поняли ...

Для "Дима_" - создаётся учётная запись о НОВОМ листе будущего альбома проектной книги. Если запись новая, то конечно файла НЕТ, потому проверять наличие файла задача не ставится. Первый пункт вашего предложения не нужен. В базе хранится только информация об этом листе и ссылка на вновь создаваемый файл (файл хранится на дисковом пространстве).

Для "Sleekka" - можно подробнее за что именно надо платить 25К евро и за что "по головке не погладят"? Что криминального в том, если я автоматически (программным методом) копирую файл-оригинал из одного места в заданное другое, при этом переименовываю его в соответствии со своей работой, а также автоматически происходит заполнение нескольких полей, предназначенных для этого?????
Необходим DWG, а не dxf по причине того, что в дальнейшем этот файл будут использовать для разработки самого чертежа. Поставленная задача пытается упростить работу исполнителя, сократив его затрачиваемое время на разработку чертежа, и избавляя его от рисования рамки и заполнения углового штампа. Эту задачу выполнит тот, кто вводит новую учётную запись в базу, а это может быть начальник отдела или ГИП, которые планируют будущий состав альбома.

По своему опыту, я делал с вордовским файлом следующее - сформировал шаблон с полями, а уже программным методом происходило наполнение полей и на основе этого шаблона создавался (генерился) новый файл. Просто здесь, в AutoCAD`е я не смог разобраться с полями (как создать поле) и в дальнейшем "снаружи" к нему подцепиться. Поля в акаде предлагают вставить дату, автора чертежа, дату создания файла и т.д., но не нашёл просто программируемое пустое поле. И второе, как уже сказал - как к полю в файле пробиться "снаружи" и изменить его значение?
UDove вне форума  
 
Непрочитано 24.11.2009, 14:21
#6
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Такая мысль, может и не совсем правильная:
Почему именно поле? Очень часто форматки создаются в виде блока с атрибутами. Атрибуты имеют имя, которое им присваивается при создании. Создать чертеж-шаблон с таким блоком с атрибутами с именами наподобие "ISPOLNITEL" "PROVERIL" "NORMOCONTROL" ... И в зависимости от того, кто копирует себе этот файл, происходит присваивание значения атрибутам. (Во время первого открытия файла, во время копирования... не знаком с .NET - не могу сказать, возможно это или нет.)
Как пример - вложенный файл этого сообщения.

Последний раз редактировалось Do$, 24.11.2009 в 14:26.
Do$ вне форума  
 
Автор темы   Непрочитано 24.11.2009, 14:33
#7
UDove


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


это уже ближе к теме ...
UDove вне форума  
 
Непрочитано 24.11.2009, 15:21
#8
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Я не писал про налчие файла - я писал про поле в БД которое по умолчанию пустое, (назовем это поле filename), программа с заданным интервалом посылает запрос к БД
Код:
[Выделить все]
"select * from table_parametr where isnull(filename,1);"
- то есть вывести все записи в которых поле filename не заполнено - если такие есть создает файл с уникальным именем (напрмер "dwgdraw"+id) где - id ключевое поле записи, и вставляет в поле filename имя файла. Если есть желание чтоб имя файла не создавалось автоматически а бралось из определенного поля БД - тоже можно - но здесь возникает ряд вопросов - как обрабатывать ситуацию если файл уже есть? заданно не допустимое имя итд. - хотя вариант возможен - либо чтенеием всех записей и созданием файла в случае его отсутствия, либо опять-же создать дополнительное поле (пустое по умолчанию) - которое будет сигнализировать о необходимости обработки записи (как и в "моем" случае заполнеямое программой).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 25.11.2009, 08:33
#9
UDove


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


Do$, ваш совет пока самый ценный, из всех предложенных здесь. Спасибо большое, теперь хоть понял в каком направлении идти.

Уважаемый Дима_, прочтите ещё раз внимательно моё описание. Вся проблема, с которой я сюда обратился заключается в том, как заполнить поля углового штампа в файле .DWG и отрисовать программно рамку, и сделать это необходимо полностью программно с web-страницы, не открывая самого файла .DWG.
С файлами .DOC (MS Word) я такое проделывать уже могу, и знаю что с акадовскими тоже можно, вопрос как.

P.S.: я понимаю, что у вас в руках молоток, но надо ещё голову включить, чтоб знать куда его приложить

Последний раз редактировалось UDove, 25.11.2009 в 08:46.
UDove вне форума  
 
Непрочитано 25.11.2009, 10:03
#10
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>с web-страницы, не открывая самого файла .DWG
Вам уже сказали, это будет не законно, это будет сложно
А вообще - заполнение штампов автоматом - последняя автоматизация которую бы я делал, есть много чего другого где приложить руки гораздо полезней.
zamtmn вне форума  
 
Автор темы   Непрочитано 25.11.2009, 10:43
#11
UDove


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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
>>с web-страницы, не открывая самого файла .DWG
Вам уже сказали, это будет не законно, это будет сложно
А можно подробнее про это и с сылками на что-то конкретное, где описано почему это незаконно???

Я не хочу спорить, но каждое утверждение должно быть аргументированно, к тому же я в этой работе исполнитель и мне самому было бы выгодно, если бы это было так, чтобы объяснить руководству, которое ставит такие задачи. Просто мне надо на что-то ссылаться, а не только на ваши сообщения.
UDove вне форума  
 
Непрочитано 25.11.2009, 11:10
#12
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>Я не хочу спорить, но каждое утверждение должно быть аргументированно

Я тоже нехочу спорить о необходимости пользования поиском
http://forum.dwg.ru/showthread.php?t=33011
zamtmn вне форума  
 
Автор темы   Непрочитано 25.11.2009, 11:13
#13
UDove


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


ПРИНЯТО.
Спасибо, тема закрыта.
UDove вне форума  
 
Непрочитано 25.11.2009, 12:27
#14
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Несмотря на то что тема Вами закрыта, и Ваши насмешки в мой адрес я распишу все подробно - заполнить поля углового штампа програмно не открывая файл возможно только в том случае если в полях находяться ссылки на внешние объекты, нарисовать-же рамку не открывая файл НЕВОЗМОЖНО, файл придеться по любому создать либо расковыряв формат dwg, либо с помощью автокада.
Пример как это сделать с web страницы:
цитирую Вас дословно (пост №1):
"Есть Web-приложение ASP.NET, на странице заполняются данные (несколько текстовых полей и выпадающих списков). По нажатию кнопки происходит сохранение указанной информации в базе данных..."
То есть у Вас имееться база данных определенного формата, под управлением какой СУБД Вы не уточнили (оно же как и формат) - но это в общем не важно. Я возму примитивный пример в БД находиться координаты левого нижнего угла прямогугольника со сторонами x y. Когда появляеться новая запись (вставляемая туда web сценарием) - необходимо создать документ в формате dwg по параметрам полей записи:
Создадим БД (используеться СУБД MySQL - для любой другой отличие будет только в строке подключение к ADO) - код для вставки в коноль mysql с правами root:
Код:
[Выделить все]
create database test;
use test;
create table box(
id int auto_increment,
x0 real,
y0 real,
xsize real,
ysize real,
dwgname char(255),
primary key(id));
create user gost;
grant all on test.* to gost;
Для проверки
Код:
[Выделить все]
show columns from box;
должен выдать:
Код:
[Выделить все]
mysql> show columns from box;
+---------+-----------+------+-----+---------+----------------+
| Field   | Type      | Null | Key | Default | Extra          |
+---------+-----------+------+-----+---------+----------------+
| id      | int(11)   | NO   | PRI | NULL    | auto_increment |
| x0      | double    | YES  |     | NULL    |                |
| y0      | double    | YES  |     | NULL    |                |
| xsize   | double    | YES  |     | NULL    |                |
| ysize   | double    | YES  |     | NULL    |                |
| dwgname | char(255) | YES  |     | NULL    |                |
+---------+-----------+------+-----+---------+----------------+
База данных (для нашего примера) готова.

Далее запускаем автокад и загрузив лисп:
Код:
[Выделить все]
(vl-load-com)
(defun c:ReadDB ( / param)
(while T
(setq param (cdr (getsql nil "gost" nil "test" "select * from box where ifnull(dwgname,1)")))
(if param (mapcar '(lambda (prm) (apply 'makebox prm)) param))
(wait 5)
));end of while&readdb

(defun makebox (id x0 y0 xsize ysize dwgname)
(setq dwgname (pln (list (list x0 y0) (list (+ x0 xsize) y0) (list (+ x0 xsize) (+ y0 ysize)) (list x0 (+ y0 ysize))) T))
(vlax-invoke-method (vlax-get-property (vlax-get-acad-object) 'activedocument) 'saveas (strcat "dwgname" (rtos id)) nil)
(runsql nil "gost" nil "test" (strcat "update box set dwgname='dwgname" (rtos id) "' where id=" (rtos id)))
(entdel dwgname)
(vlax-invoke-method (vlax-get-property (vlax-get-acad-object) 'activedocument) 'saveas "tmp" nil)
);end of makebox

;запускает sql инструкцию на sql сервере, по умолчанию использует драйвер MySQL ODBC 3.51 Driver.
использует переменные connectiontimeout и commandtimeout
;формат запуска (RUNSQL driver user password database sql)
;напрмер (runsql nil "gost" nil "test" "drop table test")
(defun runsql (driver user password database sql / connect)
(if (not driver) (setq driver "{MySQL ODBC 3.51 Driver}"))
(setq connect (vlax-create-object "adodb.connection"))
(if connectiontimeout (vlax-put-property connect "connectiontimeout" connectiontimeout))
(if commandtimeout (vlax-put-property connect "commandtimeout" commandtimeout))
(vlax-invoke-method connect "open" (strcat "driver=" driver) user password T)
(if database (vlax-invoke-method connect "execute" (strcat "use " database) T T))
(vlax-invoke-method connect "execute" sql T T)
(vlax-invoke-method connect "close")
(vlax-release-object connect)
(gc)
);end of runsql

;Возращает "список списков" вернутых sql сервером. Обработка ошибок на совести ползователя (vl-catch)
;формат запуска (getsql driver user password database sql)
;напрмер (getsql nil "gost" nil "test" "select * from test")
(defun getsql (driver user password database sql / connect table row lst tmp ret)
(if (not driver) (setq driver "driver={MySQL ODBC 3.51 Driver}"))
(setq connect (vlax-create-object "adodb.connection"))
(if connectiontimeout (vlax-put-property connect "connectiontimeout" connectiontimeout))
(if commandtimeout (vlax-put-property connect "commandtimeout" commandtimeout))
(vlax-invoke-method connect "open" driver user password T)
(if database (vlax-invoke-method connect "execute" (strcat "use " database) T T))
(setq table (vlax-invoke-method connect "execute" sql T T))
(setq row (vlax-get-property (vlax-get-property table "fields") "count"))
(setq tmp 0)
(repeat row (setq lst (append lst (list
(vlax-get-property (vlax-get-property (vlax-get-property table "fields") "item" tmp) "name")))
tmp (1+ tmp))
);end of repeat
(setq ret (append ret (list lst)) lst nil)
(while (= (vlax-get-property table "eof") ':vlax-false)
(setq tmp 0)
(repeat row (setq lst (append lst (list
(vlax-variant-value (vlax-get-property (vlax-get-property (vlax-get-property table "fields") "item" tmp) 	"value"))))
tmp (1+ tmp))
);end of repeat
(vlax-invoke-method table "movenext")
(setq ret (append ret (list lst)) lst nil)
);end of while
(vlax-invoke-method connect "close")
(vlax-release-object connect)
(gc)
ret
);end of getsql

(defun wait (time / tmp); ждет указанный промежуток времени
(setq tmp (getvar "cdate") time (/ time 1000000.0))
(while (> (+ tmp time) (getvar "cdate")))
);end of wait

(defun pln (lst c); создает полилинию по списку вершин lst, c - nil/T - разомкн/замкнт или '(с слой цвет).
(entmakex (append
(list (cons 0 "LWPOLYLINE")(cons 100 "AcDbEntity")(cons 100 "AcDbPolyline") (cons 90 (length lst)))
(if (= (type c) 'list)
(vl-remove nil (list
(if (car c) (cons 70 1) (cons 70 0))
(if (cadr c) (cons 8 (cadr c)))
(if (caddr c) (cons 62 (caddr c)))
));end of list & vl-remove
(list (if c (cons 70 1) (cons 70 0)))
);end of if
(mapcar '(lambda (x) (cons 10 x)) lst)
));end of apend & entmakex
);end of pln
Теперь набрав команду "ReadDB", "сворачиваем" автокад и забываем что, он вобще запущен (еще лучше с помощью спец программ убрать его в трей).

Далее если Ваш web сценарий (иль кто угодно еще), пошлет БД SQL запрос:
Код:
[Выделить все]
insert into (x0,y0,xsize,ysize) values (10,20,30,40),(50,60,70,80),(90,100,110,120);
Через 5 сек (интервал сканирования - меняеться на свое усмотрение), у Вас появиться 3 файла в (каталоге сохранения автокада по умолчанию) с прямоугольниками размером xsize*ysize в точке x0y0, а поля "dwgname" записей в БД заполнятся именами соответствующих файлов

p.s. Вот Вам и вся автоматизация, если хватит ума переделать под свои нужды - удачи
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Генерация файла .dwg с web-страницы



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отключить создание каждый раз нового файла .bak при нажатии на кнопку "Сохранить" или при закрытии любого файла .dwg в Автокад 2008? gve2005 AutoCAD 4 30.10.2009 10:30
Вопрос по преобразованию файла из .pdf в .dwg программой CorelDraw. Львиное сердце AutoCAD 20 09.09.2009 15:31
Фатальная ошибка при открытии файла .dwg OMEN257 AutoCAD 2 16.07.2009 09:57
Проблемы с востановлением файла .dwg Владик AutoCAD 36 18.10.2006 08:10
Проблемы с востановлением файла .dwg AutoCAD 6 14.08.2006 09:32