Зіткнувся з проблемою, що в деяких випадках команда “Петля в складний полігон” просто не працює. А саме, коли петля створювалася спочатку по внутнішніх точках (довкола будівлі), а вже потім по зовнішніх (як на зображенні).
Бачив по форумі, раніше була проблема, що якщо петля починалася з першої точки, то дублювалися суміжники. І там sergeypetrovi4 піднімав питання, як за допомогою скрипту дізнатися, що об’єкт має форму петлі? Чи реалізована така можливість? Якщо не вдастся виправити цю проблему, то тоді можна ось такі петлі, які починаються всередину просто перерисовувати заново командою “Петля” і вже тоді перетворювати у складний полігон. Але для цього потрібна скриптова функція, яка перевіряє об’єкт на те, має він петлю чи ні.
Відмічу також, що якщо в об’єкті є кілька внутрішніх контурів, то функція неправлиьно працює тільки із першим об’єктом. Всі інші формуються.
Також приєднуюсь до запитання.
Якщо Вам потрібно, то функцію, яка визначає, чи є об’єкт у формі петлі чи ні, я вже придумав, але вона знаходить тільки ті петлі, які починаються з першої точки об’єкту (для мого випадку підходять ідеально, бо якщо петля починається не з першої точки, то вона не може бути неправильною, тобто починатися не назовні, а всередину):
Перевірка | Очистить удаленные объекты
$MC=@Map.Count
$N=0
%Pochatok
$R=0
$N=$N+1
$KoordP1=@Map.Object[$N].Point[1]
@Map.SelectObject $N
@Map.Selected.MarkPoints ALL
$PC=@Map.Object[$N].GetMarkedPointsCount
@Map.Selected.MarkPoints CLEAR
$NP=0
%StartPoint
$NP=$NP+1
$KoordP=@Map.Object[$N].Point[$NP]
@If $KoordP<>$KoordP1 then @Goto %Next
$R=$R+1
%Next
@if $NP<$PC then @Goto %StartPoint
@if $R=3 then @Dialog.Message Виділений об’єкт має форму петлі
@Map.DeselectAll
@if $N<$MC then @Goto %Pochatok
Але, як тепер перерисувати цей об’єкт заново уже з правильною формою ще не знаю.
До речі, питання до розробників, чому немає у скриптах функції @Map.Object[N].Points.Count?