Schöck
dwg.ru forum rss xml
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Импорт координат и функций в txt

Импорт координат и функций в txt

Версия для печати
 
Ответ
Опции темы Поиск в этой теме
Непрочитано 20.01.2018, 13:17 #1
Импорт координат и функций в txt
yarus.khv
 
Регистрация: 06.03.2012
Сообщений: 306

yarus.khv вне форума Вставить имя

Добрый день!
Прошу помощи в следующей проблеме. Сразу оговорю, что лиспами не владею)
Есть расчетная программа, которая в расчетах использует только параллелепипеды. Каждый элемент представлен в такой форме (это из txt-файла):
"SoilNumber": 1,
"xfrom": 34.0,
"xto": 36.0,
"yfrom": 40.0,
"yto": 60.0,
"zfrom": -20.0,
"zto": 0.0
Создавать сложные модели в самой программе очень сложно, нет для этого инструментов.
Что хотелось бы сделать:
1)В AutoCAD 3D создать модель из параллелепипедов.
2)Различные конструкции и грунты задать в разных слоях, либо разными цветами (любой фактор).
3)С помощью лиспа (а может еще чего-то) конвертировать координаты и фактор в приемлемую для чтения в программе форму.

Чтобы не заниматься фигней, прошу подсказать, насколько задача сложная, стоит ли это долгих мучений по изучению лиспов?
Может можно воспользоваться другими инструментами или прогами?
Просмотров: 1332
 
Непрочитано 20.01.2018, 13:50
#2
Enik

ГИП
 
Регистрация: 07.06.2015
Сообщений: 1,058


Цитата:
Сообщение от yarus.khv Посмотреть сообщение
3)С помощью лиспа (а может еще чего-то) конвертировать координаты и фактор в приемлемую для чтения в программе форму.
Из того, что сразу приходит на ум - это покопаться в МенюГео и CadTools. Были там похожие функции по работе с точками, импорту/экспорту координат.
Enik вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 20.01.2018, 14:28
#3
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Днепропетровск
Сообщений: 3,738


Цитата:
Сообщение от yarus.khv Посмотреть сообщение
стоит ли это долгих мучений по изучению лиспов?
Если ничего другого на лиспе или ином языке писать не собираетесь - тогда не стоит. Ищите готовое решение (я сходу не нашел ни в русском, ни в английском сегментах) или заказывайте разработку.
Если есть желание писать именно на лиспе - рецепт здесь: https://dwg.ru/dnl/99
Если захотите задействовать более серьезное средство, например .net, то рецепт здесь: https://forums.autodesk.com/t5/net/h...d/td-p/6430917
__________________
Кому жизнь буги-вуги, а кому полный бред... (С)

Последний раз редактировалось kp+, 20.01.2018 в 14:38.
kp+ вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 20.01.2018, 16:25
#4
ProjectMaster


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


Чего считаем то? Сваи или мелкие фундаменты?

Наверняка вопрос решается проще - сменой расчетной программы.
Не нужен тут лисп. Все нормальные проги позволяют тем или иным способом загрузить данные из *.dxf.

Последний раз редактировалось ProjectMaster, 20.01.2018 в 16:31.
ProjectMaster вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 21.01.2018, 15:32
#5
yarus.khv


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


Цитата:
Сообщение от ProjectMaster Посмотреть сообщение
Чего считаем то? Сваи или мелкие фундаменты?

Наверняка вопрос решается проще - сменой расчетной программы.
Не нужен тут лисп. Все нормальные проги позволяют тем или иным способом загрузить данные из *.dxf.
Теплотехнические расчеты. Конечно-разностный метод (не МКЭ). Весьма своеобразные проги для таких расчетов. Прямой связи с dxf нет.

В принципе есть замечательная команда "COOR", которая выдает координаты. Мне нужно как-то привязать эти координаты к конкретным элементам, добавив также некоторой функцию из автокада (цвета, например), которая будет соответствовать номеру грунта в расчетной проге.
Короче говоря, в голове у меня все красиво: добавить нужно что-то в COOR, а вот как..)

Цитата:
Сообщение от kp+ Посмотреть сообщение
Если ничего другого на лиспе или ином языке писать не собираетесь - тогда не стоит. Ищите готовое решение (я сходу не нашел ни в русском, ни в английском сегментах) или заказывайте разработку.
Если есть желание писать именно на лиспе - рецепт здесь: https://dwg.ru/dnl/99
Если захотите задействовать более серьезное средство, например .net, то рецепт здесь: https://forums.autodesk.com/t5/net/h...d/td-p/6430917
может можно и не лиспом, может есть что-то помимо автокада для 3D проектирования, откуда импорт будет более простым, чем лиспы.
yarus.khv вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 21.01.2018, 16:45
#6
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 1,739


ИМХО, если у Вас есть специфическая программа и она наверняка достаточно дорогая, есть автокад, то же не дешевый, для которых необходимо сделать импорт-экспорт данных, то разумно просто заказать разработку (если Вы non-combattants в программировании) такого рода функционала и работать так, как Вам удобно. Хотя это мое ИМХО и оно как правило разбивается о непонимание руководителей проектных организаций, но тут лучше почитать посты от Сергей812. Печально все это.
__________________
_бложиг
Boxa на форуме вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 21.01.2018, 17:37
#7
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,693
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


Если параллелепипед вычерчен солидом, то немного переделанный лисп из темы length, width and height of a solid box
Код:
[Выделить все]
(defun C:BoxInfo ( / solid TXT solidobj minpoint maxpoint fil)
  (vl-load-com)
(if (and (setq solid (entsel "\nSelect solid :"))
         (setq TXT (getfiled "Файл для сохранения точек" "" "txt" 1)) ;_ end of setq
         )
  (progn (setq solidobj (vlax-ename->vla-object (car solid)))
         (if (= (vla-get-objectname solidobj) "AcDb3dSolid")
           (progn (vla-getboundingbox solidobj 'minpoint 'maxpoint)
                  (setq boundbox (mapcar '-
                                        (setq maxpoint  (vlax-safearray->list maxpoint))
                                        (setq minpoint (vlax-safearray->list minpoint))
                                 ) ;_ end of mapcar
                  ) ;_ end of setq
             (setq fil (open txt "w"))
             (princ "\"SoilNumber\" : 1,\n" fil)
             (princ (strcat "\"SoilColor\" : " (itoa(vla-get-color solidobj))  ",\n") fil)
             (princ (strcat "\"SoilLayer\" : " (vla-get-Layer solidobj)  ",\n") fil)
             (princ (strcat "\"xfrom\" : " (rtos(car minpoint) 2 1)  ",\n") fil)
             (princ (strcat "\"xto\" : " (rtos(car maxpoint) 2 1)  ",\n") fil) 
             (princ (strcat "\"yfrom\" : " (rtos(cadr minpoint) 2 1)  ",\n") fil)
             (princ (strcat "\"yto\" : " (rtos(cadr maxpoint) 2 1)  ",\n") fil) 
             (princ (strcat "\"zfrom\" : " (rtos(caddr minpoint) 2 1)  ",\n") fil)
             (princ (strcat "\"zto\" : " (rtos(caddr maxpoint) 2 1)  ",\n") fil)
             (close fil)
;;;                  (alert (strcat "Solid's\tlenght= "
;;;                                 (rtos (car boundbox))
;;;                                 "\n\twidth= "
;;;                                 (rtos (cadr boundbox))
;;;                                 "\n\theight= "
;;;                                 (rtos (caddr boundbox))
;;;                         ) ;_ end of strcat
;;;                  ) ;_ end of alert
           ) ;_ end of progn
         ) ;_ end of if
  ) ;_ end of progn
) ;_ end of if
)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 22.01.2018, 15:40
#8
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Днепропетровск
Сообщений: 3,738


Эта штука на основе vla-getboundingbox будет корректно работать с повернутыми параллелепипедами?
Хотя, может, оно и не надо - топикстартер не выложил пример модели, а вдруг там "всЁ ровно"
__________________
Кому жизнь буги-вуги, а кому полный бред... (С)
kp+ вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 23.01.2018, 11:14
#9
koMon


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


yarus.khv,
В общем-то задача не такая уж и сложная. Предлагаю лисп по импорту/экспорту данных 3DSolid-ов (BOX-ов) из/в *.txt файл по образцу в шапке. SoilNumber соответствует индексному номеру цвета. Повёрнутые рараллелепипеды не проверял. Тестовые рисунок и текстовый файл во вложении.

Код:
[Выделить все]
 

;****************************************************************************************************************************************************

;*******************************************************     koMon 23.01.2018     *******************************************************************

;****************************************************************************************************************************************************

															  (vl-load-com)

;****************************************************************************************************************************************************

(defun c:3DBoxes_In_Out ()
	(setq 3DBoxes_In_Out_vars '(
									Boxes_File Boxes_Processed Box_Center Box_Height Box_Length Box_Object
									Box_Width Current_String Data_Value Drawing_Path File_To_Open
									Group_Code Hide_Output Macro_Direction Modelspace_Object Soil_Number There_Is_3dboxes_Sset
									min_XYZ max_XYZ X_From X_To Y_From Y_To Z_From Z_To Current_Soil
									acad_Object document_object modelSpace_object document_Selection_sets 3DBoxes_sset_Object
									object_truecolor
							   )
		  acad_Object (vlax-get-acad-object)
		  document_object (vla-get-ActiveDocument acad_Object)
		  modelSpace_object (vla-get-ModelSpace document_Object)
		  drawing_path (strcat (vlax-get document_object 'Path) "\\")
	)
	(if (= (getvar "USERS1") "")
		(setvar "USERS1" drawing_path)
		(if (not (vl-file-directory-p (getvar "USERS1"))) (setvar "USERS1" drawing_path) (setq drawing_path (getvar "USERS1")))
	)
	(initget "Export C-Import V-Import")
	(setq Macro_Direction (vl-catch-all-apply 'GetKWord (list (strcat "\nDo You Like to " "[Export/C-Import/V-Import]" " Data <V-Import>: "))))
	(cond
		(
			(or (null macro_direction)
				(= "C-Import" macro_direction)
				(= "V-Import" macro_direction)
			)
				(if (null macro_direction) (setq macro_direction "V-Import"))

				(if (setq file_to_open (getfiled "Select 3DBoxes Data File to Read from" drawing_path "txt" 16))
					(progn
						(setq boxes_file (open file_to_open "r")
							  boxes_processed 0
						)

						(if (= "C-Import" macro_direction)
							(progn
								(setq 3DBoxes_In_Out_Sys_vars (list
															  		(list "cmdecho" (getvar "cmdecho") 0)
															  )
								)
								(foreach nth_sys_var 3DBoxes_In_Out_Sys_vars (setvar (car nth_sys_var) (caddr nth_sys_var)))
								(vla-StartUndoMark document_object)
							)
						)

						(setvar "USERS1" (vl-filename-directory file_to_open))

						(while (setq current_string (read-line boxes_file))
							(setq current_string (vl-string-right-trim " " current_string)
							  	  current_string (substr current_string 1 (1- (strlen current_string)))
							  	  current_string (read (strcat "(" current_string ")"))
							)
							(if (= "SoilNumber" (car current_string))
							  	(progn
							  	  	(setq soil_number (caddr current_string)
							  	  	  	  current_string (read-line boxes_file)
							  	  	  	  x_from (caddr (read (strcat "(" (substr (setq current_string (vl-string-right-trim " " current_string)) 1 (1- (strlen current_string))) ")")))
							  	  	  	  current_string (read-line boxes_file)
							  	  	  	  x_to (caddr (read (strcat "(" (substr (setq current_string (vl-string-right-trim " " current_string)) 1 (1- (strlen current_string))) ")")))
							  	  	  	  current_string (read-line boxes_file)
							  	  	  	  y_from (caddr (read (strcat "(" (substr (setq current_string (vl-string-right-trim " " current_string)) 1 (1- (strlen current_string))) ")")))
							  	  	  	  current_string (read-line boxes_file)
							  	  	  	  y_to (caddr (read (strcat "(" (substr (setq current_string (vl-string-right-trim " " current_string)) 1 (1- (strlen current_string))) ")")))
							  	  	  	  current_string (read-line boxes_file)
							  	  	  	  z_from (caddr (read (strcat "(" (substr (setq current_string (vl-string-right-trim " " current_string)) 1 (1- (strlen current_string))) ")")))
							  	  	  	  current_string (read-line boxes_file)
							  	  	  	  z_to (caddr (read (strcat "(" (substr (setq current_string (vl-string-right-trim " " current_string)) 1 (1- (strlen current_string))) ")")))
    						  	  	)
							  	  	(setq box_center (vlax-3d-point (+ x_from (/ (- x_to x_from) 2.0)) (+ y_from (/ (- y_to y_from) 2.0)) (+ z_from (/ (- z_to z_from) 2.0)))
    						  	  	  	  box_Length (abs (- x_to x_from))
							  	  	  	  box_Width (abs (- y_to y_from))
							  	  	  	  box_Height (abs (- z_to z_from))
							  	  	)

									(setq boxes_processed (1+ boxes_processed))

									(if (= "C-Import" macro_direction)
										(progn
											(command "_.box" "_c" "_non" (vlax-safearray->list (vlax-variant-value box_center)) "l" box_Length box_Width box_Height)
							  	  			(setq box_Object (vlax-ename->vla-object (entlast)))
										)
								  	  	(setq box_Object (vla-AddBox modelSpace_object box_center box_Length box_Width box_Height))
									)

									(setq object_truecolor (vlax-create-object (strcat "AutoCAD.AcCmColor." (substr (getvar "ACADVER") 1 2))))
									(vla-put-ColorMethod Object_truecolor acColorMethodByACI)
									(vla-put-ColorIndex Object_TrueColor soil_number)
									(vla-put-TrueColor box_object object_truecolor)
							  	)
							)
  						)
						(if (= "C-Import" macro_direction) (vla-EndUndoMark document_object))

  						(close boxes_file)
						(princ (strcat "\nTotal of " (itoa boxes_processed) " 3DBoxes Were Imported"))
					)
					(princ "\nYou've Just Cancelled the Command!")
				)
			)
			(
				(= "Export" macro_direction)
					(setq document_Selection_sets (vla-get-SelectionSets document_object)
		  				  there_is_3DBoxes_Sset nil
					)
					(vlax-for selection_set document_Selection_sets
						(if (= "3DBoxes_Sset" (vla-get-name selection_set))
							(setq there_is_3DBoxes_Sset t
								  3DBoxes_sset_Object selection_set
							)
						)
					)
					(if there_is_3DBoxes_Sset
						(progn
							(vla-delete 3DBoxes_sset_Object)
							(vlax-release-object 3DBoxes_sset_Object)
							(setq 3DBoxes_sset_Object (vla-Add document_Selection_sets "3DBoxes_Sset"))
						)
						(setq 3DBoxes_sset_Object (vla-Add document_Selection_sets "3DBoxes_Sset"))
					)
	 				(setq group_Code (vlax-make-safearray vlax-vbInteger '(0 . 0)))
					(vlax-safearray-put-element group_Code 0 0)
					(setq data_Value (vlax-make-safearray vlax-vbVariant '(0 . 0)))
					(vlax-safearray-put-element data_Value 0 "3DSOLID")

					(setq hide_output (vl-catch-all-apply 'vla-SelectOnScreen (list 3DBoxes_sset_Object group_Code data_Value)))

					(if (< (vla-get-count 3DBoxes_sset_Object) 1)
						(princ "\nYou've Selected Nothing or Command Was Cancelled.")
						(if	(setq file_to_open (getfiled "Enter 3DBoxes Data File Name to Write to" drawing_path "txt" 3))
							(progn
								(setq boxes_file (open file_to_open "w"))
								(setvar "USERS1" (vl-filename-directory file_to_open))
								(setq boxes_processed 0)
								(vlax-map-collection 3DBoxes_sset_Object
									'(lambda (sset_box)
										(vla-GetBoundingBox sset_box 'min_XYZ 'max_XYZ)
								  		(setq soil_number (vla-get-ColorIndex (vla-get-truecolor sset_box))
								 			  current_soil (strcat "\"SoilNumber\": " (itoa soil_number) ",\n"
																   "\"xfrom\": "      (rtos (car (vlax-safearray->list min_XYZ)) 2 1) ",\n"
																   "\"xto\": "        (rtos (car (vlax-safearray->list max_XYZ)) 2 1) ",\n"
																   "\"yfrom\": "      (rtos (cadr (vlax-safearray->list min_XYZ)) 2 1) ",\n"
																   "\"yto\": "        (rtos (cadr (vlax-safearray->list max_XYZ)) 2 1) ",\n"
																   "\"zfrom\": "      (rtos (caddr (vlax-safearray->list min_XYZ)) 2 1) ",\n"
																   "\"zto\": "        (rtos (caddr (vlax-safearray->list max_XYZ)) 2 1) ",\n"
														  )
										)
										(write-line current_soil boxes_file)
										(setq boxes_processed (1+ boxes_processed))
									 )
								)
								(close boxes_file)
								(princ (strcat "\nTotal of " (itoa boxes_processed) " 3DBoxes Were Exported"))
							)
							(princ "\nYou've Just Cancelled the Command!")
						)
					)
			)
			(
				t
					(princ "\nCommand was Cancelled")
			)
		)
	(if (= "C-Import" macro_direction)
		(progn
			(foreach nth_sys_var 3DBoxes_In_Out_Sys_vars (setvar (car nth_sys_var) (cadr nth_sys_var)))
			(setq 3DBoxes_In_Out_sys_vars nil)
		)
	)
	(foreach nth_var 3DBoxes_In_Out_vars (set nth_var nil))
	(setq 3DBoxes_In_Out_vars nil)

  	(princ)
)

;****************************************************************************************************************************************************


Вложения
Тип файла: dwg
DWG 2010
3DBoxes_Test.dwg (78.4 Кб, 9 просмотров)
Тип файла: rar 3DBoxes_Test_Out.rar (370 байт, 8 просмотров)

Последний раз редактировалось koMon, 24.01.2018 в 16:22.
koMon вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 24.01.2018, 14:57
#10
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,693
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от koMon Посмотреть сообщение
Предлагаю лисп по импорту/экспорту данных
В 89 строке в опции команды "_.BOX" поставь подчеркивание. Не будет работать в локализованных версиях

Цитата:
(command "_.box" "_c" "_non" ...
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 24.01.2018, 16:24
#11
koMon


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


Цитата:
Сообщение от VVA Посмотреть сообщение
В 89 строке в опции команды "_.BOX" поставь подчеркивание. Не будет работать в локализованных версиях
Спасибо). Исправил. Прикипел я как-то к а/я автокаду...
koMon вне форума вставить имя Обратить внимание модератора на это сообщение  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Импорт координат и функций в txt

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

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

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Параметризация координат точки, импорт данных из TXT stalker0220 Прочее. Программное обеспечение 2 03.12.2011 18:41
Импорт координат точек из файла съемки тахеометра Trimble M3 в AutoCAD Red Nova Программирование 33 17.05.2011 16:46
Импорт координат Oleg Kalyuzhny AutoCAD 23 23.05.2010 15:57
Импорт координат чертежа в AutoCAD Wer666 Программирование 3 15.01.2009 11:21
Помощь по Лире Серега М Лира / Лира-САПР 52 28.05.2007 02:47

|| Главная || Каталог САПР || Тендеры || Публикации || Объявления || Биржа труда || Download || Галерея ||
|| Библиотека || Кунсткамера || Каталог предприятий || Контакты || Файлообменник || Блоги ||