Как переделать коды AutoCAD R14 работающие с БД для работы в AutoCAD 2009
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как переделать коды AutoCAD R14 работающие с БД для работы в AutoCAD 2009

Как переделать коды AutoCAD R14 работающие с БД для работы в AutoCAD 2009

Ответ
Поиск в этой теме
Непрочитано 29.08.2011, 15:58 #1
Как переделать коды AutoCAD R14 работающие с БД для работы в AutoCAD 2009
Andru1968
 
г. Балаково
Регистрация: 29.08.2011
Сообщений: 48

Имеются коды для AutoCAD R14, которые передают данные в БД, позволяют их редактировать и просматривать их. Для соединения с БД были использованы функции ASE. Как переделать эти коды для работы в AutoCAD 2009?
Просмотров: 22594
 
Непрочитано 29.08.2011, 16:50
#2
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от Andru1968 Посмотреть сообщение
Для соединения с БД были использованы функции ASE.
Попробуй использовать ADOLisp
Пример использования ADOLisp
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 29.08.2011, 20:46
#3
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Облазил весь форум, все посылают к ADOLisp. А Вы сами это пробовали? Во-первых не могу понять как ее запустить, что бы посмотреть как она работает? Во-вторых я не так силен в LISP, а тем более в ActivX. Можно разобрать ADOLisp более подробно?
Andru1968 вне форума  
 
Непрочитано 29.08.2011, 21:06
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


Цитата:
Сообщение от Andru1968 Посмотреть сообщение
А Вы сами это пробовали?
Пробовали. Работает.
Цитата:
Сообщение от Andru1968 Посмотреть сообщение
не могу понять как ее запустить
Там все написано - сначала надо сделать объект Connection к БД, потом формировать запрос и запускать его.
Цитата:
Сообщение от Andru1968 Посмотреть сообщение
Можно разобрать ADOLisp более подробно?
Только по шагам и только самостоятельно. На данный момент проще будет просто взять его и использовать, особо не заморачиваясь с внутренностями этого черного ящика.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 29.08.2011, 21:32
#5
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Ребята Вы здесь все такие умные. Один говорит смотри сюда, другой там все написано. Облазил всю ADOLISP_Library полно "defun", но нигде нет "defun c:", тоже самое ADOLISP_Example. Говорю Вам я "чайник". Можно просто объяснить, как воспользоваться эти файлами: ADOLISP_Library.lsp, ADOLISP_Example.lsp и ADOLISP_test.mdb, чтобы увидеть как она работает?
Andru1968 вне форума  
 
Непрочитано 29.08.2011, 23:11
#6
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


Andru1968, это - библиотека функций, а не команд. У меня есть к тебе пара вопросов: ты pdf читал? Если да, то там написано, как работать (начиная с раздела 4). Сначала объявляешь объект коннекта к БД (setq ConnectionObject (ADOLISP_ConnectToDB ConnectString UserName Password)). Как определять строку ConnectString - там же, 4.1.1.3.
Потом формируешь запрос на стандартном SQL и выполняешь его (раздел 4.1.2).
После окончания работы с БД надо освободить коннект к ней (раздел 4.1.3).
И второй вопрос: а что ты хочешь увидеть? Что подразумевается под вопросом
Цитата:
Сообщение от Andru1968 Посмотреть сообщение
чтобы увидеть как она работает?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 30.08.2011, 00:08
#7
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Кулик Алексей aka kpblc,
1. Большое спасибо за ответ.
2. PDF на английском, в котором я вообще ноль. И по-этому на перевод уйдет много времени. Если у кого-то есть русская версия для ознакомления пришлите в личку. Заранее буду благодарен.
3. Если Вас действительно заинтересовала эта тема я могу в Word натыкать картинок с описанием, как работают имеющиеся коды в AutoCAD R14. Потому что 90% кодов для AutoCAD R14, я переработал для AutoCAD 2009 и они работают можно сказать один в один. Оставшиеся 10 % так или иначе связаны либо с передачей данных в БД, либо с редактированием их, либо с просмотром, либо данные из БД вставляются в документы создаваемые для печати.
Andru1968 вне форума  
 
Непрочитано 30.08.2011, 00:15
#8
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


Andru1968, почти вся документация по программированию на английском (исключение - MSDN, да и та переведена не полностью). Полноценно заниматься твоей задачей, извини, я не могу - физически нет времени.
Могу сказать сразу: описание, как там и что работает, мало чем поможет. Надо знать формат БД, место ее расположения, структуру таблиц и хранимых запросов и т.д. Может быть, вся БД вообще хранится не в mdb или SQL, а в чем-нибудь типа текстовых файлов (как, например, знаменитый "Прокат").
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.08.2011, 00:24
#9
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от Andru1968 Посмотреть сообщение
Оставшиеся 10 % так или иначе связаны либо с передачей данных в БД, либо с редактированием их, либо с просмотром, либо данные из БД вставляются в документы создаваемые для печати.
Смотри сюда:
http://www.cadtutor.net/forum/showth...l=1#post384945
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 30.08.2011, 00:35
#10
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Кулик Алексей aka kpblc,
Переводом PDF я займусь сам.
БД расположена на сервере и все кто работают с данным пакетом имеют к ней полный доступ. БД храниться в *.dbf, но я нашел прогу позволяющую конвертировать ее в *.mdb или *.xls. О структуре таблиц и хранимых запросов ничего конкретного сообщить не могу. Знаю только что для соединения с БД были использованы функции ASE.
Andru1968 вне форума  
 
Непрочитано 30.08.2011, 00:53
#11
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Andru1968 Посмотреть сообщение
О структуре таблиц и хранимых запросов ничего конкретного сообщить не могу.
Это и будет краеугольный камень - чтоб сделать программу, хорошо работающую с базой данных, необходимо знать структуру базы и язык sql для составления запросов. С языком не так сложно - скорее всего, тебе не понадобится вся его мощь с подзапросами в запросах. Но работать с базой не понимая ее структуры не возможно!

ps. по поводу кода, для связи с базой данных, посмотри мой код 2004 года с комментариями
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 30.08.2011, 01:50
#12
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


Есть одно "но": диалект SQL, который работает в Access, отличается от MS SQL Server. По мелочам, но этого достаточно
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 30.08.2011, 11:16
#13
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Насколько я смог понять формат БД одна таблица, которая содержит 18 полей тип данных числовой и текстовый, 2 числовых поля имеют размер "Двойное с плавающей точкой", остальные "Целое". Может код для R14 поможет понять структуру хранимых запросов.
Код:
[Выделить все]
 ; -------------- Вычисление даты  -----------
(defun date(/ xz xxz ans dp)
  (setq xz  (fix (getvar "cdate"))    
        xxz (/ xz 10000)             
        xz  (- xz (* xxz 10000))     
        ans (/ xz 100)                
        dp  (itoa (- xz (* ans 100)))
        ans (itoa ans)
  )
  (if (= (strlen ans) 1) (setq ans (strcat "0" ans)))
  (if (= (strlen dp) 1) (setq dp (strcat "0" dp)))
  (setq vrem (strcat dp "." ans "." (itoa xxz)))
) ; end date
;;;-------------------------------------------------------------------------------------
(defun dcl_p (/ dcl_r spis) 
   (setq spis (list (strcat "Зона      |" (rtos zona_n 2 0))
                    (strcat "Массив    |" (rtos mas_n 2 0))
                    (strcat "Квартал   |" (rtos kvar_n 2 0))
                    (strcat "Участок   |" (rtos uch_n 2 0))
                    (strcat "Недвиж1   |" (rtos ned1_n 2 0))
                    (strcat "Недвиж2   |" (rtos ned2_n 2 0))
              )
   )

   (if n_zd 
    (setq spis (reverse (cons (strcat "№ дома    |" n_zd) (reverse spis))))
   );end if

   (if s_uch
    (setq spis (reverse (cons (strcat "Площадь   |" (rtos s_uch 2 2)) (reverse spis))))
   );end if
   (if s_dok
    (setq spis (reverse (cons (strcat "Площ.док  |" (rtos s_dok 2 2)) (reverse spis))))
   );end if
   (if k_l
    (setq spis (reverse (cons (strcat "Код лица  |" k_l) (reverse spis))))
   );end if
   (if pred
    (setq spis (reverse (cons (strcat "Владелец  |" pred) (reverse spis))))
   );end if
   (if adr_or
    (setq spis (reverse (cons (strcat "Адрес     |" adr_or) (reverse spis))))
   );end if
   (if tip_zd
    (setq spis (reverse (cons (strcat "Тип здан. |" tip_zd) (reverse spis))))
   );end if
   (if nazn
    (setq spis (reverse (cons (strcat "Назнач.   |" nazn) (reverse spis))))
   );end if
   (if nm_fv
    (setq spis (reverse (cons (strcat "Тип влад. |" nm_fv) (reverse spis))))
   );end if
   (if n_post
    (setq spis (reverse (cons (strcat "№ пост.   |" n_post) (reverse spis))))
   );end if
   (if d_post 
    (setq spis (reverse (cons (strcat "Дата пост.|" d_post) (reverse spis))))
   );end if
   (if d_dok
    (setq spis (reverse (cons (strcat "Дата док. |" d_dok) (reverse spis))))
   );end if
   (if n_dok
    (setq spis (reverse (cons (strcat "№ док.    |" n_dok) (reverse spis))))
   );end if
   (if d_vv
    (setq spis (reverse (cons (strcat "Дата ввода|" d_vv) (reverse spis))))
   );end if
   (if d_kor
    (setq spis (reverse (cons (strcat "Дата корр.|" d_kor) (reverse spis))))
   );end if
   (if login_user
    (setq spis (reverse (cons (strcat "Кто делал:|" login_user) (reverse spis))))
   );end if


  (setq dcl_r (load_dialog "asi"))
  (if (not (new_dialog "viewrow" dcl_r))
   (progn
    (alert "Отсутствует или неверен файл asi.dcl")
    (unload_dialog dcl_r)
    (exit)
   );end progn
  );end if
   (start_list "ID_LBOX_COLS")
   (mapcar 'add_list spis)
   (end_list)
  (start_dialog)
  (unload_dialog dcl_r)
)
;;;-------------------------------------------------------------------------------------
(defun curs-name ()	; 
  (if (/= (type CURS-NAME-NUMBER) 'INT)		; init if was absent
    (setq CURS-NAME-NUMBER 0))
  (setq CURS-NAME-NUMBER (1+ CURS-NAME-NUMBER))
  (strcat "CURS-NAME" (itoa CURS-NAME-NUMBER))
)
;;;-------------------------------------------------------------------------------------
(defun inlist (lst str / ct tmpstr ret)
  (setq ct 0)
  (repeat (length lst)
    (setq tmpstr (nth ct lst))
    (if (wcmatch (strcase tmpstr) (strcat "*" str "*"))
      (setq ret T)
    )
    (setq ct (1+ ct))
  )
  ret
)
;;;-------------------------------------------------------------------------------------
(defun maybe-load-asilisp ( / err)
  (if (not (inlist (arx) "ASILISP") )	   ;if asilisp.arx is not loaded
    (progn
      (setq err (arxload "ASILISP" nil))
      (if (not err) 
        (alert "Не загружен файл asilisp.arx")
      )
    )
  )
)
;------------------------------------------------------------------------
(defun c:asis ( / envnames msg-choice-report retval
               statiment cursor fetch vrem cursor
              )
 (maybe-load-asilisp) 	        ; load asilisp.arx if needed
 (setq envnames (mapcar 'car (asi_getcfg "ENVIRONMENTS"))
       ase_errno 1
 )
 (if (= "" (car envnames))
  (setq envnames (cdr envnames))
 )
 (if (not (asi_objp SESSION))
  (if (listp (setq retval (list "BAZA" "" "")))
   (if (not (setq SESSION (asi_connect (car retval) (cadr retval) (caddr retval))))
    (alert "Связь с базой не установлена") 
   )
   (alert "Не верное имя связи")
  )
 )
 (if session
  (progn
   (if (or (not zona_n ) (= zona_n "")) (setq zona_n  0))
   (if (or (not mas_n  ) (= mas_n "")) (setq mas_n   0))
   (if (or (not kvar_n ) (= kvar_n "")) (setq kvar_n  0))
   (if (or (not uch_n  ) (= uch_n "")) (setq uch_n   0))
   (if (or (not ned1_n ) (= ned1_n "")) (setq ned1_n  0))
   (if (or (not ned2_n ) (= ned2_n "")) (setq ned2_n  0))
   (setq statiment (asi_prepare session (strcat "select zona_n,mas_n,kvar_n,uch_n,ned1_n,ned2_n from glag where zona_n=" (rtos zona_n 2 0) "and mas_n=" (rtos mas_n 2 0) "and kvar_n=" (rtos kvar_n 2 0) "and uch_n=" (rtos uch_n 2 0) "and ned1_n=" (rtos ned1_n 2 0) "and ned2_n=" (rtos ned2_n 2 0))))
   (if (not statiment) 
    (progn
     (alert "База данных имеет неверную структуру\nили занята другим приложением")
     (setq ase_errno nil)
    );end progn
    (progn
     (setq CURSOR (asi_alloc statiment (curs-name)))
     (asi_open cursor)
     (setq fetch (asi_fetch cursor))
     (if (not fetch)
      (progn 
       (date)
       (setq d_vv vrem)
       (asi_deallocstm statiment)
       (asi_close cursor)
       (setq statiment (asi_prepare session (strcat "INSERT INTO GLAG (zona_n,mas_n,kvar_n,uch_n,ned1_n,ned2_n) VALUES ("(rtos zona_n 2 0)","(rtos mas_n 2 0)","(rtos kvar_n 2 0)","(rtos uch_n 2 0)","(rtos ned1_n 2 0)","(rtos ned2_n 2 0)")")))
       (asi_execute statiment)
       (asi_deallocstm statiment)
       (setq statiment (asi_prepare session (strcat "select zona_n,mas_n,kvar_n,uch_n,ned1_n,ned2_n,n_zd,s_uch,s_dok,k_l,pred,adr_or,tip_zd,nazn,nm_fv,n_post,d_post,n_dok,d_dok,d_vv,d_kor,login_user from glag where zona_n=" (rtos zona_n 2 0) "and mas_n=" (rtos mas_n 2 0) "and kvar_n=" (rtos kvar_n 2 0) "and uch_n=" (rtos uch_n 2 0) "and ned1_n=" (rtos ned1_n 2 0) "and ned2_n=" (rtos ned2_n 2 0))))
       (setq CURSOR (asi_alloc statiment (curs-name)))
       (asi_open cursor)
       (setq fetch (asi_fetch cursor))
       (if n_zd (asi_update cursor (list (list "n_zd" n_zd))))
       (if s_uch (asi_update cursor (list (list "s_uch" s_uch))))
       (if s_dok (asi_update cursor (list (list "s_dok" s_dok))))
       (if k_l (asi_update cursor (list (list "k_l" k_l))))
       (if pred (asi_update cursor (list (list "pred" pred))))
       (if adr_or (asi_update cursor (list (list "adr_or" adr_or))))
       (if tip_zd (asi_update cursor (list (list "tip_zd" tip_zd))))
       (if nazn (asi_update cursor (list (list "nazn" nazn))))
       (if nm_fv (asi_update cursor (list (list "nm_fv" nm_fv))))
       (if n_post (asi_update cursor (list (list "n_post" n_post))))
       (if d_post (asi_update cursor (list (list "d_post" d_post))))
       (if d_dok (asi_update cursor (list (list "d_dok" d_dok))))
       (if n_dok (asi_update cursor (list (list "n_dok" n_dok)))) 
       (if d_vv (asi_update cursor (list (list "d_vv" d_vv))))
       (if login_user (asi_update cursor (list (list "login_user" login_user))))

       (if fetch
        (dcl_p)
        (progn
         (alert "Ошибка записи в базу")
         (setq ase_errno nil)
        );end progn
       );end if
      );end progn
      (progn
       (alert "Строка уже есть в базе")
       (setq ase_errno nil)
      );end progn
     );end if
     (asi_deallocstm statiment)
     (asi_close cursor)
    );end progn
   );end if
  );end progn
 );end if
; (asi_delete cursor)
(asi_disconnect session)
);end
.
И существующую БД я сумел конвертировать в *.mdb. По-этому меня интересует SQL для Access
Andru1968 вне форума  
 
Непрочитано 30.08.2011, 16:24
#14
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Никогда не работал с ASI/ASE, но вообще-то их поддержка осталась. Во всяком случае файл asilisp.arx присутствует.
Александр Ривилис вне форума  
 
Непрочитано 30.08.2011, 16:38
1 | #15
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
По-этому меня интересует SQL для Access
Да не это должно интересовать. В этой программе самые обычные запросы SELECT и INSERT.

Надо решать принципиально:
1. Зачем эта программа запихана в AutoCAD? Что она делает такого, чего бы не могло сделать нормальное приложение для работы с БД (хотя бы сама MS Access)? С помощью примитивных средств DCL ничего серьезного с БД сделать нельзя.

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

2. Такая "база данных" фактически пригодна только для однопользовательской работы и не должна быть на "сервере". На каком таком "сервере", кстати? На файловом? Но даже в этом случае должно быть множество средств для организации многопользовательской работы (блокировки и т.п.)

3. Судя по набору полей это БД каких-то объектов (зданий). Вообще все такие вещи элементарно делаются в программах - инструментальных средствах ГИС. В том числе в недорогих или "практически бесплатных", таких как ObjectLand. Там всё необходимое, включая работу с БД, встроено в систему и доступно на уровне "секретарши".

В AutoCAD же для решения таких задач требуется серьезное программирование, с не очень надежным результатом. Особенно если "не знаю английского" , "нет defun c:" и т.п.

Возьмите более подходящий инструмент! Ну, конечно можно и ADOLisp использовать - это великолепная библиотека. Но для её использования надо очень много знать.

Есть и самый правильный вариант - нанять специалиста.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 30.08.2011, 16:50
#16
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


asilisp.arx присутствует это правда за asicfg.exe и т.д. отсутствует

ShaggyDoc

При щелчке по объекту получаем информацию из БД, так оно и происходит. Приведенная программа я так понял устанавливала соединение с БД
Код:
[Выделить все]
 (defun lar ()
 (unload_dialog dcl_r)
 (command "_layer" "_OFF" "*" "_Y" "_S" onlayer "")
 (while lao
  (command "_layer" "_ON" (car lao) "")
  (setq lao (cdr lao))
 )
 (setq uu nil)
 (c:reva)
);end lar
 ;========================ОКНА ПОЛЬЗОВАТЕЛЯ (и двери)==========================
(defun polzo (/ dcl_u tpr)
 (setq dcl_u (load_dialog "polz.dcl"))
 (if (= k_l "1")
  (progn
   (setq tpr "1")
   (if (not (new_dialog "pl21" dcl_u))
    (progn
     (alert "Отсутствует или неверен файл polz.dcl")
     (lar)
     (exit)
    )
   )
   (action_tile "pr" "(setq tpr \"2\") (mode_tile \"pr\" 0)")
   (action_tile "fz" "(setq tpr \"1\") (mode_tile \"fz\" 0)")
   (action_tile "accept" "(done_dialog)")
   (start_dialog)
   (if (= tpr "1")
    (progn
     (setq nazn "18")
     (if (not (new_dialog "pl311" dcl_u))
      (progn
       (alert "Отсутствует или неверен файл polz.dcl")
       (lar)
       (exit)
      )
     )
     (action_tile "gd"
      "(setq nazn \"фактически занимаемого жилым домом усадебного типа\")(mode_tile \"gd\" 0)"
     )
     (action_tile "pe" "(setq nazn \"4\") (mode_tile \"pe\" 0)")
     (action_tile "bl"
      "(setq nazn \"фактически занимаемого хозблоком\")(mode_tile \"bl\" 0)"
     )
     (action_tile "st"
      "(setq nazn \"фактически занимаемого садовым товариществом\")(mode_tile \"st\" 0)"
     )
     (action_tile "ph"
      "(setq nazn \"фактически занимаемого подсобным хозяйством\")(mode_tile \"ph\" 0)"
     )
     (action_tile "og"
      "(setq nazn \"фактически занимаемого огородом\")(mode_tile \"og\" 0)"
     )
     (action_tile "sp"
      "(setq nazn \"фактически занимаемого с/х предприятием\")(mode_tile \"sp\" 0)"
     )
     (action_tile "gs"
      "(setq nazn \"фактически занимаемого ЖСК\")(mode_tile \"gs\" 0)"
     )
     (action_tile "sk"
      "(setq nazn \"фактически занимаемого ГСК\")(mode_tile \"sk\" 0)"
     )
     (action_tile "av"
      "(setq nazn \"фактически занимаемого автостоянкой\")(mode_tile \"av\" 0)"
     )
     (action_tile "pro" "(setq nazn \"18\") (mode_tile \"pro\" 0)")
     (action_tile "accept" "(done_dialog)")
     (start_dialog)
    )
    (progn
     (setq nazn "18")
     (if (not (new_dialog "pl312" dcl_u))
      (progn
       (alert "Отсутствует или неверен файл polz.dcl")
       (lar)
       (exit)
      )
     )
     (action_tile "gd"
      "(setq nazn \"предоставленного для строительства жилого дома\")(mode_tile \"gd\" 0)"
     )
     (action_tile "pe" "(setq nazn \"4\") (mode_tile \"pe\" 0)")
     (action_tile "bl"
      "(setq nazn \"предоставленного для строительства хозблока\")(mode_tile \"bl\" 0)"
     )
     (action_tile "st"
      "(setq nazn \"предоставленного садовому товариществу\")(mode_tile \"st\" 0)"
     )
     (action_tile "ph"
      "(setq nazn \"предоставленного для подсобного хозяйства\")(mode_tile \"ph\" 0)"
     )
     (action_tile "og"
      "(setq nazn \"предоставленного для огородничества\")(mode_tile \"og\" 0)"
     )
     (action_tile "sp" "(setq nazn \"предоставленного с/х предприятию\")(mode_tile \"sp\" 0)")
     (action_tile "gs" "(setq nazn \"предоставленного ЖСК\")(mode_tile \"gs\" 0)")
     (action_tile "sk" "(setq nazn \"предоставленного ГСК\")(mode_tile \"sk\" 0)")
     (action_tile "av" "(setq nazn \"предоставленного для автостоянки\")(mode_tile \"av\" 0)")
     (action_tile "pro" "(setq nazn \"18\") (mode_tile \"pro\" 0)")
     (action_tile "accept" "(done_dialog)")
     (start_dialog)
    )
   )
   (if (= nazn "4")
    (progn
     (if (not (new_dialog "pl4" dcl_u))
      (progn
       (alert "Отсутствует или неверен файл polz.dcl")
       (lar)
       (exit)
      )
     )
     (action_tile "accept"(strcat "(progn (setq floor (get_tile \"floor\"))" "(done_dialog))"))
     (start_dialog)
     (unload_dialog dcl_u)
     (if (= tpr "1")
      (setq nazn (strcat "фактически занимаемого " floor "-этажным жилым домом"))
      (setq nazn (strcat "предоставленного для строительства " floor "-эт. дома"))
     )
    )
   )
  )
  (progn
   (setq tpr "1")
   (if (not (new_dialog "pl22" dcl_u))
    (progn
     (alert "Отсутствует или неверен файл polz.dcl")
     (lar)
     (exit)
    )
   )
   (action_tile "pr" "(setq tpr \"2\") (mode_tile \"pr\" 0)")
   (action_tile "fz" "(setq tpr \"1\") (mode_tile \"fz\" 0)")
   (action_tile "accept" "(done_dialog)")
   (start_dialog)
   (if (= tpr "1")
    (progn
     (setq nazn "18")
     (if (not (new_dialog "pl321" dcl_u))
      (progn
       (alert "Отсутствует или неверен файл polz.dcl")
       (lar)
       (exit)
      )
     )
     (action_tile "dv"
      "(setq nazn \"фактически занимаемого домовладением\")(mode_tile \"dv\" 0)"
     )
     (action_tile "sv"
      "(setq nazn \"фактически занимаемого садовым участком\")(mode_tile \"sv\" 0)"
     )
     (action_tile "gz"
      "(setq nazn \"фактически занимаемого индивидуальным огородом\")(mode_tile \"gz\" 0)"
     )
     (action_tile "ga"
      "(setq nazn \"фактически занимаемого индивидуальным гаражом\")(mode_tile \"ga\" 0)"
     )
     (action_tile "pro" "(setq nazn \"18\") (mode_tile \"pro\" 0)")
     (action_tile "accept" "(done_dialog)")
     (start_dialog)
    )
    (progn
     (setq nazn "18")
     (if (not (new_dialog "pl322" dcl_u))
      (progn
       (alert "Отсутствует или неверен файл polz.dcl")
       (lar)
       (exit)
      )
     )
     (action_tile "dv"
      "(setq nazn \"предоставленного для строительства жилого дома\")(mode_tile \"dv\" 0)"
     )
     (action_tile "sv"
      "(setq nazn \"предоставленного для индивидуального садоводства\")(mode_tile \"sv\" 0)"
     )
     (action_tile "gz"
      "(setq nazn \"предоставленного для огородничества\")(mode_tile \"gz\" 0)"
     )
     (action_tile "ga"
      "(setq nazn \"предоставленного для индивидуального гаража\")(mode_tile \"GA\" 0)"
     )
     (action_tile "pro" "(setq nazn \"18\") (mode_tile \"pro\" 0)")
     (action_tile "accept" "(done_dialog)")
     (start_dialog)
    )
   )
  )
 )
 (if (= nazn "18")
  (progn
   (if (= tpr "1")
    (progn
     (if (not (new_dialog "pl5" dcl_u))
      (progn
       (alert "Отсутствует или неверен файл polz.dcl")
       (lar)
       (exit)
      )
     )
     (action_tile "accept"(strcat "(progn (setq taget (get_tile \"cn\"))" "(done_dialog))"))
     (start_dialog)
     (setq nazn (strcat "фактически занимаемого " taget))
    )
    (progn
     (if (not (new_dialog "pl51" dcl_u))
      (progn
       (alert "Отсутствует или неверен файл polz.dcl")
       (lar)
       (exit)
      )
     )
     (action_tile "accept"(strcat "(progn (setq taget (get_tile \"cn1\"))" "(done_dialog))"))
     (start_dialog)
     (setq nazn (strcat "предоставленного " taget))
    )
   )
  )
 )
 (unload_dialog dcl_u)
);end polzo
 ;--------------------------расширение данных--------------------------
(defun r (/ metka newent)
 (regapp "BAZA")
 (setq metka (list -3(list "BAZA" '(1002 . "}")(cons 1005 u_n)(cons 1000 kadn)'(1002 . "{")))
      newent (append (entget prim) (list metka))
 )
 (entmod newent)
);end r
 ;-----------------------Автоматический выбор масштаба------------------------
(defun lange (/ stp x y xmin xmax ymin ymax)
 (setq stp   sp
      xmin   10000000
      ymin   10000000
      xmax  -10000000
      ymax  -10000000
 )
 (while stp
  (setq x (car (car stp))  y (cadr (car stp))  stp (cdr stp))
  (if (< x xmin) (setq xmin x))
  (if (> x xmax) (setq xmax x))
  (if (< y ymin) (setq ymin y))
  (if (> y ymax) (setq ymax y))
 )
 (if (or (equal osho "BLOCK") (equal osho "PLOT") (equal osho "BUILDING"))
  (setq xymin (list (- xmin 2) (- ymin 2)) xymax (list (+ xmax 2) (+ ymax 2)))
  (setq xymin (list (- xmin 50) (- ymin 50)) xymax (list (+ xmax 50) (+ ymax 50)))
 )
);end lange
 ;-----------------------отрисовка границы участка---------------------------
(defun gran (/ pt1 pt2 spi n spi1)
 (while (not pt1) (setq pt1 (getpoint "\n Первая точка: ")))
 (while (or (not pt2) (equal pt1 pt2)) (setq pt2 (getpoint pt1 "\n Следующая точка: ")))
 (command "_pline" pt1 pt2)
 (setq spi (list pt1 pt2)   pt1 pt2   pt2 nil)
 (while (or (not pt2) (equal pt2 (car spi)) (equal pt2 (cadr spi)))
  (setq pt2 (getpoint pt1 "\n Следующая точка: "))
 )
 (while (or pt2 n)
  (if (not n)
   (progn
    (command pt2)
    (setq spi (cons pt2 spi)    pt1 pt2)
   )
  )
  (setq n nil   pt2 (getpoint pt1 "\n Следующая точка: "))
  (if pt2
   (progn
    (setq spi1 spi)
    (while (and spi1 (not n))
     (if (< (distance pt2 (car spi1)) 0.05)
      (progn
       (setq n 1)
       (princ "\n")
       (alert "Расстояние между точками меньше 5 см")
      )
     )
     (setq spi1 (cdr spi1))
    )
   )
  )
 )
 (command "_c")
 (setq gr (entlast))
);end gran
 ;-------------------определение координат вершин мн-ка----------------------
(defun kgran (/ p1 p2)
 (setq sp nil p1 (entget gr))
 (while p1
  (setq p2 (car p1))
  (if (= (car p2) 10) (setq sp (append sp (list (list (caddr p2) (- (cadr p2)))))))
  (setq p1 (cdr p1))
 )
);end kgran 
 ;------------------ из списка строк получаем список чисел -------------------
 (defun satori (/ spi ele ccc)
  (if (equal osho "BUILDING") (setq ccc 4) (setq ccc 4))
  (setq spi (list 0))
  (while sp
   (setq ele (atoi (substr (car sp) ii ccc))  spi (append spi (list ele))  sp (cdr sp))
  )
  (setq sp (cdr spi))
 );end satori
 ;----------------------если дом строится не на участке----------------------
 (defun samadhi (/ spi)
  (setq spi (list 0))
  (while sp
   (if (= (atoi (substr (car sp) 10 4)) 0) (setq spi (append spi (list (car sp)))))
   (setq sp (cdr sp))
  )
  (setq sp (cdr spi))
 );end samadhi
 ;------------------------находит пропущенные номера-------------------------
 (defun pron (/ i)
  (setq i 0    man nil)
  (while (and (< i n) (not man))
   (setq i (1+ i))
   (if (not (member i sp)) (setq man i))
  )
 );end pron
 ;-----------------проверяет список на наличие близких точек-----------------
 (defun blito (/ spi spi1)
  (setq spi sp)
  (while spi
   (setq spi1 (cdr spi))
   (while spi1
    (if (< (distance (car spi) (car spi1)) 0.05)
     (progn
      (alert "Расстояние между конечными точками меньше 5 см")
      (lar)
      (exit)
     )
    )
    (setq spi1 (cdr spi1))
   )
   (setq spi (cdr spi))
  )
 );end blito
 ;----------------------перенос зданий со слоя UNCLOSED------------------------
 (defun tada (/ i)
  (setq jj 1)
  (while jj
   (setq gr (car (entsel "\n Укажите границу здания \n")))
   (if (and gr (= (cdr (assoc 8 (entget gr))) "UNCLOSED")) (setq jj nil))
  )
  (if (/= (cdr (assoc 0 (entget gr))) "LWPOLYLINE")
   (progn
    (alert "Примитив не является полилинией")
    (lar)
    (exit)
   )
  )
  (if (and (/= (cdr (assoc '70 (entget gr))) 1) (/= (cdr (assoc '70 (entget gr))) 129))
   (progn
    (alert "Полилиния не является замкнутой")
    (lar)
    (exit)
   )
  )
  (kgran)
  (blito)
  (lange)
  (setq jj (ssget "cp" sp (list (cons 0 "text") (cons 8 "UNCLOSED"))))
  (command "_chprop" gr "" "_la" "building" "_c" 202 ""  "_zoom" "_w" xymin xymax)
  (if jj  (command "_chprop" jj "" "_la" "building" "_c" 202 ""))
  (setq   jj nil       i (car (entsel "Можно указать на тип здания ")))
   (if (and i (= (cdr (assoc 8 (entget i))) "BUILDING")(= (cdr (assoc 0 (entget i))) "TEXT"))
    (progn
     (setq shri (cdr (assoc 1 (entget i))))
     (entdel i)
    )
    (setq shri "")
   )
 );end tada
 ;-----выбирает из списка max число (man)---возвращает число элементов (n)-----
 (defun mano (/ spi)
  (setq man 0   spi sp   n 0)
  (while spi
   (if (> (car spi) man) (setq man (car spi)))
   (setq spi (cdr spi)   n (+ n 1))
  )
 );end mano 
 ;===========================================================================
(defun c:raj (/ a la lao n onlayer uu gr dcl_r man nov vih ii da txt shuba lll sp xymin xymax vv
                u_n areanew ase_errno prim priml tv osho yyy zona_n mas_n kvar_n uch_n ned1_n
                ned2_n n_dok d_dok n_zd zona_s mas_s kvar_s uch_s ned1_s ned2_s d_kor d_vv login_user nazn
                s_uch s_dok k_l pred adr_or tip_zd nm_fv n_post d_post nom_z nam_z nom_m
                nom_k nom_u no_zd jj jo aaa aam aak aau aaz kadn u_nu r_nr r_na k_nk shri j3 cc
             )
 (if (not c:reva) (load "revar")) (c:reva)
 (setq a (tblnext "layer" 0)  la ""  onlayer (getvar "clayer"))
 (while a
  (setq n 1)
  (while (and a (< n 20))
   (setq a (tblnext "layer"))
   (if (> (cdr (assoc 62 a)) 0)
    (progn
     (setq n (1+ n))
     (setq la (strcat la (cdr (cadr a)) ","))
    )
   )
  )
  (setq lao (cons la lao)  la "")
 )
 (command "_layer" "_OFF" "*" "_Y" "")
 (setq osho (strcase (getvar "users1")))
 (if (tblsearch "layer" osho)
  (progn
   (command "_layer" "_s" osho "" "_color")
   (if (equal osho   "ZONA"  ) (command 242))
   (if (equal osho  "MASSIV" ) (command  67))
   (if (equal osho   "BLOCK" ) (command 162))
   (if (equal osho   "PLOT"  ) (command 102))
   (if (equal osho "BUILDING") (command 202))
  )
  (progn
   (command "_LAYER" "_n" osho "_c")
   (if (equal osho   "ZONA"  ) (command 242))
   (if (equal osho  "MASSIV" ) (command  67))
   (if (equal osho   "BLOCK" ) (command 162))
   (if (equal osho   "PLOT"  ) (command 102))
   (if (equal osho "BUILDING") (command 202))
   (command osho "_s" osho "")
  )
 )
 (command "_layer" "_ON")
 (if (equal osho    "ZONA") (command "TOWN"))
 (if (equal osho  "MASSIV") (command "ZONA"))
 (if (equal osho   "BLOCK") (command "MASSIV"))
 (if (equal osho "PLOT") (command "BLOCK,BUILDING,UNCLOSED,OGRADA,REDLINE,STREET"))
 (if (equal osho "BUILDING")(command "BLOCK,UNCLOSED,REDLINE,STREET,PLOT"))
 (command "")
 (if (equal osho "ZONA") (command "_zoom" "_e"))
 (setq uu nil  uu (ssget "x" (list (cons 0 "text") (cons 8 osho))))
 (if (equal osho   "ZONA"  ) (setq yyy "zon.dcl"))
 (if (equal osho  "MASSIV" ) (setq yyy "mas.dcl"))
 (if (equal osho   "BLOCK" ) (setq yyy "kva.dcl"))
 (if (equal osho   "PLOT"  ) (setq yyy "uch.dcl"))
 (if (equal osho "BUILDING") (setq yyy "zda.dcl"))
 (setq dcl_r (load_dialog yyy)   n 0)
 (while (not ase_errno)
  (while (not a)
   (while (or (not nom_z) (not nam_z))
    (if (not (new_dialog "rw1" dcl_r))
     (progn
      (alert (strcat "Отсутствует или неверен файл " yyy))
      (lar)
      (exit)
     )
    )
    (if (or (equal osho "ZONA") (equal osho "MASSIV") (equal osho "BLOCK"))
     (action_tile "accept"
      "(progn (setq nom_z (get_tile \"zona_n\") nam_z (get_tile \"mas_n\"))(done_dialog))"
     )
     (if (equal osho "PLOT")
      (action_tile "accept"
       "(progn(setq nom_z(get_tile \"zona_n\")nam_z(get_tile \"mas_n\")nom_k(get_tile \"kvar_n\"))(done_dialog))"
      )
      (action_tile "accept"
       "(progn(setq nom_z(get_tile \"zona_n\")nam_z(get_tile \"mas_n\")nom_k(get_tile \"kvar_n\")nom_u(get_tile \"uch_n\"))(done_dialog))"
      )
     )
    )
    (start_dialog)
    (setq nom_z (atoi nom_z))
    (if (or (/= (type nom_z) 'int) (<= nom_z 0) (> nom_z 99))
     (progn
      (alert "Номер зоны должен быть числом от 1 до 99")
      (setq nom_z nil)
     );progn
    )
    (if (and (equal osho "ZONA") (or (> (strlen nam_z) 20) (< (strlen nam_z) 1)))
     (progn
      (alert "Размер названия зоны от 1 до 20 символов")
      (setq nam_z nil)
     );progn
    )
    (if (or (equal osho "MASSIV")(equal osho "BLOCK")(equal osho "PLOT")(equal osho "BUILDING"))
     (progn
      (setq nam_z (atoi nam_z))
      (if (or (/= (type nam_z) 'int) (<= nam_z 0) (> nam_z 99))
       (progn
        (alert "Номер массива должен быть числом от 1 до 99")
        (setq nam_z nil)
       );progn
      )
     )
    )
    (if (or (equal osho "PLOT") (equal osho "BUILDING"))
     (progn
      (setq nom_k (atoi nom_k))
      (if (or (/= (type nom_k) 'int) (<= nom_k 0) (> nom_k 99))
       (progn
        (alert "Номер квартала должен быть числом от 1 до 99")
        (setq nam_z nil)
       );progn
      )
     )
    )
    (if (equal osho "BUILDING")
     (progn
      (if (or (not nom_u) (= nom_u "")) (setq nom_u "0"))
      (setq nom_u (atoi nom_u))
      (if (or (< nom_u 0) (> nom_u 9999))
       (progn
        (alert "Номер участка может быть неотрицательным числом до 9999")
        (setq nam_z nil)
       );progn
      )
     )
    )
   )
   (if (/= osho "ZONA") (setq nom_m nam_z  nam_z nil))
   (if (and (not jo) (equal osho "MASSIV"))
    (progn
     (setq jj (ssget "x" (list (cons 0 "text") (cons 8 "ZONA")))   jo nil)
     (while (and jj (ssname jj 0) (not jo))
      (if (= nom_z (atoi (cdr (assoc 1 (entget (ssname jj 0))))))
       (setq jo (ssname jj 0))
      )
      (ssdel (ssname jj 0) jj)
     )
     (setq jj nil)
     (if (not jo)
      (progn
       (alert "Зоны с указанным номером нет в карте")
       (lar)
       (exit)
      )
      (if (equal osho "MASSIV")
       (progn
        (setq gr (handent(cdr(assoc '1005(cdr(cadr(assoc '-3(entget jo (list "BAZA")))))))))
        (kgran)
        (lange)
        (command "_zoom" "_w" xymin xymax)
       )
      )
     )
    )
   )
   (if (and (not jo) (equal osho "BLOCK"))
    (progn
     (if (< nom_z 10)
      (setq aaa (strcat "0" (rtos nom_z 2 0)))
      (setq aaa (rtos nom_z 2 0))
     )
     (if (< nom_m 10)
      (setq aam (strcat aaa " 0" (rtos nom_m 2 0)))
      (setq aam (strcat aaa " "  (rtos nom_m 2 0)))
     )
     (setq jj (ssget "x" (list (cons 0 "text") (cons 8 "MASSIV"))))
     (while (and jj (ssname jj 0) (not jo))
      (if (equal aam (cdr (assoc 1 (entget (ssname jj 0))))) (setq jo (ssname jj 0)))
      (ssdel (ssname jj 0) jj)
     )
     (setq jj nil)
     (if (not jo)
      (progn
       (alert "Массива с указанным номером нет в карте")
       (lar)
       (exit)
      )
      (if (equal osho "BLOCK")
       (progn
        (setq gr (handent(cdr(assoc '1005(cdr(cadr(assoc '-3 (entget jo (list "BAZA")))))))))
        (kgran)
        (lange)
        (command "_zoom" "_w" xymin xymax)
        (blito)
        (setq jj (ssget "cp" sp (list (cons 0 "text") (cons 8 "BLOCK"))))
        (if jj
         (progn
          (setq sp (list 0)    n 0)
          (while (< n (sslength jj))
           (setq sp (append sp (list (cdr (assoc 1 (entget (ssname jj n))))))  n (1+ n))
          )
          (setq sp (cdr sp)   jj nil   n nil   ii 7)
          (satori)
          (mano)
          (if (= man n)
           (setq nom_k (1+ man))
           (progn
            (pron)
            (setq nom_k man)
           )
          )
          (if (> nom_k 99)
           (progn
            (alert "В массиве уже есть 99 кварталов. Нужно делить массив.")
            (lar)
            (exit)
           )
          )
         )
         (setq nom_k 1)
        )
       )
      )
     )
    )
   )
   (if (and (not jo) (or (equal osho "BUILDING") (equal osho "PLOT")))
    (progn
     (if (< nom_z 10)
      (setq aaa (strcat "0" (rtos nom_z 2 0)))
      (setq aaa (rtos nom_z 2 0))
     )
     (if (< nom_m 10)
      (setq aam (strcat aaa " 0" (rtos nom_m 2 0)))
      (setq aam (strcat aaa " "  (rtos nom_m 2 0)))
     )
     (if (< nom_k 10)
      (setq aak (strcat aam " 0" (rtos nom_k 2 0)))
      (setq aak (strcat aam " "  (rtos nom_k 2 0)))
     )
     (setq jj (ssget "x" (list (cons 0 "text") (cons 8 "BLOCK"))))
     (while (and jj (ssname jj 0) (not jo))
      (if (equal aak (cdr (assoc 1 (entget (ssname jj 0))))) (setq jo (ssname jj 0)))
      (ssdel (ssname jj 0) jj)
     )
     (setq jj nil)
     (if (not jo)
      (progn
       (alert "Квартала с указанным номером нет в карте")
       (lar)
       (exit)
      )
      (progn
       (if (or (equal osho "PLOT") (and (equal osho "BUILDING") (= nom_u 0)))
        (progn
         (setq gr (handent(cdr(assoc '1005(cdr(cadr(assoc '-3(entget jo(list "BAZA")))))))))
         (kgran)
         (lange)
         (command "_zoom" "_w" xymin xymax)
        )
       )
       (if (equal osho "PLOT")
        (progn
         (blito)
         (setq jj  (ssget "cp" sp (list (cons 0 "text") (cons 8 "PLOT"))))
         (if jj
          (progn
           (setq sp (list 0)    n 0)
           (while (< n (sslength jj))
            (setq sp (append sp (list (cdr (assoc 1 (entget (ssname jj n)))))) n (1+ n))
           )
           (setq sp (cdr sp)   jj nil   n nil   ii 10)
           (satori)
           (mano)
           (setq nom_u (1+ man))
           (if (> nom_u 9999)
            (progn
             (alert "В квартале уже есть 9999 участков. Нужно делить квартал.")
             (lar)
             (exit)
            )
           )
          )
          (setq nom_u 1)
         )
        )
       )
      );progn
     )
    )
   )
   (if (equal osho "BUILDING")
    (progn
     (if (< nom_u 10)
      (setq aau (strcat aak ":000" (rtos nom_u 2 0)))
     (if (< nom_u 100)
      (setq aau (strcat aak ":00" (rtos nom_u 2 0)))
     (if (< nom_u 1000)
      (setq aau (strcat aak ":0" (rtos nom_u 2 0)))
      (setq aau (strcat aak ":"  (rtos nom_u 2 0)))
     )))
     (if (/= nom_u 0)
      (progn
       (setq jo nil   jj (ssget "x" (list (cons 0 "text") (cons 8 "PLOT"))))
       (while (and jj (ssname jj 0) (not jo))
        (if (equal aau (cdr (assoc 1 (entget (ssname jj 0))))) (setq jo (ssname jj 0)))
        (ssdel (ssname jj 0) jj)
       )
       (setq jj nil)
       (if (not jo)
        (progn
         (alert "Участка с указанным номером нет в карте")
         (lar)
         (exit)
        )
        (progn
         (setq gr (handent(cdr(assoc '1005(cdr(cadr(assoc '-3(entget jo(list "BAZA")))))))))
         (kgran)
         (lange)
         (command "_zoom" "_w" xymin xymax)
        )
       )
      )
     )
     (blito)
     (setq jj (ssget "cp" sp (list (cons 0 "LWPOLYLINE") (cons 70   1) (cons 8 "BUILDING"))))
     (setq j3 (ssget "cp" sp (list (cons 0 "LWPOLYLINE") (cons 70 129) (cons 8 "BUILDING"))))
     (if (not jj) (setq jj j3 j3 nil))
     (setq n 0)
     (while (and j3 (< n (sslength j3))) (setq jj (ssadd (ssname j3 n) jj)  n (1+ n)))
     (if jj
      (progn
       (setq sp (list 0)    n 0)
       (while (< n (sslength jj))
        (if (assoc '1000 (cdr (cadr (assoc '-3 (entget (ssname jj n) (list "BAZA"))))))
         (setq sp (append sp (list (cdr (assoc '1000 (cdr (cadr (assoc '-3 (entget (ssname jj n) (list "BAZA"))))))))))
        )
        (setq n (1+ n))
       )
       (setq sp (cdr sp)   jj nil   n nil   ii 15);****************** 15-13
       (if (= nom_u 0) (samadhi))
       (satori)
       (mano)
       (if (= man n)
        (setq no_zd (1+ man))
        (progn
         (pron)
         (setq no_zd man)
        )
       )
       (if (> no_zd 9999)
        (progn
         (alert "В участке как будто уже есть 9999 зданий. Что поделаешь?")
         (lar)
         (exit)
        )
       )
      )
      (setq no_zd 1)
     )
    )
   )
   (setq jo nil)
   (if (< nom_z 10)
    (setq aaa (strcat "0" (rtos nom_z 2 0)))
    (setq aaa (rtos nom_z 2 0))
   )
   (if uu
    (while (< n (sslength uu))
     (if (and (equal osho "ZONA") (= aaa (cdr (assoc 1 (entget (ssname uu n))))))
      (progn
       (alert "Зона с таким номером уже есть в карте\n     Введите другой номер зоны")
       (setq n (sslength uu)   a 0)
      )
     )
     (if (equal osho "MASSIV")
      (progn
       (if (< nom_m 10)
        (setq aam (strcat aaa " 0" (rtos nom_m 2 0)))
        (setq aam (strcat aaa " "  (rtos nom_m 2 0)))
       )
       (if (equal aam (cdr (assoc 1 (entget (ssname uu n)))))
        (progn
         (alert "Массив с таким номером уже есть в карте\n    Введите другой номер массива")
         (setq n (sslength uu)   jo nil   a 0)
        )
       )
      )
     )
     (if (< n (sslength uu)) (setq n (1+ n)))
    )
   )
   (if (= a 0)
    (progn
     (setq   a nil   n 0   nom_z nil)
     (if (equal osho  "ZONA" ) (setq nam_z nil  aaa nil))
     (if (equal osho "MASSIV") (setq nom_m nil  aam nil))
    )
    (setq a 1)
   )
  )
  (while (not areanew)
   (if (equal osho "BUILDING")
    (progn
     (if (not (new_dialog "zdun" dcl_r))
      (progn
       (alert (strcat "Отсутствует или неверен файл " yyy))
       (command "_erase" gr (entlast) "")
       (lar)
       (exit)
      )
     )
     (action_tile "accept"
      "(progn 
        (setq nov (get_tile \"nov\")    vih (get_tile \"vih\"))
        (done_dialog)
       )"
     )
     (start_dialog)
     (if (= (atoi vih) 1) (setq shuba 3))
    )
   )
   (if (/= shuba 3)
    (progn
     (if (not (new_dialog "rw2" dcl_r))
      (progn
       (alert (strcat "Отсутствует или неверен файл " yyy))
       (lar)
       (exit)
      )
     )
     (action_tile "accept" "(done_dialog)")
     (start_dialog)
     (gran)
    )
    (tada)
   )
   (setq u_n  (cdr (assoc 5 (entget gr)))     priml  gr)
   (if (/= shuba 3)
    (progn
     (kgran)
     (lange)
     (command "_zoom" "_w" xymin xymax)
    )
   )
   (command "_chprop" gr "" "lt" "continuous" "")
   (if (equal osho "ZONA")
    (progn
     (command "_pedit"  gr "_w" 20 "")
     (princ "\n Укажите точку вставки номера зоны\n")
    )
   )
   (if (equal osho "MASSIV")
    (progn
     (command "_pedit"  gr "_w" 10 "")
     (princ "\n Укажите точку вставки номера массива\n")
    )
   )
   (if (equal osho "BLOCK") (princ "\n Укажите точку вставки номера квартала\n"))
   (if (equal osho "PLOT") (princ "\n Укажите точку вставки номера участка\n"))
   (if (and nom_m (not aam))
    (if (< nom_m 10)
     (setq aam (strcat aaa " 0" (rtos nom_m 2 0)))
     (setq aam (strcat aaa " "  (rtos nom_m 2 0)))
    )
   )
   (if nom_k
    (if (< nom_k 10)
     (setq aak (strcat aam " 0" (rtos nom_k 2 0)))
     (setq aak (strcat aam " "  (rtos nom_k 2 0)))
    )
   )
   (if nom_u
    (if (< nom_u 10)
     (setq aau (strcat aak ":000" (rtos nom_u 2 0)))
     (if (< nom_u 100)
      (setq aau (strcat aak ":00" (rtos nom_u 2 0)))
     (if (< nom_u 1000)
      (setq aau (strcat aak ":0" (rtos nom_u 2 0)))
     (setq aau (strcat aak ":"  (rtos nom_u 2 0)))
    )
   )));************
   (if no_zd
    (if (< no_zd 10)
     (setq aaz (strcat aau ":000" (rtos no_zd 2 0)))
     (if (< no_zd 100)
      (setq aaz (strcat aau ":00" (rtos no_zd 2 0)))
      (if (< no_zd 1000)
       (setq aaz (strcat aau ":0" (rtos no_zd 2 0)))
       (setq aaz (strcat aau ":"  (rtos no_zd 2 0)))
      )
     )
    )
   )
   (if (equal osho   "ZONA"  ) (setq kadn aaa))
   (if (equal osho  "MASSIV" ) (setq kadn aam))
   (if (equal osho   "BLOCK" ) (setq kadn aak))
   (if (equal osho   "PLOT"  ) (setq kadn aau))
   (if (equal osho "BUILDING") (setq kadn aaz))
   (if (not (equal osho "BUILDING"))
    (progn
     (command "_text" "_M" "0,0")
     (if (equal osho   "ZONA"  ) (command 80 "90" aaa))
     (if (equal osho  "MASSIV" ) (command 50 "90" aam))
     (if (equal osho   "BLOCK" ) (command 30 "90" aak))
     (if (equal osho   "PLOT"  ) (command  2 "90" aau))
     (setq tv (list 0 0))
     (while (< (distance tv (list 0 0)) 1)
      (command "_move" (entlast) "" "0,0" pause)
      (setq tv (cdr (assoc '11 (entget (entlast))))  tv (list (cadr tv) (- (car tv))))
     )
     (command "_zoom" "_p")
     (setq prim (entlast))
     (r)
     (setq u_n  (cdr (assoc 5 (entget (entlast))))  prim  priml)
     (r)
    )
   )
   (setq zona_n nom_z)
   (if (equal osho "ZONA"  ) (setq adr_or nam_z))
   (if (equal osho "MASSIV") (setq mas_n  nom_m   adr_or  nam_z))
   (if (equal osho "BLOCK" ) (setq mas_n  nom_m   kvar_n  nom_k))
   (if (equal osho "PLOT"  ) (setq mas_n  nom_m   kvar_n  nom_k   uch_n nom_u))
   (if (equal osho "BUILDING") (setq mas_n nom_m kvar_n  nom_k uch_n nom_u ned1_n no_zd))
   (command "_area" "_e" gr)
   (setq areanew (getvar "area"))
  ;--------------------округление---------------------------------------
   (if (< (-  areanew (/ (float (fix (* 100 areanew))) 100)) 0.005)
    (setq areanew (/ (float (fix (* 100 areanew))) 100))
    (setq areanew (+ 0.01 (/ (float (fix (* 100 areanew))) 100)))
   )
  ;----------------------------------------------------------------------
   (if (> areanew 999999999.99)
    (progn
     (alert "       Слишком большой участок\n(площадь не должна превышать 1000000000)")
     (command "_erase" gr (entlast) "")
     (setq areanew nil)
    )
   )
  )
  (setq login_user (getvar "LOGINNAME"))
  (setq s_uch areanew)
  (if (equal osho "PLOT")
   (progn
    (if (not (new_dialog "kl" dcl_r))
     (progn
      (alert (strcat "Отсутствует или неверен файл " yyy))
      (command "_erase" gr (entlast) "")
      (lar)
      (exit)
     )
    )
    (action_tile "accept" "(progn(setq nov(get_tile \"nov\")vih(get_tile \"vih\"))(done_dialog))")
    (start_dialog)
    (if (= (atoi vih) 1) (setq k_l "2") (setq k_l "1"))
    (setq vv "(progn(setq s_dok(get_tile \"s_dok\")pred(get_tile \"pred\")"
          cc "adr_or(get_tile \"adr_or\")nm_fv(get_tile \"nm_fv\"))(done_dialog))"
          jo nil
    )
    (while (not jo)
     (setq jo 1)
     (if (not (new_dialog "pans" dcl_r))
      (progn
       (alert (strcat "Отсутствует или неверен файл " yyy))
       (command "_erase" gr (entlast) "")
       (lar)
       (exit)
      )
     )
     (set_tile "pred"   (getvar "users2"))
     (set_tile "adr_or" (getvar "users3"))
     (action_tile "accept" (strcat vv cc))
     (start_dialog)
     (if (or (not s_dok) (= s_dok ""))
      (setq s_dok nil)
      (progn
       (setq s_dok (atof s_dok))
       (if (or (<= s_dok 0.0) (>= s_dok 1000000000.00))
        (progn
         (alert "Документальная площадь должна быть\nчислом больше 0 и меньше миллиарда")
         (setq jo nil)
        )
       )
      )
     )
     (if (> (strlen pred) 99)
      (progn
       (alert "Строка наименования владельца участка\nдолжна занимать от 1 до 99 символов")
       (setq jo nil)
      )
     )
     (if (> (strlen adr_or) 50)
      (progn
       (alert "     Строка адресных ориентиров\nдолжна занимать от 1 до 50 символов")
       (setq jo nil)
      )
     )
     (if (> (strlen nm_fv) 50)
      (progn
       (alert " Строка наименования формы владения\nдолжна занимать от 1 до 50 символов")
       (setq jo nil)
      )
     )
    )
    (setvar "users2"   pred)
    (setvar "users3" adr_or)
    (setq jo nil)
    (while (not jo)
     (setq jo 1)
     (polzo)
     (if (> (strlen nazn) 100)
      (progn
       (alert "     Строка целевого назначения \nдолжна занимать от 1 до 100 символов")
       (setq jo nil)
      )
     )
    )
    (setq jo nil)
    (while (not jo)
     (setq jo 1)
     (if (not (new_dialog "post" dcl_r))
      (progn
       (alert (strcat "Отсутствует или неверен файл " yyy))
       (command "_erase" gr (entlast) "")
       (lar)
       (exit)
      )
     )
     (action_tile "accept"
      "(progn(setq n_post(get_tile \"n_post\")d_post(get_tile \"d_post\"))(done_dialog))"
     )
     (start_dialog)
     (if (> (strlen n_post) 10)
      (progn
       (alert "    Строка номера постановления \nдолжна занимать от 1 до 10 символов")
       (setq jo nil)
      )
     )
     (if (> (strlen d_post) 10)
      (progn
       (alert "     Строка даты постановления \nдолжна занимать от 1 до 10 символов")
       (setq jo nil)
      )
     )
    )
    (if (not (new_dialog "kd" dcl_r))
     (progn
      (alert (strcat "Отсутствует или неверен файл " yyy))
      (command "_erase" gr (entlast) "")
      (lar)
      (exit)
     )
    )
    (action_tile "accept"
     "(progn 
       (setq nov(get_tile \"nov\")vih(get_tile \"vih\")da(get_tile \"da\")lll(get_tile \"lll\"))
       (done_dialog)
      )"
    )
    (start_dialog)

    (setq jo nil)
    (while (not jo)
     (setq jo 1)
     (if (not (new_dialog "dok" dcl_r))
      (progn
       (alert (strcat "Отсутствует или неверен файл " yyy))
       (command "_erase" gr (entlast) "")
       (lar)
       (exit)
      )
     )
     (action_tile "accept"
      "(progn(setq n_dok(get_tile \"n_dok\")d_dok(get_tile \"d_dok\"))(done_dialog))"
     )
     (start_dialog)
     (if (> (strlen n_dok) 10)
      (progn
       (alert "Строка номера документа должна\nзанимать от 1 до 10 символов")
       (setq jo nil)
      )
     )
     (if (> (strlen d_dok) 10)
      (progn
       (alert "Строка даты документа должна\nзанимать от 1 до 10 символов")
       (setq jo nil)
      )
     )
    )
   )
  )
  (if (equal osho "BUILDING")
   (progn
    (setq vv "(progn(setq tip_zd(get_tile \"tip_zd\")pred(get_tile \"pred\")adr_or(get_tile \"adr_or\")"
          cc "n_zd(get_tile \"n_zd\")ned2_n(get_tile \"ned2_n\")nazn(get_tile \"nazn\"))(done_dialog))"
          jo nil
    )
    (while (not jo)
     (setq jo 1)
     (if (not (new_dialog "pans" dcl_r))
      (progn
       (alert (strcat "Отсутствует или неверен файл " yyy))
       (command "_erase" gr (entlast) "")
       (lar)
       (exit)
      )
     )
     (if (not shri) (setq shri ""))
     (set_tile "tip_zd" shri)
     (set_tile "pred"   (getvar "users2"))
     (set_tile "adr_or" (getvar "users3"))
     (action_tile "accept" (strcat vv cc))
     (start_dialog)
     (if ned2_n (setq ned2_n (atoi ned2_n)))
     (if (> (strlen pred) 99)
      (progn
       (alert "Строка наименования владельца здания\nдолжна занимать от 1 до 99 символов")
       (setq jo nil)
      )
     )
     (if (> (strlen adr_or) 50)
      (progn
       (alert "Строка улицы должна\nзанимать от 1 до 50 символов")
       (setq jo nil)
      )
     )
     (if (> (strlen n_zd) 10)
      (progn
       (alert "Строка почтового номера здания\nдолжна занимать от 1 до 10 символов")
       (setq jo nil)
      )
     )
     (if (> ned2_n 9999)
      (progn
       (alert "Строка номера квартиры\nдолжна занимать от 1 до 4 символов")
       (setq jo nil)
      )
     )
     (if (> (strlen nazn) 100)
      (progn
       (alert "Строка целевого назначения здания\nдолжна занимать от 1 до 100 символов")
       (setq jo nil)
      )
     )
     (if (or (not tip_zd) (> (strlen tip_zd) 10) (= (strlen tip_zd) 0))
      (progn
       (alert "Тип здания должен занимать от 1 до 10 знаков")
       (setq jo nil)
      )
     )
    )
    (setvar "users2"   pred)
    (setvar "users3" adr_or)
    (if (and ned2_n (/= ned2_n 0))
     (if (< ned2_n 10)
      (setq kadn (strcat kadn ":000" (rtos ned2_n 2 0)))
      (if (< ned2_n 100)
       (setq kadn (strcat kadn ":00" (rtos ned2_n 2 0)))
       (if (< ned2_n 1000)
        (setq kadn (strcat kadn ":0" (rtos ned2_n 2 0)))
        (setq kadn (strcat kadn ":"  (rtos ned2_n 2 0)))
       )
      )
     )
    )
    (alert "Укажите точку вставки типа здания")
    (command "_text" "_M" "0,0" 1 "90" tip_zd)
    (setq tv (list 0 0))
    (while (< (distance tv (list 0 0)) 1)
     (command "_move" (entlast) "" "0,0" pause)
     (setq tv (cdr (assoc '11 (entget (entlast))))  tv (list (cadr tv) (* -1 (car tv))))
    )
    (setq prim (entlast))
    (r)
    (setq u_n (cdr (assoc 5 (entget (entlast))))  prim priml)
    (r)
    (princ "\n Укажите масштаб надписи: ")              
    (command "_scale" (entlast) "" tv pause)
    (princ "\n Поверните текст: ")
    (command "_rotate" (entlast) "" tv pause)
    (princ "\n")
    (if (not (new_dialog "zdw12" dcl_r))
     (progn
      (alert (strcat "Отсутствует или неверен файл " yyy))
      (command "_erase" gr (entlast) "")
      (lar)
      (exit)
     )
    )
    (action_tile "accept"
     "(progn(setq nov(get_tile \"nov\")vih(get_tile \"vih\"))(done_dialog))"
    )
    (start_dialog)
    (if (= (atoi vih) 1) (command "_chprop" gr "" "_lt" "dashed3" ""))
    (if (and n_zd (/= n_zd "") (/= n_zd " ") (/= n_zd "  "))
     (progn
      (if (not (new_dialog "zdw10" dcl_r))
       (progn
        (alert (strcat "Отсутствует или неверен файл " yyy))
        (command "_erase" gr (entlast) "")
        (lar)
        (exit)
       )
      )
      (action_tile "accept"
       "(progn(setq nov(get_tile \"nov\")vih(get_tile \"vih\"))(done_dialog))"
      )
      (start_dialog)
      (if (= (atoi vih) 1)
       (progn
        (command "_text" "_M" "0,0" 1.0 "90" n_zd)
        (setq tv (list 0 0))
        (while (< (distance tv (list 0 0)) 1)
         (command "_move" (entlast) "" "0,0" pause)
         (setq tv (cdr (assoc '11 (entget (entlast))))  tv (list (cadr tv) (- (car tv))))
        )
        (princ "\n Укажите масштаб надписи: ")              
        (command "_scale" (entlast) "" tv pause)
        (princ "\n Поверните текст: ")
        (command "_rotate" (entlast) "" tv pause)
       )
      )
      (princ "\n")
     )
    )
    (command "_zoom" "_p")
   )
  )
  (if (or (= zona_n  "") (= zona_n  ".") (= zona_n  " ")) (setq zona_n  nil))
  (if (or (= mas_n   "") (= mas_n   ".") (= mas_n   " ")) (setq mas_n   nil))
  (if (or (= kvar_n  "") (= kvar_n  ".") (= kvar_n  " ")) (setq kvar_n  nil))
  (if (or (= uch_n   "") (= uch_n   ".") (= uch_n   " ")) (setq uch_n   nil))
  (if (or (= ned1_n  "") (= ned1_n  ".") (= ned1_n  " ")) (setq ned1_n  nil))
  (if (or (= ned2_n  "") (= ned2_n  ".") (= ned2_n  " ")) (setq ned2_n  nil))
  (if (or (= s_uch   "") (= s_uch   ".") (= s_uch   " ")) (setq s_uch   nil))
  (if (or (= s_dok   "") (= s_dok   ".") (= s_dok   " ")) (setq s_dok   nil))
  (if (or (= k_l     "") (= k_l     ".") (= k_l     " ")) (setq k_l     nil))
  (if (or (= pred    "") (= pred    ".") (= pred    " ")) (setq pred    nil))
  (if (or (= adr_or  "") (= adr_or  ".") (= adr_or  " ")) (setq adr_or  nil))
  (if (or (= n_zd    "") (= n_zd    ".") (= n_zd    " ")) (setq n_zd    nil))
  (if (or (= nazn    "") (= nazn    ".") (= nazn    " ")) (setq nazn    nil))
  (if (or (= tip_zd  "") (= tip_zd  ".") (= tip_zd  " ")) (setq tip_zd  nil))
  (if (or (= nm_fv   "") (= nm_fv   ".") (= nm_fv   " ")) (setq nm_fv   nil))
  (if (or (= n_post  "") (= n_post  ".") (= n_post  " ")) (setq n_post  nil))
  (if (or (= d_post  "") (= d_post  ".") (= d_post  " ")) (setq d_post  nil))
  (if (or (= n_dok   "") (= n_dok   ".") (= n_dok   " ")) (setq n_dok   nil))
  (if (or (= d_dok   "") (= d_dok   ".") (= d_dok   " ")) (setq d_dok   nil))
  (if (or (= d_kor   "") (= d_kor   ".") (= d_kor   " ")) (setq d_kor   nil))
  (if (or (= login_user  "") (= login_user  ".") (= login_user  " ")) (setq login_user  nil))
  (load "asis")
  (c:asis)
  (if (not ase_errno)
   (if (or (equal osho "MASSIV") (equal osho "ZONA"))
    (progn
     (setq a nil nom_z nil nam_z nil nom_m nil aaa nil aam nil areanew nil n 0)
     (command "_erase" gr (entlast) "")
    )
    (progn
     (if (not (new_dialog "ww" dcl_r))
      (progn
       (alert (strcat "Отсутствует или неверен файл " yyy))
       (command "_erase" gr (entlast) "")
       (lar)
       (exit)
      )
     )
     (action_tile "accept"
      "(progn(setq nov(get_tile \"nov\")vih(get_tile \"vih\"))(done_dialog))"
     )
     (start_dialog)
     (if (= (atoi vih) 1)
      (progn
       (command "_erase" gr (entlast) "")
       (lar)
       (exit)
      )
      (progn
       (load "asidel")
       (c:asidel)
       (c:asis)
       (if (not ase_errno)
        (progn
         (alert "Ошибка записи в базу данных")
         (command "_erase" gr (entlast) "")
         (lar)
         (exit)
        )
       )
      )
     )
    )
   )
  )
 )
 (lar)
 (command "_zoom" "_p")
);end ray
а этот код именно чертил объект назовем его земельный участок, присваивал ему номер, требовал заполнения определенных полей, данные из которых и попадали в БД, которые можно потом либо отредактировать, либо удалить объект и строку в БД, либо просто посмотреть, но это прописано в других кодах.
Основная часть кодов предназначена для топографов, она рисует условные знаки по всем предъявляемым к ним требованиям. Насколько мне известно ObjectLand этого не может, а БД нужна для землеустроителей. У нас 70% города нарисовано в этой карте и 50% района.
Программированию я сейчас и пытаюсь научиться, для английского есть куча переводчиков, но на них уходит много времени.
Подскажите где взять специалиста?

Последний раз редактировалось Andru1968, 30.08.2011 в 17:19.
Andru1968 вне форума  
 
Непрочитано 30.08.2011, 17:01
#17
Дима_

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


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
1. Зачем эта программа запихана в AutoCAD?
Вот это да, я честно говоря сразу и не смотрел, это-же действительно такой клиент БД на смеси автолиспа с ARX - то ли автор больше ничего не знал, то ли это "нашедшея жизнь" дипломная работа? Интересно а у пользователя, автокад по назначению вобще используется? Или он как библиотека к "программе" устанавливается.
Автору - напишите как (для чего) Вы это чудо используете - тут по ходу Вам автокад-то и не нужен.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 30.08.2011, 17:23
#18
Andru1968


 
Регистрация: 29.08.2011
г. Балаково
Сообщений: 48


Дима_

Если что-то конкретно интересует пиши в личку.
Andru1968 вне форума  
 
Непрочитано 30.08.2011, 20:48
1 | #19
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Насколько мне известно ObjectLand этого не может, а БД нужна для землеустроителей. У нас 70% города нарисовано в этой карте и 50% района.
Вот как раз ObjectLand и используется у "землеустроителей", т.е. в Росрестре как штатный инструмент. Великолепнейшая программа! Есть и другие - российские ИнГЕО, Панорама, буржуйские Mapinfo, ArcGIS.

"В этой карте" - это в AutoCAD? Это тупиковый путь для информационных систем. AutoCAD, благодаря своим графическим возможностям, может быть очень удобен для топографов и геодезистов (т.е. "чертежников"). А в части информации - он "никакой". Какие бы завлекательные описания о нем не сочиняла фирма. Просто-напросто Autodesk проспала развитие "мира ГИС", а потом только делала вид, что и она "в теме", выпуская целую линейку продуктов.

Знаю это не понаслышке - сам лет 10 делал ГИС на базе AutoCAD.

Да, в AutoCAD можно сделать привязку "семантики" к "графике". Причем разными способами. Есть и Database Connectivity, и примеры с CAO в поставке AutoCAD (см. caotest.lsp, caotest.dcl). А раньше ASI было. Но всё это чрезвычайно примитивно. Просто навешивание лапши на уши, да показать, что "в принципе можно". И, самое главное, порочно по сути.

Информация о любых пространственных объектах (например, земельных участках) состоит из двух частей:

1. "Семантическая" - описательная часть (номер, владелец и т.п.)
2. Координатная - координаты вершин.

В "решениях Autodesk" координатная информация хранится внутри DWG - как обычные координаты примитивов. А "семантика" - может и прямо в DWG или, в "продвинутом" варианте в "базе данных". Связь графики и семантики производится через расширенные данные (ничего иного и не придумали). Ну и можно программы в разных вариантах сделать (мы делали), для работы с данными.

Но самое главное и самое плохое то, что координаты внутри DWG. Это значит, что они оторваны от семантики, спрятаны в закрытом формате, с ними можно работать только посредством самого AutoCAD (или его "вертикальных" решений). Формат DWG - это не база данных, с которой могут работать множество пользователей одновременно. И даже для "попеременной" работы на каждом рабочем месте должен стоять полноценный AutoCAD.

Вынести пространственные данные в БД можно - "назло Autodesk". Однако для этого надо делать серьезную систему для работы с БД и со связкой "БД-AutoCAD". И вообще с любой другой системой. Мы это делали ещё лет 20 назад, с современными инструментами это проще, хотя "вопрос интересный". Ну а зачем тогда нужен сам AutoCAD? Да только как очень дорогое средство визуализации "карт", использующее 10% от своей действительно великолепной графической системы. Мы его когда-то так и использовали, потому что иных средств просто не было. А потом отказались - слишком дорого. Это чертежи "рисовать" можно втихаря на пиратском AutoCAD, а с информационной системой (заведомо не частного уровня) такое не пролезет.

А накопленная информация по нескольким городам никуда не делась. Она полностью, с координатами, находится в БД и отрисовать её можно в любой графической среде.

Ну и цена у ObjectLand для 1 пользователя 6000 руб, для 10 пользователей - 21000 руб, а "сайт-лицензия" (неограниченное количество мест в пределах "места") - 180000 руб (я покупал еще за 96 т.р.). И даже если не покупать, а просто скачать и работать, то нет никаких ограничений, кроме логотипа на карте. Это очень удобно - можно как следует "пошшупать". И уж точно приобретение намного выгоднее, чем попытки чего-то смастерить "под AutoCAD", особенно не зная предмета.
ShaggyDoc вне форума  
 
Непрочитано 30.08.2011, 20:49
#20
Дима_

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


Теперь стало более менее понятно. По вопросу: тут несколько вариантов, самый быстрый и дешевый - найти автора, я думаю он быстрее всего разберется и переделает под 2009, но это не всегда физически возможно; второй путь это попытаться "проапргрейдить" существующий рабочий проект, lisp кодам и DCL скорее всего редактирование не потребуется (если и потребуется то "не сильное"), что не скажешь про arx (exe?) библиотеки (модули) - если там используется только "фирменные", то шансы найти под новую версию (или перекопмилировать исходник) есть, если-же там еще есть "авторское творчество", то боюсь проще "все по новой" - со всеми вытекающеми - описание задачи, временем, деньгами, отладкой, обкаткой и пр.
з.ы. Специалисты "водятся" здесь и в поиске исполнителей.
з.з.ы Пока писал, свое мнение касательно рациональности и перспективности этого вопроса описал ShaggyDoc - я с ним полностью согласен.
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 30.08.2011 в 20:54.
Дима_ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как переделать коды AutoCAD R14 работающие с БД для работы в AutoCAD 2009



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ObjectARX. Расчленение и удаление proxy-объектов Profan Готовые программы 293 08.04.2024 09:37
Разделение работы AutoCAD | AutoCAD Mechanical PVal Вертикальные решения на базе AutoCAD 3 23.03.2012 10:16
AutoCAD Architecture 2009 стоит ли.. mey Вертикальные решения на базе AutoCAD 25 19.04.2009 19:20
файл из AutoCAD 2004 сохранить в формат для AutoCAD R14 acad_newbie AutoCAD 12 13.10.2008 13:03
Уже работаю в AutoCAD 2006, но нужна книжка чтобы знать все тонкости работы с 2D графикой. Unt0nich Поиск литературы, чертежей, моделей и прочих материалов 17 06.05.2008 17:58