-
Notifications
You must be signed in to change notification settings - Fork 0
/
PickPoint.cs
79 lines (69 loc) · 4.11 KB
/
PickPoint.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
using Aveva.PDMS.PMLNet;
using Aveva.Pdms.Utilities.CommandLine;
using Aveva.Pdms.Geometry;
[assembly: PMLNetCallable()]
namespace Polymetal.Pdms.Design.DrawListManager
{
[PMLNetCallable()]
public class PickPoint
{
public delegate void PointSelectedEventHandler(Position pos); //Тип делегата нашего события
private static event PointSelectedEventHandler PointSelectedEvent; //Наше "приватное" событие
public static event PointSelectedEventHandler PointSelected //Публичное свойство-событие, через которые будут добавляться обработчики к "приватному" событию
{
add
{
if (PointSelectedEvent == null)
Start(); //Если ещё не было обработчиков, то запускаем метод Start()
else
{
PointSelectedEvent -= value;
Start();
}
PointSelectedEvent += value;
}
remove
{
PointSelectedEvent -= value;
}
}
/// Конструктор класса PickPoint
[PMLNetCallable()]
public PickPoint() {}
[PMLNetCallable()]
public void Assign(PickPoint that) {}
/// Метод, который будет вызван из PML-я при выборе объекта в PDMS selected point.
[PMLNetCallable()]
public void PmlPointSelected(string pos)
{
//Если у нас есть обработчики, то запускаем событие.
if (PointSelectedEvent != null)
PointSelectedEvent(Position.Create(pos));
}
public static void Start()
{
//Если все прошло успешно, то начинается работа с Event Driver Graphic (EDG).
RunCommand("!!edgCntrl.remove('MyEDGPacket')"); //Мы удалим из системы пакет, если он уже существует
RunCommand("!packet = object EDGPACKET()"); //Создаем новый пакет
RunCommand("!packet.definePosition('Pick Position1')"); //Создаем простой одноступенчатый Pick position с помощью definePosition и присваиваем title для него
RunCommand("!packet.description = 'MyEDGPacket'"); // Присваиваем описание данного пакета (читай - Id данного пакета)
// Для того , что бы создать экземпляр нашего PMLNetCallable класса, необходимо
// использовать неймспейс данного класса, а именно "Aveva.Pdms.Examples"
RunCommand("using namespace 'Polymetal.Pdms.Design.DrawListManager'");
//Создаем глобальный объект PickPointObject - экземпляр нашего класса
RunCommand("!!PickPointObject = object PickPoint()");
//в качестве Action-а для EDG-пакета , будет использоваьб метод PmlPointSelected(x,y,z) нашего класса
RunCommand("!packet.action = '!!PickPointObject.PmlPointSelected(!this.return[1].position.string())'");
//Если true - то система удаляет данный пакет, после успешного выполнения всех PICK'ов
RunCommand("!packet.remove = true");
//Добавляем пакет в систему
RunCommand("ID POINT @");
RunCommand("!!edgCntrl.add(!packet)");
}
//Метод для упращения работы с RunInPdms()
private static bool RunCommand(string command)
{
return Command.CreateCommand(command).RunInPdms();
}
}
}