Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > AutoLisp и база данных SQL-сервера

AutoLisp и база данных SQL-сервера

Ответ
Поиск в этой теме
Непрочитано 10.12.2008, 08:37
AutoLisp и база данных SQL-сервера
Макс_Кунгур
 
Регистрация: 10.12.2008
Сообщений: 122

Добрый день. Подскажите, пожалуйста. Есть база данных SQL-сервера, в которой находятся координаты X и Y в таблице (название базы - basa, название таблицы - bur, название столбца X - XX, название столбца Y - YY). Как мне при помощи AutoLisp взять эти данные из таблицы и по этим двум координатам построить в AutoCad-е 2007 линию, а точнее перпендикуляр, начиная с этой точки с координатами (X,Y).
Просмотров: 21285
 
Автор темы   Непрочитано 12.12.2008, 13:21
#41
Макс_Кунгур


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


пишет
Enter a number bur: 427

Connecting to the database using
"Provider=SQLOLEDB.1;Data Source=MAXIM;Initial Catalog=basa"
Result: succeeded!

Inserting a row:
"SELECT YY
FROM bur31
WHERE ((([BUR]) = 427));SELECT XX
FROM bur31
WHERE ((([BUR]) = 427));SELECT GL
FROM bur31
WHERE ((([BUR]) = 427));"
Result:
Succeeded!

Disconnecting from the database
; error: no function definition: RESULT->POINT
Макс_Кунгур вне форума  
 
Автор темы   Непрочитано 12.12.2008, 13:27
#42
Макс_Кунгур


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


я поменял Result->Point на result_SQL->Point. он пишет Select point by BUR <Quit> : что тут нужно написать, конкретный пример, какую точку для направления?
Макс_Кунгур вне форума  
 
Непрочитано 12.12.2008, 13:29
#43
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Кликни мышкой в моделе чертежа
Holon вне форума  
 
Автор темы   Непрочитано 12.12.2008, 13:58
#44
Макс_Кунгур


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


кликнул, ничего не нарисовал, я в скрипте опять не увидел чтобы GL где-то встречалась. там только вывод значения из базы, а Result2 нигде больше не применяется как я понял
Макс_Кунгур вне форума  
 
Непрочитано 12.12.2008, 14:07
#45
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Да замени строку,
Код:
[Выделить все]
last_pt(polar(LIST(Result->Point Result1) (Result->Point Result)) ang (Result->Point Result2)))
И всегда присылай мне, что пишет АКад, помни я немогу тестировать код на своей мачине
Holon вне форума  
 
Автор темы   Непрочитано 12.12.2008, 14:21
#46
Макс_Кунгур


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


опять ничего не нарисовал, пишет
Select point by BUR <Quit> :
_LINE Укажите первую точку:
Укажите следующую точку или [Undo]:
Укажите следующую точку или [Undo]:
Макс_Кунгур вне форума  
 
Непрочитано 12.12.2008, 14:58
#47
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Почему не ресует все ресует:
Код:
[Выделить все]
(defun c:test (/ Result Result1 Result2 ang last_pt)

                     (setq Result (list(list "YY")(list 8014.5)))
                     (setq Result1 (list(list "xx")(list 16761.0)))
                     (setq Result2 (list(list "GL")(list 15.0)))

(setq ang (angle (LIST(result_SQL->Point Result1) (result_SQL->Point Result) 0)(cdr(getpoint "\nSelect point by BUR <Quit> : \n")))
 last_pt(polar(LIST(result_SQL->Point Result1) (result_SQL->Point Result)) ang (result_SQL->Point Result2)))
(VL-CMDF "_LINE" (LIST(result_SQL->Point Result1) (result_SQL->Point Result)) last_pt "")

)

(defun result_SQL->Point( Result / pt)
(setq pt(atoi(vl-string-trim " " (apply 'strcat (mapcar '(LAMBDA(a) (strcat a " "))
(mapcar(function (lambda (a) (substr a 2 (- (strlen a) 2)))) (mapcar (function VL-PRINC-TO-STRING)(cdr Result)))))))) 
)
Holon вне форума  
 
Автор темы   Непрочитано 15.12.2008, 07:39
#48
Макс_Кунгур


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


при вызове test пишет
Команда: test

Select point by BUR <Quit> :
'VLIDE _LINE Укажите первую точку:
Укажите следующую точку или [Undo]:
Укажите следующую точку или [Undo]:

Команда: T
Макс_Кунгур вне форума  
 
Автор темы   Непрочитано 15.12.2008, 07:40
#49
Макс_Кунгур


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


так ничего не нарисовав
Макс_Кунгур вне форума  
 
Автор темы   Непрочитано 15.12.2008, 07:50
#50
Макс_Кунгур


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


я поменял значения YY на 1014.5 и XX на 1761.0 теперь нарисовал, как то нужно к координатам AutoCad привязать, а то программа не видит линию на выходе при больших значениях X и Y. При открытии Autocad у меня max значение по X - 2900, а по Y - 1100
Макс_Кунгур вне форума  
 
Автор темы   Непрочитано 15.12.2008, 07:55
#51
Макс_Кунгур


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


а в базе данных по Y min начение 4000 max 13000, по X min значение 9000 max 22000, по GL min 3 max 110
Макс_Кунгур вне форума  
 
Автор темы   Непрочитано 15.12.2008, 08:34
#52
Макс_Кунгур


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


все работает, пишет
Команда: (if(setq bur (getint "Enter a number bur: "))(qqq bur))
Enter a number bur: 763


Connecting to the database using
"Provider=SQLOLEDB.1;Data Source=MAXIM;Initial Catalog=basa"
Result: succeeded!

Inserting a row:
"SELECT YY
FROM bur31
WHERE ((([BUR]) = 763));SELECT XX
FROM bur31
WHERE ((([BUR]) = 763));SELECT GL
FROM bur31
WHERE ((([BUR]) = 763));"
Result:
Succeeded!

Disconnecting from the database

Select point by BUR <Quit> :
_LINE Укажите первую точку:
Укажите следующую точку или [Undo]:
Укажите следующую точку или [Undo]:
после этого я нашел на чертеже эту линию, сейчас главное чтобы она была видна сразу на чертеже, и скажи, пожалуйста, можно сделать так, чтобы программа сразу рисовала линию, не ставив точку на чертеже, т.е. опускала перпендикуляр от точки (XX,YY) на расстояние GL
Макс_Кунгур вне форума  
 
Непрочитано 15.12.2008, 09:09
#53
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Добавь _ZOOM
Код:
[Выделить все]
(defun c:test (/ Result Result1 Result2 ang last_pt)

                     (setq Result (list(list "YY")(list 8014.5)))
                     (setq Result1 (list(list "xx")(list 16761.0)))
                     (setq Result2 (list(list "GL")(list 15.0)))

(setq ang (angle (LIST(result_SQL->Point Result1) (result_SQL->Point Result) 0)(cdr(getpoint "\nSelect point by BUR <Quit> : \n")))
 last_pt(polar(LIST(result_SQL->Point Result1) (result_SQL->Point Result)) ang (result_SQL->Point Result2)))
(VL-CMDF "_LINE" (LIST(result_SQL->Point Result1) (result_SQL->Point Result)0) last_pt "")

(command
		"ZOOM"
		"_w"
		(list (- (car (LIST(result_SQL->Point Result1) (result_SQL->Point Result)0)) 50) (- (cadr (LIST(result_SQL->Point Result1) (result_SQL->Point Result)0)) 50))
		(list (+ (car last_pt) 50) (+ (cadr last_pt) 50))
	      )

)

(defun result_SQL->Point( Result / pt)
(setq pt(atoi(vl-string-trim " " (apply 'strcat (mapcar '(LAMBDA(a) (strcat a " "))
(mapcar(function (lambda (a) (substr a 2 (- (strlen a) 2)))) (mapcar (function VL-PRINC-TO-STRING)(cdr Result)))))))) 
)
Holon вне форума  
 
Автор темы   Непрочитано 15.12.2008, 09:42
#54
Макс_Кунгур


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


zoom работает, линию нарисовал прямо на чертеже, пишет
Команда: test

Select point by BUR <Quit> :
_LINE Укажите первую точку:
Укажите следующую точку или [Undo]:
Укажите следующую точку или [Undo]:
Команда: ZOOM
Specify corner of window, enter a scale factor (nX or nXP), or
[All/Center/Dynamic/Extents/Previous/Scale/Window/Object] <real time>: _w
Укажите первый угол: Укажите противоположный угол: Regenerating model.

Команда: nil

теперь как обойтись без перехода на чертеж, чтобы линия была нарисована как перпендикуляр от точки (XX,YY) на расстоянии GL
Макс_Кунгур вне форума  
 
Непрочитано 15.12.2008, 10:13
#55
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Имея базу данных можно начертить тысячу линий за один раз,
к примеру указав параметры "ОТ" строки в базе "ДО" строки в базе.............
Вот тебе твой перпендикуляр :-(
Код:
[Выделить все]
(defun c:test (/ Result Result1 Result2  last_pt)

                     (setq Result (list(list "YY")(list 8014.5)))
                     (setq Result1 (list(list "xx")(list 16761.0)))
                     (setq Result2 (list(list "GL")(list 15.0)))
(setq last_pt(polar(LIST(result_SQL->Point Result1) (result_SQL->Point Result)) (/ PI 2) (result_SQL->Point Result2)))
(VL-CMDF "_LINE" (LIST(result_SQL->Point Result1) (result_SQL->Point Result)0) last_pt "")

(command
		"ZOOM"
		"_w"
		(list (- (car (LIST(result_SQL->Point Result1) (result_SQL->Point Result)0)) 50) (- (cadr (LIST(result_SQL->Point Result1) (result_SQL->Point Result)0)) 50))
		(list (+ (car last_pt) 50) (+ (cadr last_pt) 50))
	      )

)

(defun result_SQL->Point( Result / pt)
(setq pt(atoi(vl-string-trim " " (apply 'strcat (mapcar '(LAMBDA(a) (strcat a " "))
(mapcar(function (lambda (a) (substr a 2 (- (strlen a) 2)))) (mapcar (function VL-PRINC-TO-STRING)(cdr Result)))))))) 
)
Holon вне форума  
 
Автор темы   Непрочитано 15.12.2008, 10:32
#56
Макс_Кунгур


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


перпендикуляр нарисовался. теперь задача усложняется. в БД есть координата по Z (4-й столбец - "ZZ"). нужно нарисовать в координатной плоскости (X,Y) окружность с центром в точке (XX,YY) - рисунок ris1.jpg, а при переходе в координатную плоскость (X,Z) цилиндр с двумя окружностями, соединенными линиями, на расстоянии GL - рисунок ris2.jpg.
Миниатюры
Нажмите на изображение для увеличения
Название: ris1.JPG
Просмотров: 92
Размер:	20.6 Кб
ID:	13536  Нажмите на изображение для увеличения
Название: ris2.JPG
Просмотров: 97
Размер:	23.0 Кб
ID:	13537  
Макс_Кунгур вне форума  
 
Автор темы   Непрочитано 16.12.2008, 11:14
#57
Макс_Кунгур


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


или (даже лучше будет) прямоугольник, изображенный на рисунке ris5.jpg (это при переходе в координатную плоскость (X,Z))
Миниатюры
Нажмите на изображение для увеличения
Название: ris5.JPG
Просмотров: 82
Размер:	19.0 Кб
ID:	13585  
Макс_Кунгур вне форума  
 
Автор темы   Непрочитано 18.12.2008, 14:22 Функция рисования линий c координатами, взятыми из БД SQL-сервера, в AutoLisp
#58
Макс_Кунгур


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


Добрый день. Есть приложение на AutoLisp, которое рисует линию с координатами, взятыми из БД sql-сервера. Но оно рисует только одну линию по запросу номера линии. Нужно чтобы оно рисовало множество линий, сколько запросишь, и номер, который запросишь. Помогите, пожалуйста, вот листинг этого приложения.

Код:
[Выделить все]
(if (not ADOLISP_ConnectToDB)
  (load "ADOLISP_Library.lsp")
)

;;; (if(setq bur (getint "Enter a number bur: "))(qqq bur))
(defun qqq (bur / ConnectionObject Result Result1 ConnectString SQLStatement SQLStatement1 SQLStatement2 SQLStatement3	      
                  TablesList ColumnsList ang last_pt last_pt1 last_pt2)
  (setq ConnectString "Provider=SQLOLEDB.1;Data Source=server_name;Initial Catalog=base_name")
  (prompt (strcat "\n\nConnecting to the database using \n\""  ConnectString "\"" ))
  (if (not (setq ConnectionObject (ADOLISP_ConnectToDB ConnectString  "" "")))
  (progn (prompt "\nConnection failed!")(ADOLISP_ErrorPrinter))
  (prompt "\nResult: succeeded!"))
  ;; If we got a connection ...
  (if ConnectionObject
  (progn (setq
	   
SQLStatement
(strcat "SELECT YY
FROM table_name
WHERE ((([BUR]) = "(itoa bur)"));")
	       
SQLStatement1	       
(strcat"SELECT XX
FROM table_name
WHERE ((([BUR]) = "(itoa bur)"));")

SQLStatement2	       
(strcat"SELECT GL
FROM table_name
WHERE ((([BUR]) = "(itoa bur)"));")

SQLStatement3	       
(strcat"SELECT ZZ
FROM table_name
WHERE ((([BUR]) = "(itoa bur)"));")

)
  (prompt (strcat "\n\nInserting a row:\n\""  SQLStatement SQLStatement1 SQLStatement2 SQLStatement3 "\""))
  (if (setq
	Result  (ADOLISP_DoSQL ConnectionObject SQLStatement)
	Result1 (ADOLISP_DoSQL ConnectionObject SQLStatement1 )
	Result2 (ADOLISP_DoSQL ConnectionObject SQLStatement2 )
	Result3 (ADOLISP_DoSQL ConnectionObject SQLStatement3 )
      )
      (prompt "\nResult:\nSucceeded!")(progn(prompt "\nFailed!")(ADOLISP_ErrorPrinter)))
      (prompt "\n\nDisconnecting from the database\n")
      (ADOLISP_DisconnectFromDB ConnectionObject)
      (setq ConnectionObject nil)
      (setq last_pt (polar (LIST (result_SQL->Point Result1) (result_SQL->Point Result) (result_SQL->Point Result3)) (/ PI 2) (result_SQL->Point Result2)))
      (VL-CMDF "_LINE" (LIST(result_SQL->Point Result1) (result_SQL->Point Result) (result_SQL->Point Result3)) last_pt "")
      
      (command
                "ZOOM"
                "_w"
                (list (- (car (LIST(result_SQL->Point Result1) (result_SQL->Point Result) (result_SQL->Point Result3))) 50) (- (cadr (LIST(result_SQL->Point Result1) (result_SQL->Point Result) (result_SQL->Point Result3))) 50))
                (list (+ (car last_pt) 50) (+ (cadr last_pt) 50))
      )
   )
  )
  (prin1)
)
(prin1)

(defun result_SQL->Point( Result / pt)
(setq pt(atoi(vl-string-trim " " (apply 'strcat (mapcar '(LAMBDA(a) (strcat a " "))
(mapcar(function (lambda (a) (substr a 2 (- (strlen a) 2)))) (mapcar (function VL-PRINC-TO-STRING)(cdr Result)))))))) 
)
Макс_Кунгур вне форума  
 
Непрочитано 18.12.2008, 14:26
#59
Кулик Алексей aka kpblc
Moderator

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


Макс_Кунгур, во-первых, теги не забывай проставлять
Во-вторых, нефиг плодить темы. Я их объединил.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 17.07.2017, 18:59
#60
valrond


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


Тут http://allforproject.ru/primer-raboty-koda-lisp-s-subd/ можно посмотреть
valrond вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > AutoLisp и база данных SQL-сервера

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
База данных Лира Koker Лира / Лира-САПР 4 28.08.2006 15:47
База данных площадей помещений с привязкой к замкн. контуру. elena_din AutoCAD 19 19.08.2005 13:40
база данных программы Autodesk Building Systems 2005 Angel80 Прочее. Программное обеспечение 3 06.10.2004 06:28