/// <inheritdoc /> public void CreateAnalog(SmartEntity sourceEntity, bool copyLayer) { #if !DEBUG ModPlusAPI.Statistic.SendCommandStarting( GroundLine.GetDescriptor().Name, ModPlusConnector.Instance.AvailProductExternalVersion); #endif try { Overrule.Overruling = false; /* Регистрация ЕСКД приложения должна запускаться при запуске * функции, т.к. регистрация происходит в текущем документе * При инициализации плагина регистрации нет! */ ExtendedDataUtils.AddRegAppTableRecord(GroundLine.GetDescriptor()); var groundLine = new GroundLine(); var blockReference = MainFunction.CreateBlock(groundLine); groundLine.SetPropertiesFromSmartEntity(sourceEntity, copyLayer); LinearEntityUtils.InsertWithJig(groundLine, blockReference); } catch (System.Exception exception) { ExceptionBox.Show(exception); } finally { Overrule.Overruling = true; } }
private static void CreateBreakLine(BreakLineType breakLineType) { // send statistic Statistic.SendCommandStarting(BreakLineDescriptor.Instance.Name, ModPlusConnector.Instance.AvailProductExternalVersion); try { Overrule.Overruling = false; /* Регистрация ЕСКД приложения должна запускаться при запуске * функции, т.к. регистрация происходит в текущем документе * При инициализации плагина регистрации нет! */ ExtendedDataUtils.AddRegAppTableRecord(BreakLineDescriptor.Instance.Name); var style = StyleManager.GetCurrentStyle(typeof(BreakLine)); var breakLine = new BreakLine(); var blockReference = MainFunction.CreateBlock(breakLine); breakLine.ApplyStyle(style, true); breakLine.BreakLineType = breakLineType; InsertBreakLineWithJig(breakLine, blockReference); } catch (System.Exception exception) { ExceptionBox.Show(exception); } finally { Overrule.Overruling = true; } }
private static void CreateSection(bool isSimple) { #if !DEBUG Statistic.SendCommandStarting(Section.GetDescriptor().Name, ModPlusConnector.Instance.AvailProductExternalVersion); #endif try { Overrule.Overruling = false; /* Регистрация ЕСКД приложения должна запускаться при запуске * функции, т.к. регистрация происходит в текущем документе * При инициализации плагина регистрации нет! */ ExtendedDataUtils.AddRegAppTableRecord(Section.GetDescriptor()); var style = StyleManager.GetCurrentStyle(typeof(Section)); var sectionLastLetterValue = string.Empty; var sectionLastIntegerValue = string.Empty; FindLastSectionValues(ref sectionLastLetterValue, ref sectionLastIntegerValue); var section = new Section(sectionLastIntegerValue, sectionLastLetterValue); var blockReference = MainFunction.CreateBlock(section); section.ApplyStyle(style, true); InsertSectionWithJig(isSimple, section, blockReference); } catch (System.Exception exception) { ExceptionBox.Show(exception); } finally { Overrule.Overruling = true; } }
/// <inheritdoc/> public void CreateAnalog(SmartEntity sourceEntity, bool copyLayer) { #if !DEBUG Statistic.SendCommandStarting(NodalLeader.GetDescriptor().Name, ModPlusConnector.Instance.AvailProductExternalVersion); #endif try { Overrule.Overruling = false; /* Регистрация ЕСКД приложения должна запускаться при запуске * функции, т.к. регистрация происходит в текущем документе * При инициализации плагина регистрации нет! */ ExtendedDataUtils.AddRegAppTableRecord(NodalLeader.GetDescriptor()); var lastNodeNumber = FindLastNodeNumber(); var nodalLeader = new NodalLeader(lastNodeNumber); var blockReference = MainFunction.CreateBlock(nodalLeader); nodalLeader.SetPropertiesFromSmartEntity(sourceEntity, copyLayer); InsertNodalLeaderWithJig(nodalLeader, blockReference); } catch (Exception exception) { ExceptionBox.Show(exception); } finally { Overrule.Overruling = true; } }
/// <inheritdoc/> public void CreateAnalog(IntellectualEntity sourceEntity, bool copyLayer) { #if !DEBUG Statistic.SendCommandStarting(LevelMarkDescriptor.Instance.Name, ModPlusConnector.Instance.AvailProductExternalVersion); #endif try { Overrule.Overruling = false; /* Регистрация ЕСКД приложения должна запускаться при запуске * функции, т.к. регистрация происходит в текущем документе * При инициализации плагина регистрации нет! */ ExtendedDataUtils.AddRegAppTableRecord(LevelMarkDescriptor.Instance.Name); var levelMark = new LevelMark(); var blockReference = MainFunction.CreateBlock(levelMark); levelMark.SetPropertiesFromIntellectualEntity(sourceEntity, copyLayer); InsertLevelMarkWithJig(levelMark, blockReference); } catch (System.Exception exception) { ExceptionBox.Show(exception); } finally { Overrule.Overruling = true; } }
private static void CreateLevelMark() { #if !DEBUG Statistic.SendCommandStarting( LevelMark.GetDescriptor().Name, ModPlusConnector.Instance.AvailProductExternalVersion); #endif try { Overrule.Overruling = false; /* Регистрация ЕСКД приложения должна запускаться при запуске * функции, т.к. регистрация происходит в текущем документе * При инициализации плагина регистрации нет! */ ExtendedDataUtils.AddRegAppTableRecord(LevelMark.GetDescriptor()); var style = StyleManager.GetCurrentStyle(typeof(LevelMark)); var levelMark = new LevelMark(); var blockReference = MainFunction.CreateBlock(levelMark); levelMark.ApplyStyle(style, true); InsertLevelMarkWithJig(levelMark, blockReference); } catch (Exception exception) { ExceptionBox.Show(exception); } finally { Overrule.Overruling = true; } }
/// <inheritdoc /> public void CreateAnalog(SmartEntity sourceEntity, bool copyLayer) { #if !DEBUG Statistic.SendCommandStarting(Section.GetDescriptor().Name, ModPlusConnector.Instance.AvailProductExternalVersion); #endif try { Overrule.Overruling = false; /* Регистрация ЕСКД приложения должна запускаться при запуске * функции, т.к. регистрация происходит в текущем документе * При инициализации плагина регистрации нет! */ ExtendedDataUtils.AddRegAppTableRecord(Section.GetDescriptor()); var sectionLastLetterValue = string.Empty; var sectionLastIntegerValue = string.Empty; FindLastSectionValues(ref sectionLastLetterValue, ref sectionLastIntegerValue); var section = new Section(sectionLastIntegerValue, sectionLastLetterValue); var blockReference = MainFunction.CreateBlock(section); section.SetPropertiesFromSmartEntity(sourceEntity, copyLayer); InsertSectionWithJig(true, section, blockReference); } catch (System.Exception exception) { ExceptionBox.Show(exception); } finally { Overrule.Overruling = true; } }
private void CreateGroundLine() { try { Overrule.Overruling = false; /* Регистрация ЕСКД приложения должна запускаться при запуске * функции, т.к. регистрация происходит в текущем документе * При инициализации плагина регистрации нет! */ ExtendedDataUtils.AddRegAppTableRecord(GroundLine.GetDescriptor()); var style = StyleManager.GetCurrentStyle(typeof(GroundLine)); var groundLine = new GroundLine(); var blockReference = MainFunction.CreateBlock(groundLine); groundLine.ApplyStyle(style, true); LinearEntityUtils.InsertWithJig(groundLine, blockReference); } catch (System.Exception exception) { ExceptionBox.Show(exception); } finally { Overrule.Overruling = true; } }
public static void ApplyDataToGameObject(GameObject obj, CompoundDataPiece piece) { foreach (var participant in obj.GetComponents <Participant>()) { if (HasValidDataForParticipant(participant, piece)) { participant.ReadData(ExtendedDataUtils.GetPieceForParticipantFromRoot(participant, piece)); } } }
/// <summary> /// Register a <see cref="Component"/> that will take part in the extended data system /// </summary> /// <typeparam name="T">Type of the participant to register</typeparam> public static void RegisterDataParticipant <T>() where T : Component, ExtendedData.Participant { GetSaveInfo().onExtendedActorDataLoaded += (model, obj, tag) => { if (tag.HasPiece(ExtendedDataUtils.GetParticipantName(typeof(T)))) { obj.AddComponent <T>(); } }; }
/// <summary> /// Обработка двойного клика по блоку /// </summary> private static void AcApp_BeginDoubleClick(object sender, BeginDoubleClickEventArgs e) { var psr = AcadUtils.Editor.SelectImplied(); if (psr.Status != PromptStatus.OK) { return; } var ids = psr.Value.GetObjectIds(); if (ids.Length != 1) { return; } using (AcadUtils.Document.LockDocument()) { using (var tr = AcadUtils.Document.TransactionManager.StartTransaction()) { var obj = tr.GetObject(ids[0], OpenMode.ForWrite, true, true); if (obj is BlockReference blockReference) { var applicableAppName = ExtendedDataUtils.ApplicableAppName(blockReference); if (string.IsNullOrEmpty(applicableAppName)) { BeditCommandWatcher.UseBedit = true; } else if (applicableAppName == AxisDescriptor.Instance.Name) { EntityUtils.DoubleClickEdit(blockReference, entity => new AxisValueEditor(entity)); } else if (applicableAppName == SectionDescriptor.Instance.Name) { EntityUtils.DoubleClickEdit(blockReference, entity => new SectionValueEditor(entity)); } else if (applicableAppName == LevelMarkDescriptor.Instance.Name) { EntityUtils.DoubleClickEdit(blockReference, entity => new LevelMarkValueEditor(entity)); } else { BeditCommandWatcher.UseBedit = true; } } else { BeditCommandWatcher.UseBedit = true; } tr.Commit(); } } }
public static CompoundDataPiece ReadDataFromGameObject(GameObject obj) { var newCompound = new CompoundDataPiece("root"); foreach (var participant in obj.GetComponents <Participant>()) { participant.WriteData(ExtendedDataUtils.GetPieceForParticipantFromRoot(participant, newCompound)); } return(newCompound); }
public void CreateWaterProofingFromPolylineCommand() { #if !DEBUG ModPlusAPI.Statistic.SendCommandStarting( "mpWaterProofingFromPolyline", ModPlusConnector.Instance.AvailProductExternalVersion); #endif /* Регистрация ЕСКД приложения должна запускаться при запуске * функции, т.к. регистрация происходит в текущем документе * При инициализации плагина регистрации нет! */ ExtendedDataUtils.AddRegAppTableRecord(WaterProofing.GetDescriptor()); LinearEntityUtils.CreateFromPolyline <WaterProofing>(); }
/// <inheritdoc /> public void CreateAnalog(SmartEntity sourceEntity, bool copyLayer) { #if !DEBUG ModPlusAPI.Statistic.SendCommandStarting( Axis.GetDescriptor().Name, ModPlusConnector.Instance.AvailProductExternalVersion); #endif try { Overrule.Overruling = false; /* Регистрация ЕСКД приложения должна запускаться при запуске * функции, т.к. регистрация происходит в текущем документе * При инициализации плагина регистрации нет! */ ExtendedDataUtils.AddRegAppTableRecord(Axis.GetDescriptor()); var axisLastHorizontalValue = string.Empty; var axisLastVerticalValue = string.Empty; FindLastAxisValues(ref axisLastHorizontalValue, ref axisLastVerticalValue); var axis = new Axis(axisLastHorizontalValue, axisLastVerticalValue); var blockReference = MainFunction.CreateBlock(axis); axis.SetPropertiesFromSmartEntity(sourceEntity, copyLayer); // Отключаю видимость кружков направления axis.TopOrientMarkerVisible = false; axis.BottomOrientMarkerVisible = false; InsertAxisWithJig(axis, blockReference); } catch (Exception exception) { ExceptionBox.Show(exception); } finally { Overrule.Overruling = true; } }
private static void Document_ImpliedSelectionChanged(object sender, EventArgs e) { var psr = AcadUtils.Editor.SelectImplied(); var detach = true; if (psr.Value != null && psr.Value.Count == 1) { using (AcadUtils.Document.LockDocument()) { using (var tr = new OpenCloseTransaction()) { foreach (SelectedObject selectedObject in psr.Value) { if (selectedObject.ObjectId == ObjectId.Null) { continue; } var obj = tr.GetObject(selectedObject.ObjectId, OpenMode.ForRead); if (obj is BlockReference blockReference && ExtendedDataUtils.IsApplicable(blockReference)) { AttachCreateAnalogContextMenu(); detach = false; } } tr.Commit(); } } } if (detach) { DetachCreateAnalogContextMenu(); } }
private static void CreateAxis() { #if !DEBUG ModPlusAPI.Statistic.SendCommandStarting( Axis.GetDescriptor().Name, ModPlusConnector.Instance.AvailProductExternalVersion); #endif try { Overrule.Overruling = false; /* Регистрация ЕСКД приложения должна запускаться при запуске * функции, т.к. регистрация происходит в текущем документе * При инициализации плагина регистрации нет! */ ExtendedDataUtils.AddRegAppTableRecord(Axis.GetDescriptor()); var style = StyleManager.GetCurrentStyle(typeof(Axis)); var axisLastHorizontalValue = string.Empty; var axisLastVerticalValue = string.Empty; FindLastAxisValues(ref axisLastHorizontalValue, ref axisLastVerticalValue); var axis = new Axis(axisLastHorizontalValue, axisLastVerticalValue); var blockReference = MainFunction.CreateBlock(axis); axis.ApplyStyle(style, true); InsertAxisWithJig(axis, blockReference); } catch (Exception exception) { ExceptionBox.Show(exception); } finally { Overrule.Overruling = true; } }
internal static void Pull(ModdedSaveData data) { extendedActorData.Clear(); foreach (var mod in data.segments) { Debug.Log($"mod {mod.modid} has {mod.extendedData.Count} extended actor datas"); foreach (var extendedDataTree in mod.extendedData) { switch (extendedDataTree.idType) { case ExtendedDataTree.IdentifierType.ACTOR: var list = ExtendedDataUtils.GetPieceForMod(mod.modid, GetDataForActor(extendedDataTree.identifier)).DataList; foreach (var h in extendedDataTree.dataPiece.DataList) { list.Add(h); } break; default: throw new NotImplementedException(); } } } }
internal static void OnRegisterActor(GameModel model, long actorId, GameObject gameObject, bool skipNotify) { if (Identifiable.GetId(gameObject) == Identifiable.Id.NONE) { return; } if (IsRegistered(actorId)) { foreach (var saveInfoPair in SaveRegistry.modToSaveInfo) { if (extendedActorData[actorId].HasPiece(saveInfoPair.Key.ModInfo.Id)) { saveInfoPair.Value.OnExtendedActorDataLoaded(model.actors[actorId], gameObject, ExtendedDataUtils.GetPieceForMod(saveInfoPair.Key.ModInfo.Id, extendedActorData[actorId])); } } foreach (var participant in gameObject.GetComponentsInChildren <ExtendedData.Participant>()) { if (!ValidateParticipant(participant, (extendedActorData[actorId]))) { InitParticipant(participant, (extendedActorData[actorId])); } } foreach (var participant in gameObject.GetComponentsInChildren <ExtendedData.Participant>()) { try { SetParticipant(participant, (extendedActorData[actorId])); } catch (InvalidOperationException) { Debug.Log($"Yipes! seems like {participant.GetType()} isn't initialized!"); // a bit gross hack but it'll help when mods add new participants to things that already have actor data stored InitParticipant(participant, (extendedActorData[actorId])); SetParticipant(participant, (extendedActorData[actorId])); } } } else { var participants = gameObject.GetComponents <ExtendedData.Participant>(); if (participants != null && participants.Length > 0) { RegisterExtendedActorData(actorId, gameObject, skipNotify); } } }
/// <inheritdoc/> public override bool IsApplicable(RXObject overruledSubject) { return(ExtendedDataUtils.IsApplicable(overruledSubject, GroundLineDescriptor.Instance.Name, true)); }
private void CreateGroundLineFromPolyline() { #if !DEBUG Statistic.SendCommandStarting("mpGroundLineFromPolyline", ModPlusConnector.Instance.AvailProductExternalVersion); #endif try { var peo = new PromptEntityOptions($"\n{Language.GetItem(Invariables.LangItem, "msg6")}") { AllowNone = false, AllowObjectOnLockedLayer = true }; peo.SetRejectMessage($"\n{Language.GetItem(Invariables.LangItem, "wrong")}"); peo.AddAllowedClass(typeof(Polyline), true); var per = AcadUtils.Editor.GetEntity(peo); if (per.Status != PromptStatus.OK) { return; } /* Регистрация ЕСКД приложения должна запускаться при запуске * функции, т.к. регистрация происходит в текущем документе * При инициализации плагина регистрации нет! */ ExtendedDataUtils.AddRegAppTableRecord(GroundLineDescriptor.Instance.Name); // style var style = StyleManager.GetCurrentStyle(typeof(GroundLine)); var groundLine = new GroundLine(); MainFunction.CreateBlock(groundLine); groundLine.ApplyStyle(style, true); var plineId = per.ObjectId; using (AcadUtils.Document.LockDocument(DocumentLockMode.ProtectedAutoWrite, null, null, true)) { using (var tr = AcadUtils.Document.TransactionManager.StartOpenCloseTransaction()) { var dbObj = tr.GetObject(plineId, OpenMode.ForRead); if (dbObj is Polyline pline) { for (int i = 0; i < pline.NumberOfVertices; i++) { if (i == 0) { groundLine.InsertionPoint = pline.GetPoint3dAt(i); } else if (i == pline.NumberOfVertices - 1) { groundLine.EndPoint = pline.GetPoint3dAt(i); } else { groundLine.MiddlePoints.Add(pline.GetPoint3dAt(i)); } } groundLine.UpdateEntities(); groundLine.BlockRecord.UpdateAnonymousBlocks(); var ent = (BlockReference)tr.GetObject(groundLine.BlockId, OpenMode.ForWrite, true, true); ent.Position = pline.GetPoint3dAt(0); ent.XData = groundLine.GetDataForXData(); } tr.Commit(); } AcadUtils.Document.TransactionManager.QueueForGraphicsFlush(); AcadUtils.Document.TransactionManager.FlushGraphics(); // "Удалить исходную полилинию?" if (MessageBox.ShowYesNo(Language.GetItem(Invariables.LangItem, "msg7"), MessageBoxIcon.Question)) { using (var tr = AcadUtils.Document.TransactionManager.StartTransaction()) { var dbObj = tr.GetObject(plineId, OpenMode.ForWrite, true, true); dbObj.Erase(true); tr.Commit(); } } } } catch (System.Exception exception) { ExceptionBox.Show(exception); } }
/// <inheritdoc /> public override bool IsApplicable(RXObject overruledSubject) { return(ExtendedDataUtils.IsApplicable(overruledSubject, WaterProofing.GetDescriptor().Name)); }
static bool HasValidDataForParticipant(Participant p, CompoundDataPiece piece) { var modid = ExtendedDataUtils.GetModForParticipant(p)?.ModInfo.Id ?? "srml"; return(piece.HasPiece(modid) && piece.GetCompoundPiece(modid).HasPiece(ExtendedDataUtils.GetParticipantName(p))); }
internal static CompoundDataPiece GetDataForCurrentMod(CompoundDataPiece piece) { var strin = SRMod.GetCurrentMod().ModInfo.Id; return(ExtendedDataUtils.GetPieceForMod(strin, piece)); }
static bool ValidateParticipant(ExtendedData.Participant p, CompoundDataPiece piece) { var modid = ExtendedDataUtils.GetModForParticipant(p)?.ModInfo.Id ?? "srml"; return(p.IsDataValid(ExtendedDataUtils.GetPieceForParticipantFromRoot(modid, p, piece))); }
/// <inheritdoc /> public override bool IsApplicable(RXObject overruledSubject) { return(ExtendedDataUtils.IsApplicable(overruledSubject, SectionDescriptor.Instance.Name)); }
/// <summary> /// Добавление пользовательских элементов в палитру в зависимости от выбранных объектов /// </summary> private void ShowPropertiesControlsBySelection() { BtCollapseAll.Visibility = Visibility.Hidden; // Удаляем контролы свойств if (StackPanelProperties.Children.Count > 0) { StackPanelProperties.Children.Clear(); } var psr = AcadUtils.Editor.SelectImplied(); if (psr.Value == null || psr.Value.Count == 0) { // Очищаем панель описания ShowDescription(string.Empty); // hide message StckMaxObjectsSelectedMessage.Visibility = Visibility.Collapsed; } else { var maxSelectedObjects = MainSettings.Instance.MaxSelectedObjects; if (maxSelectedObjects == 0 || maxSelectedObjects >= psr.Value.Count) { StckMaxObjectsSelectedMessage.Visibility = Visibility.Collapsed; var objectIds = new List <ObjectId>(); using (AcadUtils.Document.LockDocument()) { using (var tr = new OpenCloseTransaction()) { foreach (SelectedObject selectedObject in psr.Value) { if (selectedObject.ObjectId == ObjectId.Null) { continue; } var obj = tr.GetObject(selectedObject.ObjectId, OpenMode.ForRead); if (obj is BlockReference blockReference && ExtendedDataUtils.IsApplicable(blockReference)) { objectIds.Add(selectedObject.ObjectId); } } tr.Commit(); } } if (objectIds.Any()) { BtCollapseAll.Visibility = Visibility.Visible; var summaryPropertyCollection = new SummaryPropertyCollection(objectIds); summaryPropertyCollection.OnLockedLayerEventHandler += (sender, args) => ShowPropertiesControlsBySelection(); SetData(summaryPropertyCollection); } } else { StckMaxObjectsSelectedMessage.Visibility = Visibility.Visible; } } }
/// <summary> /// Проверка валидности примитива. Проверка происходит по наличию XData с определенным AppName /// </summary> /// <param name="overruledSubject">Instance of <see cref="RXObject"/></param> public override bool IsApplicable(RXObject overruledSubject) { return(ExtendedDataUtils.IsApplicable(overruledSubject, SecantNodalLeader.GetDescriptor().Name)); }
static void InitParticipant(ExtendedData.Participant p, CompoundDataPiece piece) { var modid = ExtendedDataUtils.GetModForParticipant(p)?.ModInfo.Id ?? "srml"; p.InitData(ExtendedDataUtils.GetPieceForParticipantFromRoot(modid, p, piece)); }
/// <inheritdoc /> public override bool IsApplicable(RXObject overruledSubject) { return(ExtendedDataUtils.IsApplicable(overruledSubject, Axis.GetDescriptor().Name, true)); }
internal static void OnRegisterActor(GameModel model, long actorId, GameObject gameObject, bool skipNotify) { if (Identifiable.GetId(gameObject) == Identifiable.Id.NONE) { return; } var actorIdentifier = DataIdentifier.GetActorIdentifier(actorId); if (preparedData.TryGetValue(actorIdentifier, out var pdata)) { var data = pdata.Data; foreach (var saveInfoPair in SaveRegistry.modToSaveInfo) { if (data.HasPiece(saveInfoPair.Key.ModInfo.Id)) { saveInfoPair.Value.OnExtendedActorDataLoaded(model.actors[actorId], gameObject, ExtendedDataUtils.GetPieceForMod(saveInfoPair.Key.ModInfo.Id, data)); } } ApplyDataToGameObject(gameObject, data); preparedData.Remove(actorIdentifier); } }