Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion include/plateau/dataset/i_dataset_accessor.h
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ namespace plateau::dataset {
/**
* \brief 都市モデルデータが存在する地域メッシュのリストを取得します。
*/
virtual std::set<std::shared_ptr<GridCode>, GridCodeComparator>& getGridCodes() = 0;
virtual const std::set<std::shared_ptr<GridCode>, GridCodeComparator>& getGridCodes() = 0;

virtual TVec3d calculateCenterPoint(const plateau::geometry::GeoReference& geo_reference) = 0;

Expand Down
2 changes: 1 addition & 1 deletion src/dataset/local_dataset_accessor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,7 @@ namespace plateau::dataset {
return fs::relative(fs::u8path(path).make_preferred(), fs::u8path(udx_path_)).make_preferred().string();
}

std::set<std::shared_ptr<GridCode>, GridCodeComparator>& LocalDatasetAccessor::getGridCodes() {
const std::set<std::shared_ptr<GridCode>, GridCodeComparator>& LocalDatasetAccessor::getGridCodes() {
if (grid_codes_.empty()) {
for (const auto& [_, files]: files_) {
for (const auto& file: files) {
Expand Down
2 changes: 1 addition & 1 deletion src/dataset/local_dataset_accessor.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ namespace plateau::dataset {
/**
* \brief 都市モデルデータが存在するGridCodeのリストを取得します。
*/
std::set<std::shared_ptr<GridCode>, GridCodeComparator>& getGridCodes() override;
const std::set<std::shared_ptr<GridCode>, GridCodeComparator>& getGridCodes() override;

std::string getRelativePath(const std::string& path) const;
std::string getU8RelativePath(const std::string& path) const;
Expand Down
2 changes: 1 addition & 1 deletion src/dataset/server_dataset_accessor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ namespace plateau::dataset {
grid_codes_.clear();
}

std::set<std::shared_ptr<GridCode>, GridCodeComparator>& ServerDatasetAccessor::getGridCodes() {
const std::set<std::shared_ptr<GridCode>, GridCodeComparator>& ServerDatasetAccessor::getGridCodes() {
if (grid_codes_.empty()) {
for (const auto& [_, files] : dataset_files_) {
for (const auto& file : files) {
Expand Down
2 changes: 1 addition & 1 deletion src/dataset/server_dataset_accessor.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ namespace plateau::dataset {

void loadFromServer();

std::set<std::shared_ptr<GridCode>, GridCodeComparator>& getGridCodes() override;
const std::set<std::shared_ptr<GridCode>, GridCodeComparator>& getGridCodes() override;
std::shared_ptr<std::vector<GmlFile>> getGmlFiles(PredefinedCityModelPackage package) override;
void getGmlFiles(PredefinedCityModelPackage package_flags, std::vector<GmlFile>& out_gml_files) override;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ public NativeVectorGmlFile GetAllGmlFiles()
return GetGmlFiles((PredefinedCityModelPackage)allPackages);
}

/// <summary>
/// C++側のvectorとしてのGridCodeを返します。
/// 注意:受け取る側でusingを付けるなど、廃棄されるようにしてください。
/// </summary>
public NativeVectorGridCode GridCodes
{
get
Expand Down Expand Up @@ -79,7 +83,7 @@ public DatasetAccessor FilterByGridCodes(IEnumerable<GridCode> gridCodes)
var nativeGridCodes = NativeVectorGridCode.Create();
foreach (var gridCode in gridCodes)
{
nativeGridCodes.Add(gridCode);
nativeGridCodes.AddCopyOf(gridCode);
}

var result = NativeMethods.plateau_i_dataset_accessor_filter_by_grid_codes(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ public PredefinedCityModelPackage Package {
/// GMLファイルのGridCodeを返します。
/// ただし、誤った形式のGMLファイル名である等の理由でGridCodeを読み取れなかった場合は
/// 戻り値の isValid が false になります。
/// 戻り値が解放されるようにするためにusingを付けてください。
/// </summary>
public GridCode GridCode
{
Expand All @@ -89,6 +90,7 @@ public GridCode GridCode
ThrowIfDisposed();
var gridCodePtr = DLLUtil.GetNativeValue<IntPtr>(Handle,
NativeMethods.plateau_gml_file_get_grid_code);
// gridCodePtrの寿命管理はC++側に任せるのでここでは解放しませんが、copiedはC#から解放する必要があります。
var copied = GridCode.CopyFrom(gridCodePtr);
return copied;
}
Expand Down
46 changes: 0 additions & 46 deletions wrappers/csharp/LibPLATEAU.NET/CSharpPLATEAU/Dataset/MeshCode.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,51 +21,5 @@ public struct MeshCode
public readonly int Level;
[MarshalAs(UnmanagedType.U1)] private readonly bool isValid;

private static bool getHalfMeshNumber(out int num, int row, int col)
{
if (row < 0 || row > 1 ||
col < 0 || col > 1)
{
num = 0;
return false;
}

// 番号順に左下→右下→左上→右上
num = row * 2 + col + 1;
return true;
}

public override string ToString()
{
// ThrowIfInvalid();
string secondString = Level2();
if (this.Level == 2)
return secondString;

string thirdString = secondString + $"{this.ThirdRow | 0}{this.ThirdCol | 0}";
if (this.Level == 3)
return thirdString;

getHalfMeshNumber(out int fourthNum, this.FourthRow, this.FourthCol);
string fourthString = thirdString + $"{fourthNum}";
if (this.Level == 4)
return fourthString;

getHalfMeshNumber(out int fifthNum, this.FifthRow, this.FifthCol);
string fifthString = fourthString + $"{fifthNum}";
return fifthString;
}

public string Level2()
{
// ThrowIfInvalid();
return $"{this.FirstRow | 00}{this.FirstCol | 00}{this.SecondRow | 0}{this.SecondCol | 0}";
}

public string Level3()
{
// ThrowIfInvalid();
return $"{Level2()}{this.ThirdRow | 0}{this.ThirdCol | 0}";
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ namespace PLATEAU.Native
{
/// <summary>
/// GridCodeのC++ Vectorです。
/// 中身はVectorの廃棄時の削除するので、それまでは中身が削除されないよう注意してください。
/// 中身はVectorの廃棄時に削除されます。
/// ダングリングを防ぐため、vectorへの追加・参照時はコピーを渡します。
/// </summary>
public class NativeVectorGridCode : NativeVectorDisposableBase<GridCode>
{
Expand All @@ -21,6 +22,9 @@ public static NativeVectorGridCode Create()
return new NativeVectorGridCode(ptr);
}

/// <summary>
/// インデックスでアクセスし、そのコピーを返します。
/// </summary>
public override GridCode At(int index)
{
ThrowIfDisposed();
Expand All @@ -40,11 +44,18 @@ public override int Length
}
}

public void Add(GridCode gridCode)
/// <summary>
/// 追加します。ただし、無効なGridCodeの場合は何もしません。
/// </summary>
public void AddCopyOf(GridCode gridCode)
{
gridCode.PreventAutoDispose();
if (!gridCode.IsValid) return;
// ダングリングを防ぐためコピーを追加します。
var copied = GridCode.CopyFrom(gridCode.Handle);
// vectorが廃棄されるまでGridCodeが廃棄されないようにします。
copied.PreventAutoDispose();
var result = NativeMethods.plateau_vector_grid_code_push_back_value(
Handle, gridCode.Handle);
Handle, copied.Handle);
DLLUtil.CheckDllError(result);
}

Expand Down
Loading