Головна » 2016 » Січень » 1 » Скриптові функції - Геометрія об'єктів
22:40
Скриптові функції - Геометрія об'єктів

В даному розділі описані скриптові функції, які стосуються геометрії об'єктів на карті. Створити новий (з нульовими координатами) об'єкт можна функцією @Map.NewObject Layer [ID]


Властивості геометрії об'єкта

@Map.GetObjectCoordinates Number - повертає ID об'єкта, номер шару і список координат точок

@Map.GetObject Number - повертає список координат точок об'єкта і список значень його параметрів

@Map.Object[N].LineAngle[N] - повертає дирекційний кут вказаної сторони об'єкта

@Map.Object[N].LineLength[N] - повертає довжину лінії вказаної сторони об'єкта

@Map.Object[N].GetMinMax - повертає розмах об'єкту у вигляді строки "MinX MinY MinZ MaxX MaxY MaxZ"

@Map.Object[N].Center - повертає координати центру об'єкта

@Map.Object[N].Centroid - повертає координати центроїда об'єкта

@Map.Object[N].PointList Mask [Datum] - повертає форматований список координат об'єкта

@Map.Object[N].Closed - повертає 1 - якщо об'єкт замкнутий і 0 - якщо не замкнутий

@Map.Object[N].ClosedComplex - повертає 1 - якщо об'єкт складний полігон і 0 - якщо не складний полігон

@Map.Object[N].SubObjects - повертає кількість частин об'єкта, що розділені розривами

@Map.Object[N].IsBreak PointIndex - повертає 1, якщо PointIndex-а точка об'єкта є розривом, та повертає 0 якщо це звичайна точка

@Map.Object[N].Path X Y / Distance - повертає довжину шляху від першої точки вздовж об'єкта до точки ХУ, або точку ХУ по довжині шляху

Редагування координат об'єкта

@Map.PutObjectCoordinates Number|ID|Layer|Count|List - змінює  ID об'єкта, номер шару і список координат точок. Цей список можна отримати попередньою функцією

@Map.PutObject Number|ID|Layer|Count|List|ID|Layer|Count|List - замінює список координат точок об'єкта і список значень його параметрів. Витягнути ці списки можна функцією @Map.GetObject

@Map.Object[N].Reverse - змінює порядок точок об'єкта на протилежний

@Map.AddObject 0|ID|Layer|Count|List|ID|Layer|Count|List - створює новий об'єкт із заданим списком координат і значенням параметрів.

@Map.LoadFromText String - завантажує координати об'єкта із списку в текстовому форматі

@Map.LoadFromWKT WKTString - завантажує координати об'єкта із рядка в форматі Well Known

Редагування окремих точок об'єкта

@Map.Object[N].AddPoint X Y [Z] - додає в об'єкт точку і повертає її номер

@Map.Object[N].Add X Y [Z] - те саме

@Map.Object[N].Insert PointIndex X Y [Z] - додає в об'єкт точку з координатами після точки за номером PointIndex і повертає її номер

@Map.Object[N].Point[N].[x y z] - повертає/змінює координати конкретної вказаної точки об'єкта

@Map.Object[N].Delete StartPointIndex [StopPointIndex] - видаляє першу точку об'єкта

@Map.Object[N].StartFromPoint PointIndex - робить початковою PointIndex точку об'єкта

@Map.Object[N].AddBreak - додає розрив за останньою точкою об'єкта (для того, щоб потім додати ще точки після цього, а якщо не додати - то розбрив зникне)

@Map.InsertPointsToSelectedPolygons Layer HorizStep VertStep Chess RotationAngle HorizShift VertShift - додає точки у виділені полігони

@Map.Object[N].Count - повертає кількість точок в об'єкті

@Map.Object[N].IndexOfPoint X Y - шукає точку об'єкта N, яка має координати X Y (повертає номер точки або 0 - якщо такої не знайдено). Координата Z ігнорується, навіть якщо така вказана

Маркування точок об'єкта

@Map.Object[N].SetPointMarked PointIndex 0/1 - маркує точку PointIndex, якщо задано 1 і знімає маркування, якщо задано 0

@Map.Selected.MarkPoints PointNumber1 [PointNumber2] | ALL | CLEAR - маркує точки виділеного об'єкта (за номерами, ALL-всі, CLEAR - очищує маркування)

@Map.Object[N].GetMarkedPointsCount - перевіряє кількість замаркованих точок об'єкта

@Map.Object[N].GetPointMarked PointIndex - повертає 1, якщо точка PointIndex замаркована, інакше - 0

Пікети

@Map.AddNodes LayerNumber Mode - додає точки у вузли виділених об'єктів. Mode відповідає вибору у вікні Добавити вузли (1-7)

@Map.Object[N].Node PointNumber [Layer] - повертає номер пікета, який співпадає з точкою об'єкта

@Map.PointObject Layer/0 X Y [Z] - повертає номер точкового об'єкта із заданими координатами

@PasteAddressDatabase PasteLayerIndex - створює точкові об'єкти по їх адресах на карті

@Map.ImportGMProject Filename - імпортує точки із GM-проекту

Переміщення та розворот об'єкта

@Map.Object[N].Move X Y [Z] - переміщує об'єкт в указаний вектор

@Map.Object[1].Move 0 100 0
;перемістить об'єкт 1 вправо на 100 метрів

@Map.Object[N].MoveTo X Y [Z] - переміщує об'єкт в указану точку

@Map.MovePoints -  переміщує передостанній позначений точковий об'єкт на останній позначений точковий об'єкт

@Map.Selected.Rotate Angle - повертає виділений об'єкт на вказаний кут

@Map.AlignToSelected ObjectNumber [Tolerance] - суміщає об'єкт із виділеним об'єктом, якщо потрібно розвертаючи також

 

Масштабування об'єкта

@Map.RescaleObject Index ScaleFactor - масштабує об'єкт відносно його центру (аналогічно як в меню Правка/Спеціальна вставка/В іншому масштабі

@Map.Object[N].Scale - повертає/змінює масштаб об'єкта (який встановлюється через меню Спеціальна вставка - В іншому масштабі)

@Map.Selected.Prolong Length -  продовжу лінію у дві сторони на задану довжину

Спрощення об'єкта

@Map.Selected.Smooth - згладжує виділені об'єкти (наприклад, горизонталі)

@Map.Object[N].Filter [MinDistance] - в об'єкті видаляє відрізки меньші ніж MinDistance

@Map.GeneralizeObject ObjectIndex [Accuracymm] - виконує генералізацію (видалення точок на рівних лініях) об'єкта з точністю Accuracymm

@Map.Generalization Accuracymm - виконує команду Карта/Генералізація із заданою точністю в міліметрах на карті (дана опція автоматично видаляє точки, які на рівній лінії) зразу для усіх об'єктів, що на карті

Перетворення в інший об'єкт

@Map.ConvertComplexToLoop ObjIndex - перетворює складний полігон в полігон з петлями

@Map.ConvertLoopToComplex ObjIndex - перетворює полігон з петлями в складний полігон

@Map.Object[N].Transform X1 Y1|X2 Y2|X3 Y3|X4 Y4...- перетворює об'єкт по заданих точках. Точки утворюють пари: початкова і кінцева позиція.

@Map.Selected.ToStrip Width [0/1 - buffer] - перетворює виділені об'єкти в смуги заданої ширини (чи буферну зону - дод. параметр 1)

@Map.Selected.ExpandPolygon Value - виконує команду Розширити/стиснути на вказану відстань

@Map.Selected.ClipImage BorderWidth - перетворює позначені об'єкти у збірні (через розрив) з побудовою внутрішніх полігонів / поліліній з розрахунку дотримання відстані BorderWidth від меж позначених об'єктів

Поділ

@Map.SplitObject ObjectIndex PointIndex - розділяє об'єкт у вказаній точці

@Map.SplitMultiPolygon N - розбиває складний полігон на окремі

Підгін площі

@Map.AdjustObjectArea N Area [Delta] - злегка (в межах Delta) міняє координати точок, щоб вийшла потрібна площа.

@Map.RescaleObjectToArea Index NewArea - масштабує об'єкт з порядковим номером Index для приведення його площі до нового значення (NewArea).

$I=@Map.NextSelected
@If $I<=0 @Break Виділіть об'єкт для масштабування
$A=@Map.Object[$I].Parameter[0]
$A=@Dialog.Ask Введіть нову площу Default=$A
@If $A= @Break
@Map.Undo.StartOperationGroup
@Map.Undo.SaveObject $I
@Map.RescaleObjectToArea $I $A
@Window.Refresh

Між об'єктами

@Map.MinObjectDistance Object1 Object2 - розраховує мінімальну відстань між двома 2d об'єктами

@Map.ShortestSegmentBetweenObjects Object1 Object2 - повертає координати точок найкоротшого відрізка, що з'єднує 2 заданих об'єкта

@Map.CreateSharedBorder [LayerIndex] - створює об'єкт спільної межі між двома виділеними полігонами

@Map.SharedBorderCount ObjIndex1 ObjIndex2 - повертає кількість ребер спільної межі двох об'єктів карти

@Map.NearestObject Range IgnoreObj X Y Z - шукає найближчий (на відстані Range об'єкт до точки з заданими координатами. IgnoreObj - об'єкт, який ігнорується.

@Map.NearestPoint ObjNumber Range X Y Z - знаходить найближчу до точки XYZ точку заданого об'єкта в межах відстані Range (Range = 0 - немає обмеження по відстані).

@Map.MakeInvisibleLine P1 P2 [SkipObject] - створює невидимий відрізок вздовж точок P1-P2 у всіх знайдених об'єктах карти. Точки P1-P2 повинні лежати в межах одного сегмента знайдених об'єктів. SkipObject - номер об'єкта, який не бере участі в пошуку і повинен бути пропущений.

@Map.PerpendicularToNearestLine FromPoint ToObj SegmObjLayer [Reverse] - створює об'єкт з 2-х точок. Перша точка From Point, стара точка, що лежить на найближчому сегменті об'єкта, ToObj.PerpendicularLayer - шар нового об'єкта. Reverse - якщо вказано змінює напрямок створеного об'єкта.

@WGS84Azimuth B1 L1 B2 L2 - вираховує азимут і відстань по двох геодезичних точках

@Map.Object[N].OverlayList [Layer] - повертає список об'єктів з площею 0, які перетинають даний об'єкт. Якщо заданий шар - то тільки в цьому шарі.

@Map.ClipOverlappedPolygons ObjIndex - обрізає полігони того ж шару для виправлення накладок

@Map.IntersectionWithLayer ObjectIndex LayerIndex - створює об'єкт-пересічення з об'єктами заданого шару

@Map.DeleteOverlays - видалає точки, що співпадають в об'єктах інших шарів

@Map.FitToSelected ObjectNumber [Tolerance] - суміщає точки об'єкта з точками виділеного об'єкта

Інші функції

@Map.Object[N].ToCircle - створює круг по зовнішніх точках (довкола) вказаного об'єкта

@Map.ContourMap - створює полігон довкола всіх наявних об'єктів карти

@Map.TileObject ObjIndex SizeX SizeY - покриває об'єкт прямокутними рамками

@Map.AssemblePolygon Layer X Y Z [LayerIndex1 LayerIndex2 ...] - створює складний полігон по його внутрішній точці і повертає його номер

@Map.Object[N].Radius - повертає радіус, СКО і центр дуги

@Map.Object[N].MultiPolygon Layer [Layers List] - створення складного полігонального об'єкта у шарі з порядковим номером або ID Layer, межами якого є межі об'єктів у шарах з ID Layers List, при чому центроїд створюваного полігонe - точковий об'єкт з номером N. Є аналогом попередньої функції

@Map.Object[$I].MultiPolygon ID$New ID$A ID$B ID$C
;$I - номер точкового об'єкта, розміщеного всередині  полігону, що стврюється;
;$New - ID шару створюваного полігону;
;$A, $B, $C - ID шарів, межі об'єктів яких будуть слугувати межами створюваного полігону.

@Map.MakeDoor RefPolyline DoorKind(1..4) - створює об'єкт, що представляє відчинені двері на планах приміщень. RefPolyline - опорний об'єкт, що задає 3 точки дверного отвору. DoorKind - номер від 1 до 4, що задає вигляд дверей.

Відео-приклад    dmt-файл

@Map.CalculateForestArea Number [LayerIDs] - вираховує площу виділу за мінусом доріг, просік і т.д.

@Map.DisableDuplicates 0/1 - включає заборону однакової геометрії об'єктів (заборона вставляти в ту ж карту той самий об'єкт)

@Map.CheckSelectedByTriades [Limit] - ?

@Map.Object[N].AssignGeometry ObjectNumber - ?

 

Приклади

;розріджуємо об'єкти функцією @Map.NearestObject
$Range=@Dialog.Ask Введіть мінімальну відстань (в метрах) між об'єктами Default=10 Size=250
$id=@Dialog.Ask Введіть id об'єктів, які треба розрідити Default=71132400 Size=250
%Start0
$FrameObj=0
@Map.SelectLayer id$id
%Start
$FrameObj=@Map.NextSelected $FrameObj
@If $FrameObj=0 then @Goto %End
$X=@Map.Object[$FrameObj].Parameter[-4]
$Y=@Map.Object[$FrameObj].Parameter[-3]
$K=@Map.NearestObject $Range $FrameObj $X $Y 0
@If $K=0 then @Goto %Start
@Map.DeselectAll
@Map.SelectObject $K
@Map.Selected.Delete
Перевірка | Очистить удаленные объекты
@Goto %Start0
%End

 


Примітка: жирним шрифтом (напр.@ActivateMap) виділена назва функції, похилим шрифтом (напр.Number) перемінна функції, у квадратних скобках (напр.[MapNumber]) необов'язкова перемінна, яку можна не вказувати.

 

Переглядів: 6571 | Додав: Микола | Рейтинг: 0.0/0
Всього коментарів: 9
avatar
4 SerjN • 11:21, 06.05.2021
Доброго дня.
Підкажіть, як змінити відображення виділеного об'єкту з одного масштабу на інший.
Пробував за допомогою функції @Map.Object[N].Scale, але щось не виходе.
Наприклад масштаб карти 1:2000 потребується винести об'єкт в окреме зображення у збільшеному виді:
$Ms=500
$NObj=@Map.SelectedObject
@Map.Object[$NObj].Scale $Ms
@Map.Selected.Refresh
avatar
0
5 Микола • 16:29, 06.05.2021
Доброго дня!
$Ms=500
@Map.Cut
@SendChars $Ms<CR>
Спеціальна вставка | В іншому масштабі...
$NObj=@Map.SelectedObject
avatar
6 SerjN • 11:30, 08.07.2021
Дякую.
Ще одне питання по цій темі.
А якщо потрібно передати у вікно декілька параметрів і не тільки числові, а ше, наприклад, поставити або зняти помітки (галочки у чекбоксах), яким чином це можливо автоматизувати скриптом?
avatar
0
7 Микола • 13:00, 08.07.2021
Таке діалогове вікно у скриптах відсутнє, на жаль
avatar
8 SerjN • 16:07, 09.07.2021
Доброго дня.
У питанні йшла мова не про діалогові вікна у скриптах, а про те як із скрипта передати налаштування у стандартні діалогові вікна Діджиталса. Наприклад налаштування для діалогового вікна, яке викликається по команді: Вставка\ Розбивка на аркуші..., або Вставка\Номенклатурна рамка... чи таке інше. Там є як різні числові значення так і різні можливості вибору, або простановки "галочок".
avatar
0
9 Микола • 18:08, 09.07.2021
Доброго дня.
Можете подивитися на прикладі запуску вікна Вставка - Сітка:
$CMLine=@Assign 5000<TAB>5000<TAB><TAB><TAB><1><TAB><0><TAB><TAB><TAB><TAB><TAB><TAB><TAB><TAB><CR>
@SendChars $CMLine
Вставка | Сітка...

Тобто, тут знаками табуляції переходимо у потрібне поле і вводимо потрібне значення.
avatar
1 natali_kiss87 • 10:47, 23.04.2020
Доброго дня! Микола підкажіть чи є якийсь скрипт чи можливо спецкнопка щоб перевіряти чи немає перетину полігону? Або щоб точно вказало точку де відбувся цей перетин.
avatar
0
2 Микола • 21:23, 23.04.2020
Доброго дня!
Якщо полігон має перетин, то по ньому внизу на панелі інформації просто не відображатиметиься площа, бо це буде рахуватися не як полігон, а як полілінія.

Також на закладці Список відповідний об'єкт буде замість круга мати значок у вигляді зеленої букви С
avatar
3 natali_kiss87 • 09:21, 27.04.2020
Дякую.
avatar