У меня есть две примочки для проставления номеров точек и высотных отметок (см. ниже), а вот бы туда еще горизонтали добавить (с возможностью проставления через 0,5 м и 1 м, и точки указать в виде заштрихованного круга
а примочки вот они:
Файл для вставки координат должен иметь следующий вид:
№ точки коорд.X коорд.Y высота H (разделитель пробел) программа воспринимает разделитель целой и дробной части в виде точки,запятые не воспринимаются
1 100.00 120.20 180.00
2 120.00 150.14 180.15
3 150.00 130.40 180.07
В данной прогр. реализуется проставление № точек по их координатам из txt файла опсианного выше:
(defun C:POINTIMPORT ()
(if (not (tblsearch "BLOCK" "TOPO_POINT"))
(progn
(entmake
(mapcar 'cons
(list 0 8 2 70 10 3)
(list "BLOCK" "0" "TOPO_POINT" 2 '(0 0 0) "TOPO_POINT")))
(entmake
(mapcar 'cons
(list 0 8 62 10 210 50)
(list "POINT" "0" 0 '(0 0 0) '(0 0 1) 0.0)))
(entmake
(mapcar 'cons
(list 0 8 62 10 40 70 1 210 3 2)
(list "ATTDEF" "0" 0 '(1 1 0) 2.5 0 "" '(0 0 1) "Номер точки" "TOPO_POINT_NUMBER")))
(entmake
(mapcar 'cons
(list 0 8)
(list "ENDBLK" "0")))))
;
(if (not (tblsearch "STYLE" "TOPO"))
(progn
(command "_.STYLE" "TOPO" "TXT.SHX" "0" "1.0" "0" "" "" "")
))
(setq layername (getstring T "\nИмя слоя для точек: "))
(if
(progn
(setq filename (getfiled "Файл данных" "" "txt" 0))
(if filename
(setq f (open filename "r"))))
(while (setq s (read-line f))
(setq l (read (strcat "(" s ")")))
(mapcar 'set (list 'n 'y 'x 'z) l)
(entmake
(mapcar 'cons
(list 0 8 62 66 2 10 210)
(list "INSERT" layername 256 1 "TOPO_POINT" (list x y 0) '(0 0 1))))
(entmake
(mapcar 'cons
; (list 0 8 62 10 40 1 2 70 210)
; (list "ATTRIB" layername 256 (append (mapcar '1+ (list (- x 0.75) (- y 0.75))) (list z)) 0.8 (itoa n) "TOPO_POINT_NUMBER" 0 '(0 0 1))))
(list 0 7 8 62 10 40 1 2 70 210)
(list "ATTRIB" "TOPO" layername 256 (append (mapcar '1+ (list (- x 0.75) (- y 0.75))) (list (- z z))) 0.8 (itoa n) "TOPO_POINT_NUMBER" 0 '(0 0 1))))
(entmake
(mapcar 'cons
(list 0 8 62)
(list "SEQEND" layername 256))))
(prompt "\nФайл не найден."))
(prin1)
)
В данной прогр. реализуется проставление высот точек по их координатам из txt файла опсианного выше:
(defun C:POINTIMPORT_H ()
(if (not (tblsearch "BLOCK" "TOPO_POINT"))
(progn
(entmake
(mapcar 'cons
(list 0 8 2 70 10 3)
(list "BLOCK" "0" "TOPO_POINT" 2 '(0 0 0) "TOPO_POINT")))
(entmake
(mapcar 'cons
(list 0 8 62 10 210 50)
(list "POINT" "0" 0 '(0 0 0) '(0 0 1) 0.0)))
(entmake
(mapcar 'cons
(list 0 8 62 10 40 70 1 210 3 2)
(list "ATTDEF" "0" 0 '(1 1 0) 2.5 0 "" '(0 0 1) "Номер точки" "TOPO_POINT_NUMBER")))
(entmake
(mapcar 'cons
(list 0 8)
(list "ENDBLK" "0")))))
;
(if (not (tblsearch "STYLE" "TOPO"))
(progn
(command "_.STYLE" "TOPO" "TXT.SHX" "0" "1.0" "0" "" "" "")
))
(setq layername (getstring T "\nИмя слоя для точек: "))
(if
(progn
(setq filename (getfiled "Файл данных" "" "txt" 0))
(if filename
(setq f (open filename "r"))))
(while (setq s (read-line f))
(setq l (read (strcat "(" s ")")))
(mapcar 'set (list 'n 'y 'x 'z) l)
(entmake
(mapcar 'cons
(list 0 8 62 66 2 10 210)
(list "INSERT" layername 256 1 "TOPO_POINT" (list x y 0) '(0 0 1))))
(entmake
(mapcar 'cons
; (list 0 8 62 10 40 1 2 70 210)
; (list "ATTRIB" layername 256 (append (mapcar '1+ (list (- x 0.5) (- y 1.9))) (list z)) 0.8 (rtos z) "TOPO_POINT_NUMBER" 0 '(0 0 1))))
(list 0 7 8 62 10 40 1 2 70 210)
(list "ATTRIB" "TOPO" layername 256 (append (mapcar '1+ (list (- x 0.5) (- y 1.9))) (list (- z z))) 0.8 (rtos z) "TOPO_POINT_NUMBER" 0 '(0 0 1))))
(entmake
(mapcar 'cons
(list 0 8 62)
(list "SEQEND" layername 256))))
(prompt "\nФайл не найден."))
(prin1)
)