Автоматическая нумерация скважин и рядов в буровом блоке
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Автоматическая нумерация скважин и рядов в буровом блоке

Автоматическая нумерация скважин и рядов в буровом блоке

Ответ
Поиск в этой теме
Непрочитано 20.12.2014, 15:15 #1
Автоматическая нумерация скважин и рядов в буровом блоке
Peter123
 
semsk
Регистрация: 04.04.2007
Сообщений: 9

Добрый день всем!

Помогите решить задачу с автоматической нумерацией буровых скважин по рядам. Имеется файл с интерполированными на поверхность точечными объектами (отметка у все разная), точки разбиты по рядам. Задача - автоматически пронумеровать точки в рядах, в формате 1-1 (ряд 1 скважина 1), 1-2 (ряд 1 скважина 2),...., 45-20 (ряд 45 скважина 20) и т.д. Задача усложняется тем, что нужно чтобы подписи имели те же отметки (координату Z), что и точки к которым они относятся, для дальнейшей обработки параметров бурового блока. Я написал лисп, в котором задаешь номер ряда и выбираешь последовательно точки из этого ряда с объектной привязкой, подпись ставится с приращением номера скважины, дальше перехожу на следующий ряд и т.д. При наличии в блоке 500-600 скважин и 40-50 рядов довольно трудозатратно . Если есть несложный алгоритм, буду рад помощи! Заранее спасибо! Ниже лисп и dwg файл, как должен выглядеть результат.


Код:
[Выделить все]
(Defun C:ns2 (/ pt1 ssn num_skv)
(command "osmode" 8)
(command "ORTHOMODE" 0)
(command "angbase" 0.0)
(setq CurEntIndex 0
         ssn 1
          heigth 0.4
)
	;(setq heigth (getreal "высота текста"))
	(setq num_row (getstring "номер ряда"))
	(setq skv 0)
(while (< CurEntIndex ssn)
	(setq
		pt1 (getpoint "\nselect point")
		skv (+ skv 1)
	)
		;(SETQ
		;	TxtAngle (getvar "VIEWTWIST")
		;	TxtAngle1 (*(/ TxtAngle PI) 180)
		;)
	(setq
		skv_txt (rtos skv 2 0)
         	num_skv (strcat num_row "-" skv_txt)
	)

(command "text" pt1 heigth 0 num_skv)

)
(command "osmode" 555)
(command "ORTHOMODE" 0)
)
----- добавлено через ~13 мин. -----
Для упрощения можно добавить исходные данные - указать исходную точку, угол направления рядов, расстояние между скважинами и рядами (оно обычно постоянное) и т.д.

Вложения
Тип файла: dwg
DWG 2010
буровой блок- результат.dwg (82.8 Кб, 1040 просмотров)


Последний раз редактировалось Кулик Алексей aka kpblc, 20.12.2014 в 23:19.
Просмотров: 3620
 
Непрочитано 20.12.2014, 17:51
#2
nolte

спринклеры, сантехника
 
Регистрация: 26.01.2010
Сообщений: 190
Отправить сообщение для nolte с помощью Skype™


ряды - лежат в одну линию как на чертеже, только высота разная?
алгоритм видится следующий
1 Указываем первую точку первого ряда и последнюю точку первого ряда
2 чертим из первой точки в последнюю линию или луч (получаем угол ряда)
3 затем обнуляем координату z (с запоминанием его значения) и проверяем если точки лежат на прямой с определенным допуском.
4 и нумеруем точки с записью в чертеж и координатой z, которую ранее запомнили
5 Указываем первую точку следующего ряда(угол у нас уже есть)
6 повторяем шаги 2, 3, 4
функции vlax-curve-*
__________________
Знание лисп: со справочником Н. Полещука
nolte вне форума  
 
Непрочитано 20.12.2014, 22:04
#3
VVA

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


может здесь что подберешь
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 24.12.2014, 10:01
#4
Wion

Инженер-проектировщик
 
Регистрация: 05.11.2014
Санкт-Петербург
Сообщений: 19


Дело было вечером, делать было нечего!
Примерно так!
Переходишь в МСК. Выбираешь все точки подлежащие нумерации!
Первой скважиной указываешь точку которая лежит в углу прямоугольника образуемого массивом точек. Тоже самое с последними скважинами в ряду и колонке. Если говорить по другому, то нужно задать прямоугольную область в которой производится наша нумерация.
Далее задаешь расстояние между рядами и колонками (расстояние в плане) и начальные значения для рядов и колонок!

Программа "шагает" по рядам и колонкам от первой указанной точки до тех пор пока не достигнет пределов указанной области. На каждом шаге перебирает весь массив указанных точек измеряя расстояние от текущей точки до искомой (отбрасывая отметку z). Если полученное расстояние меньше или равно переменной "radius" (радиус поиска), то выполняет нумерация точки (создается текст на одной отметке z c точкой). Можно задать префиксы для для рядов и колонок, см. переменные prefrow и prefco. Детально не тестировал...

Имя команды num-drill.

Код:
[Выделить все]
 (defun C:num-drill (/ ssnab	 i	    lstpoints  startpoint
		      point1	 point2	    angrow     angcol
		      wdrow	 wdcol	    curlenrow  curlencol
		      lenrow	 lencol	    curpt      mindist
		      zpt	 radius	    numrow     numcol
		      curpt	 prefrow    prefcol    curcol hgtx
		      st
		     )
  (vl-load-com)

  (setq	radius 2 ;_радиус поиска
	prefrow	"" ;_префикс ряда
	prefcol	"" ;_префикс колонки
	hgtx 0.6  ;_высота текста
  )

  (defun point-xy (point)
    (list (car point) (cadr point))
  )

  (if (setq ssnab (ssget '((0 . "point"))))
    (progn
      (setq startpoint (getpoint "\Укажите первую скважину:")
	    point1     (getpoint startpoint
				 "\nУкажите последнюю скважину в ряду:"
		       )
	    point2     (getpoint startpoint
				 "\nУкажите последнюю скважину в колонке:"
		       )
	    wdrow      (getreal "Укажите расстояние между рядами:")
	    wdcol      (getreal "Укажите расстояние между колонками:")
	    numrow     (getint "Номер первой скважины в ряду:")
	    numcol     (getint "Номер первой скважины в колонке:")
	    angrow     (angle startpoint point1)
	    angcol     (angle startpoint point2)
	    lenrow     (distance (point-xy startpoint) (point-xy point1))
	    lencol     (distance (point-xy startpoint) (point-xy point2))
	    i	       0
	    curlenrow  0
	    curlencol  0
	    spd	       (vla-get-ModelSpace
			 (vla-get-ActiveDocument (vlax-get-acad-object))
		       )
      )
      (repeat (sslength ssnab)
	(setq lstpoints	(cons (vlax-ename->vla-object (ssname ssnab i))
			      lstpoints
			)
	      i		(1+ i)
	)
      ) ;_repeat
      (setq coordpoints
	     (mapcar
	       (function
		 (lambda (x)
		   (vlax-safearray->list
		     (vlax-variant-value (vla-get-Coordinates x))
		   )
		 )
	       )
	       lstpoints
	     )
      )

      (while (< curlencol (+ lencol (/ wdrow 2)))
	(setq curpt (point-xy startpoint)
	      curlenrow	0
	      curcol numcol
	      st nil
	)
	(while (< curlenrow (+ lenrow (/ wdcol 2)))
	  (setq	mindist	radius
		zpt	nil
	  )
	  (mapcar
	    (function
	      (lambda (x)
		(if (<= (distance curpt (point-xy x)) mindist)
		  (setq	mindist	(distance curpt (point-xy x))
			zpt	(nth 2 x)
			st	t
		  )
		)
	      )
	    )
	    coordpoints
	  ) ;_mapcar
	  (if zpt
	    (progn
	      (vla-addText
		spd
		(strcat	prefrow
			(vl-princ-to-string numrow)
			" - "
			prefcol
			(vl-princ-to-string curcol)
		)
		(vlax-3d-point (append curpt (list zpt)))
		hgtx
	      )
	      (setq curpt     (polar curpt angrow wdcol)
		    curcol    (1+ curcol)
		    curlenrow (+ curlenrow wdcol)
	      )
	    )
	    (setq curpt	    (polar curpt angrow wdcol)
		  curlenrow (+ curlenrow wdcol)
	    )
	  )
	) ;_row

	(if st
	  (setq	startpoint (polar startpoint angcol wdrow)
		numrow	   (1+ numrow)
		curlencol  (+ curlencol wdrow)
	  )
	  (setq	startpoint (polar startpoint angcol wdrow)
		curlencol  (+ curlencol wdrow)
	  )
	)
      ) ;_while col
    ) ;_progn
  ) ;_if
  (princ)
) ;_end of defun num-drill

(princ "\nnum-drill")
Вложения
Тип файла: lsp numdrill.LSP (3.1 Кб, 33 просмотров)

Последний раз редактировалось Wion, 24.12.2014 в 10:06.
Wion вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Автоматическая нумерация скважин и рядов в буровом блоке



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматическая нумерация поворотных точек участка aydinkhalil Программирование 27 15.12.2024 23:12
Изменение команды NUM (автоматическая нумерация) ПроектантБС Программирование 2 01.02.2012 10:51
автоматическая нумерация в атрибутах блока Michael-- AutoCAD 4 29.11.2010 21:24
Нумерация скважин Rjman AutoCAD 6 17.08.2007 01:02
Автоматическая нумерация текстов dorofei Программирование 8 18.01.2007 09:31