我试图用Lava编辑脚本(Perl语言已经扩展用于挖掘软件Vulcan)。
我遇到了模块的问题,因为我不熟悉Perl,我还没有完全解决它。
代码片段在
之下导致问题的模块是" Macro"。
use Lava;
use warnings;
use strict;
use vulcan;
use utf8;
use Macro 'RunMenu';
use File::Basename;
my $tri = 'C:\\_PROJECTS\\1404134_abc\\VULCAN\\faults.tri\\retriangulated\\gbc_ne1e_1606.00t';
my $tr = new Triangulation($tri);
#Runs fine
RunMenu("TRI_UTE_LOAD:$tri","abort",
"FINISH") || die "Macro mismatch.\n";
#Does not run fine
RunMenu("TRI_EDIT_INTERP","abort",
sub { Triangulation("$basedir\\$tri"); },
sub { PanelResults("Select interpolation option",
"line" => "",
"Maximum triangle area " => "$maxTriArea",
"Maximum boundary length" => "100.0",
"button_pressed" => "ok",
"Interpolate midpoints" => "1",
"Interpolate centroids" => "0",
"Honour breaklines" => "1"
); },
"FINISH") || die "Macro mismatch.\n";
如果我省略use Macro;
此行my $tr = new Triangulation($tri);
运行正常,但我无法使用RunMenu
命令。
如果我加use Macro;
,我会Bareword found where operator expected at C:\_PROJECTS\1404134_abc\VULCAN\new.lava line 12, near "new Triangulation"
(Do you need to predeclare new?)
我最接近的是use Macro 'RunMenu';
,但后来我Undefined subroutine &main::Triangulation called at C:\_PROJECTS\1404134_abc\VULCAN\test4.lava line 45.
我认为发生的事情是Macro
包含一个函数triangulation
,它会在其他模块中覆盖一个函数(不知道它在哪个模块或如何查找,我尝试过注释掉我加载的其他内容并且没有所有内容都运行正常。)
当我不知道来自哪里时,有关如何使用两种不同的三角测量功能的任何建议?或者,如果任何人都可以建议任何其他修复,将非常感谢。
代码正在通过Vulcan运行,因此我不确定我可以使用哪些Perl调试工具。
如果您感兴趣,我已经复制了下面的帮助文件 Help file
最有用的部分是
三角测量类
Triangulation对象为Envisage三角测量结构提供了一个接口。可以通过成员函数访问点和三角形数据。
每个三角形由3个顶点索引组成。这些是点阵列的索引,它保存每个点的3D位置。通过使用三组3D点作为顶点来形成三角形。
方法: $ triangulation = new Triangulation($ name)
$triangulation : Returned triangulation object.
$name : Optional triangulation name.
构造函数返回一个新的三角测量对象。如果提供了名称,则加载给定名称的三角测量。
$ result = is_valid
$result : Whether a triangulation has been successfully loaded or set.
$ points = points
$points : The number of points in the triangulation
$ triangles = triangles
$triangles : Number of triangles in the object
答案 0 :(得分:7)
似乎Triangulation是一个类和函数名称。 Perl不知道你想使用哪一个,但你可以在函数调用后使用括号来帮助它,你也应该避免使用方法的“间接对象”语法,并可能引用类名或附加::
来它们:
my $tr = 'Triangulation'->new($tri);
# or
my $tr = Triangulation::->new($tri);
忌:
my $tr = new Triangulation($tri);
Triangulation "$basedir\\$tri";