我正在尝试编辑Lava中的脚本(Perl语言已经扩展用于挖掘软件Vulcan).
我遇到了模块的问题,因为我不习惯Perl,我无法完全解决它.
下面是一段代码
导致问题的模块是"宏".
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";
Run Code Online (Sandbox Code Playgroud)
如果我省略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调试工具.
最有用的部分就在这里
三角测量类
Triangulation对象为Envisage三角测量结构提供了一个接口.可以通过成员函数访问点和三角形数据.
每个三角形由3个顶点索引组成.这些是点阵列的索引,它保存每个点的3D位置.通过使用三组3D点作为顶点来形成三角形.
方法:$ triangulation = new Triangulation($ name)
$triangulation : Returned triangulation object.
$name : Optional triangulation name.
Run Code Online (Sandbox Code Playgroud)
构造函数返回一个新的三角测量对象.如果提供了名称,则加载给定名称的三角测量.
$ result = is_valid
$result : Whether a triangulation has been successfully loaded or set.
Run Code Online (Sandbox Code Playgroud)
$ points =积分
$points : The number of points in the triangulation
Run Code Online (Sandbox Code Playgroud)
$ triangles =三角形
$triangles : Number of triangles in the object
Run Code Online (Sandbox Code Playgroud)
似乎Triangulation是一个类和函数名称.Perl不知道你想使用哪一个,但你可以在函数调用后使用括号来帮助它,你也应该避免使用方法的"间接对象"语法,并可能引用类名或附加::到它们:
my $tr = 'Triangulation'->new($tri);
# or
my $tr = Triangulation::->new($tri);
Run Code Online (Sandbox Code Playgroud)
避免:
my $tr = new Triangulation($tri);
Triangulation "$basedir\\$tri";
Run Code Online (Sandbox Code Playgroud)