사용자 정의 데이터에 대한 println!의 출력

Rust에서 내가 정의한 데이터를 println!를 이용해 화면에 출력하기 위해서는 반드시 std::fmt::Display 트레이트를 구현해야 합니다. 먼저 다음과 같은 MyStruct라는 데이터를 정의합니다.

struct MyStruct {
    name: String,
    age: u16,
}

fn main() {
    let o = MyStruct {
        name: String::from("Ferris"),
        age: 17,
    };

    println!("{}", o);
}

위의 코드 12번은 에러를 발생하는데, 이는 MyStruct 타입의 o 객체를 콘솔에 출력하기 위해서는 MyStruct에 대해 std::fmt::Display 트레이트를 구현하지 않았기 때문입니다. 정상적으로 작동하기 위해서 위의 코드에 대해 다음처럼 보완하면 됩니다.

use std::fmt;

struct MyStruct { ... }

impl fmt::Display for MyStruct {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "name: {}, age: {}", self.name, self.age)
    }
}

fn main() {
    let ferris = ...

    println!("{}", ferris);
}

라인을 포인트로 변경 (Line To Point)

지오서비스웹에서 제공하는 공간 데이터 생성 기능 중 폴리라인을 포인트로 변환해 생성해주는 기능을 제공합니다.

이 기능을 사용하기 위해서는 먼저 폴리라인 데이터를 아카이브에 업로드한 뒤에 레이어로 추가합니다. 아래는 도로 중심선에 대한 공간 데이터를 레이어로 추가한 화면입니다.

이렇게 레이어가 추가된 폴라라인을 포인트로 변경하기 위해서 메인메뉴의 [생성]-[라인을 포인트로 변경]을 실행합니다.

그럼 아래와 같은 UI가 표시되는데요. 여기서 입력 레이어에는 앞서 추가한 폴리라인을 지정합니다. 그리고 위치 비율이 있는데요. 이 값은 0~1 사이의 값을 갖습니다. 0이면 폴리라인의 시작점을 결과 포인트로 얻고 1이면 폴리라인의 끝점을 결과 포인트로 얻습니다. 0.5는 중간점을 결과 포인트로 얻습니다. 이런 위치비율의 값을 레이어의 속성 데이터의 필드로 갖는다면 해당 필드를 위의 “비율 필드”에 지정하면 됩니다.

위의 예시 화면처럼 값을 지정하고 “생성” 버튼을 클릭하면 결과 데이터가 생성되어 아카이브에 업로드하고 내 컴퓨터로 다운로드 받거나 다음처럼 레이어로 추가해 그 결과를 바로 살펴볼 수 있습니다.

Babylon.js의 Global Illumination 기능

웹에서도 좀더 사실적인 3차원 렌더링 결과물을 얻어 내기 위해 바빌런JS에서는 GI(Global Illumination) 기능을 제공합니다. 아래는 GI가 적용되지 않은 결과입니다.

아래는 위과 동일한 장면에 대해 오직 GI만을 적용한 결과입니다.

하지만 바빌런의 GI는 아직까지 여러가지 문제점이 있는 것으로 보입니다. GI를 적용하면 여러가지 부작용이 발생하는데 대표적으로 FPS가 (매우) 떨어지며 그림자 효과와 함께 GI가 적용되면 그림자가 제대로 표현되지 않습니다. 광원 역시 SpotLight에서만 GI에 대한 효과가 제대로 나타나는 것 같습니다. 게다가 실행 시 그 렌더링 결과가 매번 다릅니다. 하지만 바빌런의 GI 기능은 비교적 최근에 추가된 Core 기능(v7)이므로 향후 많은 개선이 이루어 질 것으로 기대 됩니다.

JavaScript, 객체의 프로퍼티 개수 얻기

Object 타입의 객체에 대한 프로퍼티의 개수를 얻기 위해서 다음처럼 접근할 수 있습니다.

const obj = { .... };

let result = 0;
for (let fid in rows) {
  result++;
}

느낌이 쎄합니다. 다행히 다음과 같은 매우 효과적인 방식이 있습니다.

Object.keys(obj).length