问题标签 [ocean]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ocean - 如何从 Petrel 启动 IvTune 窗口?
我想从 Petrel 启动 IvTune 工具来调试我的 OpenInventor 代码。有没有办法做到这一点?标准快捷键 Shift+F12 不起作用。
ocean - 如何在单元测试中以编程方式将窗口设置为 ActiveWindow?
我正在为需要活动 Window3D 的插件编写测试。
我添加它并尝试将其设置为活动
但PetrelProject.ToggleWindows.Active
仍然为空。在新窗口实际处于活动状态之前是否需要进行一些后台处理?如何测试需要活动窗口的代码?
我正在使用海燕 2012.1。
ocean - PropertyVersionBase 会被删除,还是被更具体的基类取代?
PropertyVersionBase 已被标记为过时了很长一段时间。目前,它是维护对 Template 或 DictionaryTemplate 或 WellLogVersion 或 DictionaryWellLogVersion 等的引用的唯一方法。
与 PropertyVersion[Base] 的混淆在于它也是 *WellLogVersion 之类的基类,它与 Template 类根本不同——Ocean 早期的一个有争议的设计决策(恕我直言)。
我希望得到一些澄清:
这个基类最终会被删除吗?
Template 和 DictionaryTemplate 会有基类吗?
WellLogVersion 和 DictionaryWellLogVersion 会有基类吗?
一般来说,这些类层次结构在未来会走向何方?
(我想标记第二个问题:任何基类也可以公开 Droid,好吗?)
ocean - 设置 SeismicLine3D 刻面法线方向问题
我有一些代码可以向前或向后移动随机定向的 3D 地震线,类似于一般的交叉点播放器。它在 Petrel 2011 中运行良好,但是一旦我更新到 2012 年它似乎就坏了。问题是当我尝试设置一个新方面时,线的正常方向似乎改变了几个小数。下面是一些示例代码...
有谁知道海燕 2011 年和 2012 年之间可能发生了什么变化导致这种情况?另外,有人知道可能的解决方法吗?
编辑:
在任何切换窗口中查看时,正常方向的变化非常明显。随着线条的移动,您将在可视化中看到轻微的“故障”。
ocean - SeismicCube.IndexAtPosition 意外输出
我不确定这里出了什么问题。它适用于某些项目,但不适用于其他项目。我无法弄清楚它们之间有什么区别。为了测试这个问题,我创建了一个点集,其中一个点位于我确定在立方体内部的位置。当我打电话时IndexAtPosition
,我有时会得到明显错误的答案。例如,我有时会得到负数或超出最大索引的内联或交叉线索引。z 维索引也给出了一个非常不切实际的答案。
我相当肯定我的数据都是一致的,即相同的域和 CRS。一定有一些我没有检查的设置。
ocean - 运行单元测试后未处理的 Petrel 异常
我有使用 nunit 成功运行的 Petrel 2012 单元测试。我添加了一些新的单元测试。这些测试使用我注册的一些自定义域对象。我还在使用不同的 Petrel 项目进行测试。
运行 Nunit 时,它会运行我的测试并且它们是成功的,但是,在 nunit 报告结果后,nunit 崩溃:
Petrel 2012.1 64 位(CL 345168,2012 年 7 月 27 日构建)中的未处理异常:可能的原因:可能的单例问题:托管代码在 CLR 关闭后尝试执行。异常类型:
0xC0020001:字符串绑定无效。异常详细信息:异常发生在模块 KERNEL32.dll 中的偏移量 0xDD50 异常处理程序:Petrel 未处理的异常过滤器(本机初始化)异常线程:未命名线程(id 3908)报告编号:0 报告 ID:
{8c53496a-ff6e-46e0-b536-a85868246cef本机堆栈跟踪:
KERNEL32.dll+0xDD50 PulseEvent+0x60 clr.dll+0x45A454
clr.dll+0x5B46D3 clr.dll+0x189C1A Core.Subjects.dll+0xF7138 BaseAllSubjectsItr::init+0x58 Core.Subjects.dll+0xF7351 BaseAllSubjectsItr: :BaseAllSubjectsItr+0x31
Core.Subjects.dll+0x4E919 NotificationManagerImpl::notifyBeforeRemove+0x59
Core.Subjects.dll+0xE034E FolderSubject::removeKidAt+
0x9E Core.Subjects.dll+0xDFED1 FolderSubject::removeAllKids+0x31
Core.Subjects.dll+0xCA307 ParentSubject::cleanup +0x17
Foundation.Primitives.BaseClasses.dll+0xB434 MemorySaver::MemorySaver+0x224
Foundation.Primitives.BaseClasses.dll+0x2777C Shared::unref+0x1C
Foundation.Primitives.BaseClasses.dll+0x18EE Shared::unref+0xE
Sim.Domain .Analysis.dll+0x1F5CCE FunctionPlotCmd::~FunctionPlotCmd+0x3E
Sim.Domain.Analysis.dll+0x783F7
Foundation.Primitives.BaseClasses.dll+0xB463 MemorySaver::MemorySaver+0x253
Foundation.Primitives.BaseClasses.dll+0x2777C Shared::unref+0x1C
Foundation.Primitives.BaseClasses.dll+0x18EE Shared::unref+0xE
Core.Subjects.dll+0xE169 UpdateHint::operator=+0x2C9
Core.Subjects.dll+ 0x12CDC4 Core.Subjects.dll+0x4979F Slb::Petrel::Configuration::ServiceBase::create+0x42F Core.Subjects.dll+0x499E9 Slb::Petrel::Configuration::ServiceBase::create+0x679 ntdll.dll+0x149BF RtlGetCurrentDirectory_U+0x1FF
KERNEL32.dll+0x1A35C ExitProcess+0x2C mscoreei.dll+0x18552
mscoreei.dll+0x183E4 clr.dll+0x238787 clr.dll+0x23980C
clr.dll+0x171966 clr.dll+0x16F5611385clr.dll+0x .dll+0x3309 CoreExeMain+0x49
mscoree.dll+0x5B21 CorExeMain+0x69 KERNEL32.dll+0x196AC BaseProcessStart+0x2C 托管堆栈跟踪:无法收集托管堆栈跟踪。继续调用 Windows 错误报告...
我还尝试使用在此错误之前使用的 Petrel 项目,但现在我得到了相同的异常。有任何想法吗?
persistence - 如何在 Ocean for Petrel 中存档我的 arg 包?
我在 Petrel 中有一个自定义的 Ocean 工作步骤,但我无法成功保存我的参数包。我的包包含 PillarGrid 对象(网格、属性、区域),如下所示:
我基于 StructuredArchiveDataSource 创建了一个 DataSourceFactory :
我在模块方法“集成”中注册了这个 DataSourceFactory。
当我尝试在 Petrel 中保存我的项目时,我收到以下错误消息:“System.Exception: MyArgsPackId: Not anarchivable type 'Slb.Ocean.Petrel.DomainObject.PillarGrid.Property'”
请问我该如何管理这种持久性?
ocean - 如何给 Petrel 项目加水印?
在我们大学,我们正在运行基于 Petrel 插件的水库工程课程。学生应该打开一个“数字油田”插件,使用他的凭据登录并开始用数据填充他的项目,从服务器请求 2D/3D 地震、测井等。如果在数据传输过程中发生某些事情(例如崩溃),他可以再次下载数据。
然而,为了防止作弊,这些数据必须仅供他使用(他为每条数据支付虚拟货币)。所以他的服务器数据副本带有他自己的密钥水印,并且插件应该只允许在项目密钥相同的情况下加载数据。为此,一旦他开始下载数据,就必须将密钥嵌入到他的 Petrel 项目副本中。
实现这一目标的最佳方法是什么?我深入研究了自定义数据类型的创建,可能这种方法不适合这个目的,因为水印不能被学生看到或修改。
ocean - 保存 Petrel 2012.1 时 DataManager.DataSourceManager.Saved 事件似乎没有触发
我有一个最初为 Petrel 2011 编写的插件。最近,我们需要将它与 Petrel 2012 一起使用。我已将调试器连接到 Petrel 并确认正在加载插件并且正在调用模块上的 Initialize()。这只是将事件处理程序添加到 DataManager.DataSourceManager.Saved 事件。
在 Petrel 2011 中,此事件在保存过程即将结束时触发。然而,到了 2012 年,这个事件似乎不再被触发。
我应该在 2012 年使用一个新事件来检测项目何时被保存?最好是与 2011 兼容的。
ocean - 开发期间部署找不到 dll 及其引用
我创建了一个基本插件,当我部署它进行开发时它运行良好:
正如海洋开发指南所指出的那样。
当我尝试做一些更复杂的事情时,它告诉我它找不到其中一个 dll 及其引用。dll 存在于我的项目正在构建的位置。我检查了 ProcMon,我可以看到 Ocean 没有检查该文件夹中的 dll。
我不得不强制从特定目录路径加载程序集(使用 C# - 从特定目录路径加载程序集)这样做我的插件正确加载。Petrel 遇到问题的 dll 是 InfragisticsWPF.DockManager.dll
我与正在研究 Petrel 的其他团队进行了交谈,有些人向我提到,自 2012 版本以来,他们必须强制对他们的一些 dll 进行 LoadAssembly,因为 Petrel 找不到它们。在 2011 版本中运行良好的东西。也许是 2012 年引入的一些变化导致了这种情况?我们是否缺少一些配置?
更新
根据要求,这是 Fusion Log Viewer 显示的内容:
对于它试图访问的InfragisticsWPF.DockManager.DLL
从以下位置加载的程序集管理器:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll 在可执行文件 C:\Program Files\Petrel 2012.3\petrel.exe 下运行
- C:/Program Files/Petrel 2012.3/ 和很多像“Extensions” 这样的子目录 看起来它遍历了 C:/Program Files/Petrel 2012.3/ 里面的所有文件夹
- 它也尝试在相同的文件夹中搜索InfragisticsWPF.DockManager.EXE 。
- 所有探测 URL 均已尝试但均失败。
它从不搜索我的插件所在的路径。尽管 Petrel 无法加载InfragisticsWPF.DockManager.DLL,但它不会无法加载我的任何其他 dll。对于我的其他 dll,日志看起来完全一样,但最后一次尝试检查我的插件所在的文件夹:
两个 dll 彼此相邻,但由于某种原因,Petrel 与 InfragisticsWPF.DockManager.DLL存在问题,而其他任何 dll 都没有。