Эта штука вводит объекты в любые темы.
Но только в одну, включенную на редактирование.
Текстовый файл следующих структур
числоХ числоУ
текст числоХ числоУ
текст числоХ числоУ числоН
координаты геодезические
Разделители: пробел, точка с запятой, табуляция
десятичная точка: точка или запятая
Повесить данный скрипт на кнопку в виде
При вводе можно задать смещение
'bbbbbb.InputCoord Ввод объекта по координатам из текстового файла
' При нажатии клавиши CONTROL запрос на наименование объекта не выдается;
' объектам присваивается имя файла. Если перед координатами обекта записана
' строка вида @O<имя>, то имя заносится в поле Name_Obj "наименование объекта"
' Обязательно присутствие символов "@" и "O" - латинская прописная буква.
' символы, следуюшие за @O воспинимаются как имя, начальные и конечные пробелы отсекаются.
If (System.IsControlKeyDown) Then NoName=false else Noname=true end
Adoc=av.GetActiveDoc
if (Adoc.Is(View).not) then exit end
tm=Adoc.GetEditableTheme
if (tm=nil) then
MsgBox.Error("Нет принимающей темы, включенной на редактирование!","Ошибка записи")
exit
end
ftm=tm.GetFTab
tk=ftm.GetShapeClass.GetClassName
if (tk="Polygon") then tc=3
elseif
((tk="PolyLine") or (tk="Line")) then tc=2
elseif
((tk="MultiPoint") or (tk="Point")) then tc=1
else tr=0
end
i=0
theFiles=FileDialog.ReturnFiles({"*"}, {"Любые файлы (*.*)"},"Файлы с координатами",0)
if (theFiles.Count=0) then exit end
Shft=MsgBox.MultiInput("Задайте смещение координат","Ввод координат из файлов",
{" dX_Geo - Вертикальное смещение",
"dY_Geo - Горизонтальное смещение"},{"0","0"})
if (Shft.IsEmpty) then exit end ' Нажата кнопка "Cancel"
Xnew=Shft.Get(0).Substitute(",",".").AsNumber
Ynew=Shft.Get(1).Substitute(",",".").AsNumber
' Установка полей принимающей темы
sd=ftm.FindFIeld("ID")
if (sd = Nil) then
fld=Field.Make("ID",#FIELD_FLOAT,8,0)
fld.SetAlias("Номер") ftm.AddFields({fld})
sd=ftm.FindFIeld("ID")
end
si=ftm.FindFIeld("IDENT")
if (si = Nil) then
fld=Field.Make("IDENT",#FIELD_CHAR,20,0)
fld.SetAlias("Объект") ftm.AddFields({fld})
si=ftm.FindFIeld("IDENT")
end
so=ftm.FindFIeld("Name_Obj")
if (so = Nil) then
fld=Field.Make("Name_Obj",#FIELD_CHAR,32,0)
fld.SetAlias("Имя объекта") ftm.AddFields({fld})
so=ftm.FindFIeld("Name_Obj")
end
if (tc=1)then
fL1=ftm.FindField("ID_pnt")
if (fL1=nil) then
fL1=Field.Make("ID_PNT",#FIELD_CHAR,6,0)
ftm.AddFields({fL1})
fL1.SetAlias("№_т.")
end
fL2=ftm.FindField("Y_pnt")
if (fL2=nil) then
fL2=Field.Make("Y_PNT",#FIELD_FLOAT,14,3)
ftm.AddFields({fL2})
fL2.SetAlias("X_Geo_Vert")
end
fL3=ftm.FindField("X_pnt")
if (fL3=nil) then
fL3=Field.Make("X_PNT",#FIELD_FLOAT,14,3)
ftm.AddFields({fL3})
fL3.SetAlias("Y_Geo_Gorz")
end
fL4=ftm.FindField("H_pnt")
if (fL4=nil) then
fL4=Field.Make("H_PNT",#FIELD_FLOAT,10,3)
ftm.AddFields({fL4})
fL4.SetAlias("H_Geo")
end
end
sh=ftm.FindField("Shape")
for each theFile in theFiles
NewFile=TRUE H_point=False New_Obj=False Obj_name="" ii=0
kftm = ftm.GetNumRecords + 1
fft=LineFile.Make(TheFile,#FILE_PERM_READ)
FnFl=fft.GetFileName.GetBaseName.AsString
lin = List.Make
if (tc=1) then idents=List.Make spnt=List.Make zpnt=List.Make end
FirstPoint=true More=False Poly={}
while (fft.isAtEnd.not)
NewFile=FALSE lpnt=fft.ReadElt
if (lpnt.Contains("@O")) then
if ((New_obj) and ((Poly.Count>0) or (Lin.Count>0))) then ' Много объектов в файле
nam=FnFl ' имя источника
if (tc=1) then
ii=0
if (Noname) then
nam=MsgBox.Input("Имя или код источника координат",
"Новые точечные объекты",FnFl)
end
for each pt in lin
nr=ftm.AddRecord
ftm.SetValue(sh,nr,Point.Make(lin.Get(ii).GetX,Lin.Get(ii).GetY))
ftm.SetValue(fL1,nr,idents.Get(ii).AsString)
ftm.SetValue(fL2,nr,spnt.Get(ii).GetY)
ftm.SetValue(fL3,nr,spnt.Get(ii).GetX)
if (H_point) then
ftm.SetValue(fL4,nr,zpnt.Get(ii))
end
ftm.SetValue(sd,nr,kftm+ii)
ftm.SetValue(si,nr,nam.AsString)
ftm.SetValue(so,nr,Obj_Name.AsString)
ii=ii+1
end
else
if (More.Not) then Poly.Add(lin.AsList) end
if (tc=3) then
NewObject=Polygon.Make(Poly) aa="Полигона № "
else
NewObject=PolyLine.Make(Poly) aa="Линии № "