Скрипти Допоможіть будь ласка.)

Доброго дня! Хто може допомогти або підказати що потрібно ще дописати щоб вставляло проміри без нажимання кнопки ок та без діалогового вікна Вставка проміри схема!

@Map.DeselectAll
@Map.SelectLayer ID11330000
@Map.SelectLayer ID20000
Вставка | Промеры и схема…

Використайте команду @SendChars у своєму скриптi

@Map.DeselectAll
@Map.SelectLayer ID11330000
@Map.SelectLayer ID20000
@SendChars
Вставка | Промеры и схема…
@Map.DeselectAll

Важливо щоб усі потрібні “галочки” вже були обрані в цьому діалозі до виклику скрипта

Скрипт для виставлення потрiбних параметрiв вiкна “Промiри та схема” перед викликом вiкна
$CBMode=[Режим (0 - промiри, 1 - схема)]
$CBVisible=[Промiри тiльки до видимих (1 - так, 0 - нi)]
$CBRight=[Круг право (для Режиму $CBMode=1) 1 - так, 0 - нi]

; Режим (0 - промiри, 1 - схема) $CBMode=0 ; Промiри тiльки до видимих (1 - так, 0 - нi) $CBVisible=0 ; Круг право (для Режиму $CBMode=1) $CBRight=0 ; $PPath=@ProgramPath $IniFile=$PPath\Ged.ini $Ex=@FileExists $IniFile @If $Ex=0 Then @Break Помилка читання файлу налаштувань! @Text[1].Load $IniFile ; ------------------------------------------------------------------------- ; замiна FormID.grbMode ; ------------------------------------------------------------------------- $Pos=@Text[1].IndexOf [FormID.grbMode] @If $Pos=0 Then @Break Помилка читання файлу налаштувань!|Вiдсутнiй тег [FormID.grbMode] $Pos=$Pos+1 $Line=@Text[1].Line[$Pos] $Param=@StringPart 1=$Line @If "$Param"<>"ItemIndex" Then @Break Помилка читання файлу налаштувань!|Помилковий параметр тегу [FormID.grbMode]|Очiкується "ItemIndex", отримано "$Param" ; ставимо значення 0 ('Промiри') $Line=$Param=$CBMode @Text[1].Line[$Pos]=$Line ; ------------------------------------------------------------------------- ; замiна FormID.chbVisible ; ------------------------------------------------------------------------- $Pos=@Text[1].IndexOf [FormID.chbVisible] @If $Pos=0 Then @Break Помилка читання файлу налаштувань!|Вiдсутнiй тег [FormID.chbVisible] $Pos=$Pos+1 $Line=@Text[1].Line[$Pos] $Param=@StringPart 1=$Line @If "$Param"<>"Checked" Then @Break Помилка читання файлу налаштувань!|Помилковий параметр тегу [FormID.chbVisible]|Очiкується "Checked", отримано "$Param" ; ставимо значення 0 (вiдключаємо) $Line=$Param=$CBVisible @Text[1].Line[$Pos]=$Line ; ------------------------------------------------------------------------- ; замiна FormID.chbRight ; ------------------------------------------------------------------------- $Pos=@Text[1].IndexOf [FormID.chbRight] @If $Pos=0 Then @Break Помилка читання файлу налаштувань!|Вiдсутнiй тег [FormID.chbRight] $Pos=$Pos+1 $Line=@Text[1].Line[$Pos] $Param=@StringPart 1=$Line @If "$Param"<>"Checked" Then @Break Помилка читання файлу налаштувань!|Помилковий параметр тегу [FormID.chbRight]|Очiкується "Checked", отримано "$Param" ; ставимо значення 0 (вiдключаємо) $Line=$Param=$CBRight @Text[1].Line[$Pos]=$Line ; ------------------------------------------------------------------------- ; записуємо змiнений файл @Text[1].Save $IniFile ;@SendChars <CR> @ExecuteMenu InsertDistances ;

Доброго дня.
Руслан гарно виклав - розписав детально :smiley: .
Можна ще скористатися функцією dll, тоді перевіряти наявність ключів та секцій не треба: якщо таких немає - будуть створені.; Режим (0 - промiри, 1 - схема) $CBMode=0 ; Промiри тiльки до видимих (1 - так, 0 - нi) $CBVisible=0 ; Круг право (для Режиму $CBMode=1) $CBRight=0 ; $PPath=@ProgramPath $IniFile=$PPath\Ged.ini $Ex=@FileExists $IniFile @If $Ex=0 Then @Break Відсутній файл $PPath\Ged.ini! ; ;Параметр - рядок, в якому 4 значення, розділених символом "/": повний ; шлях до ini-файла; назва секції; назва ключа; нове значення ключа. @DLLExec Functions.ChangeValueIniFile $IniFile/FormID.grbMode/ItemIndex/$CBMode @DLLExec Functions.ChangeValueIniFile $IniFile/FormID.chbVisible/Checked/$CBVisible @DLLExec Functions.ChangeValueIniFile $IniFile/FormID.chbRight/Checked/$CBRight ; ;@SendChars <CR> @ExecuteMenu InsertDistances
Тут-же в мене виникло питання. А що, тепер усі форми, по аналогії з вікном “Промiри та схема”, при ініціалізації отримують значення з файла Ged.ini :question:
Раніше ж, вроді - лише при старті Digitals?

Одна точно не працює ще так - це кнопка “Лінію в смугу”, галочка “Створити буферну зону”

; ширина смуги $CMWidth=1 ; створити буферну зону (1 - так, 0 - нi) $CMBuffer=0 ; ------------------------------------------- $CMLine=@Assign $CMWidth<TAB><$CMBuffer><CR> @SendChars $CMLine @ExecuteMenu spbStrip ;

Дик, получається, що надсилання “1” в CheckBox його включить, а “0” - його виключить :exclamation:. Точно, це ж його властивість на замовчування.

Але все це є в скриптовiй ф-цiї @Map.Selected.ToStrip, тобто можна все робити i без виклику вiкна

; ширина смуги $CMWidth=6 ; створити буферну зону (1 - так, 0 - нi) $CMBuffer=1 @Map.Selected.ToStrip $CMWidth $CMBuffer

Ще б якось була можливість відновлювати початкову позицію табуляції у вікні. Бо коли користувач перед тим натисне не ОК, а Відмінити - то при запуску скрипту потім не працює.
Наприклад, щоб запустити команту Вставка - Сітка із рамкою 5000х5000, включеною галочкою Додати підписи і знятою галочкою Малий масштаб виставив ось так:

$CMLine=@Assign <TAB><TAB><TAB><TAB><TAB><TAB>5000<TAB>5000<TAB><TAB><TAB><1><TAB><0><TAB><TAB><CR> @SendChars $CMLine Вставка | Сітка...
Але якщо перед тим в ручному режимі поставити курсор на будь-який інший блок, крім ОК, то не працює потім, бо починає рахувати знаки табуляції від активного блоку в попередньому сеансі запуску.

Доповнено: В принципі, оптимальним варіантом є
$CMLine=@Assign 50005000<1><0>
Тому, що після перезапуску програми дане вікно відновлює своє значення за замовчуванням, а саме: активним стає поле, де вводиться розмір рамки.

В нову версію програми додали скриптову функцію для вставки сітки, аналогічну меню Вставка-Сітка
@Map.InsertGrid Layer X0 Y0 DX DY ObjIndex CreateCaption SmallScale Solid
Аргументи функції:
Layer - шар для об’єктів сітки
X0 Y0 - початкові координати
DX DY - кроки сітки по двом координатам
ObjIndex - номер об’єкта, в який вставляється сітка, якщо 0, то в рамку карти.
CreateCaption - додавати підписи, 0 - ні, інше значення - так
SmallScale - малий масштаб, 0 - ні, інше значення - так
Solid - 0 - хрести, інше значення - суцільна сітка

виклик
@Map.InsertGrid 1 5000000 1000000 5000 5000 0 1 0 1
аналогічний такому
[attachment=0]InsertGrid.png[/attachment]

Доброго дня розробникам. Дякую за вдосконалення. Користуючись нагодою - питання: чи можна додати по аналогії InsertSheetLayout :question: Бо наче пропустили, якось ненароком.

Додано скриптову функцію
@Map.InsertSheetLayout Layer X0 Y0 DX DY Overlap ObjIndex
Layer - шар розбивки аркушів
X0 Y0 - початкові координати
DX DY - розміри аркуша в мм
Overlap - розмір в мм перетину аркушів
ObjIndex - номер об’єкта, в який вставляється розбивка, 0 - рамка карти

До ged.lng додати строки:

Insert grid into object or map frame Додає сітку у об'єкт чи рамку карти Insert sheet layout intoobject or map frame Додає розбивку на аркуші у об'єкт чи рамку карти

Саме так

Як викликати скриптом вікно властивості лінії, таке як через Ctrl+D? Або підкажіть як маркованому відрізку змінити довжину.

@ExecuteMenu CollectInputDistance
$Obj=@Map.SelectedObject
@If $Obj=0 Then @Break
$PointsCount=@Map.Object[$Obj].Count
$I=1
@While $I<=$PointsCount %PointsLoop
$MState=@Map.Object[$Obj].GetPointMarked $I
@If $MState=0 Then @Goto %SkipPoint
$D=@Map.Object[$Obj].LineLength[$I]
$D=@Dialog.Ask Вкажiть потрiбну довжину лiнiї Default=$D Size=200
$A=@Map.Object[$Obj].LineAngle[$I]
;
$X=@Map.Object[$Obj].Point[$I].x
$Y=@Map.Object[$Obj].Point[$I].y
$Z=@Map.Object[$Obj].Point[$I].z
;
$X=@Calc Replace("$X",",",".")
$Y=@Calc Replace("$Y",",",".")
$A=@Calc Replace("$A",",",".")
$D=@Calc Replace("$D",",",".")
;
$Rad=$A*3.1415926535897932384626433832795028841971/180
$ACos=@Calc Cos($Rad)
$DX=$X+$ACos*$D
$ASin=@Calc Sin($Rad)
$DY=$Y+$ASin*$D
;
$Sep=@DecimalSeparator
$DX=@Calc Replace("$DX",".","$Sep")
$DX=@DequoteText $DX
$DY=@Calc Replace("$DY",".","$Sep")
$DY=@DequoteText $DY
$Z=@Calc Replace("$Z",".","$Sep")
$Z=@DequoteText $Z
;
$P=@Assign $DX $DY $Z
$I=$I+1
@Map.Object[$Obj].Point[$I]=$P
@Map.RefreshObject $Obj
;
$N=$I+1
@If $N>$PointsCount Then @Goto %SkipPoint
$MState=@Map.Object[$Obj].GetPointMarked $N
@If $MState=1 Then $I=$I-1
;
%SkipPoint
$I=$I+1
%PointsLoop

Не очікував що для цього такий путь треба прокласти. Велика вам подяка за скрипт.

:slight_smile: нема за що, трохи пiдкорегував скрипт на рахунок довжини, яку потрiбно змiнити (щоб по замовчуванню ставило iснуючу) i забрав зайве дiалогове вiкно (тестував i забув забрати).

Дуже дякую.

Вчора за допомогою скрипту з попереднього посту порадів що нарешті витягнувши ділянку в ин4 не будуть напружувати ці довгі вуси суміжників :smiley: .
Скрипт вчора працював сьогодні вже не працює. Прошу допомоги.
Скрипт з попереднього посту знаходиться в %Script.Test.Button4 замість строки 8-9 $D=5.
$L=@Map.Layers.FindByID ID70010
$File=@Map.Filename
$ID=@ExtractFileExt $File
@if (“$ID”=“.dmf”) and (“$L”>“1”) then $ID=70010
@if $ID=.xml then $ID=70010
@if $ID=.in4 then $ID=50000
$Nej=0
$A1=@Map.Count
$CC=0
%Loop
$Nej=$Nej+1
$LID=@Map.Object[$Nej].LayerID
@if $LID<>$ID then @Goto %Continue
$CC=$CC+1
@Map.SelectObject $Nej
$B=@Map.SelectedObject
$F=@Map.Object[$B].Count
$F1=$F-1
@Map.Selected.MarkPoints $F1
@Map.Selected.MarkPoints $F
%Script.Test.Button4
@Map.Object[$B].SetPointMarked $F1 0
@Map.Object[$B].SetPointMarked $F 0
@Map.Object[$B].Reverse
@Map.Selected.MarkPoints $F1
@Map.Selected.MarkPoints $F
%Script.Test.Button4
@Map.Object[$B].SetPointMarked $F1 0
@Map.Object[$B].SetPointMarked $F 0
@Map.DeselectObject $Nej
%Continue
@if $Nej<$A1 then @Goto %Loop
Мета цього скрипту змінити довжину вусиків суміжників