Tệp XML để đọc chính tả Python

Vì cảnh có thể tham chiếu các tài nguyên bên ngoài như mắt lưới và kết cấu bằng cách sử dụng các đường dẫn tương đối được chỉ định trong tệp XML, nên Mitsuba phải được thông báo về nơi tìm các tệp đó. Đoạn mã trên thực hiện điều này thông qua lớp thread-local

Truyền đối số cho cảnh

Như đã giải thích trong phần thảo luận về , một tệp cảnh có thể chứa các tham số được đặt tên có tiền tố là ký hiệu <!-- sample per pixel parameter --> <default name="spp" value="8"/> ... <sampler type="independent"> <integer name="sample_count" value="$spp"/> </sampler> 6

<!-- sample per pixel parameter --> <default name="spp" value="8"/> ... <sampler type="independent"> <integer name="sample_count" value="$spp"/> </sampler>

Các tham số này có thể được xác định rõ ràng bằng cách sử dụng các đối số từ khóa khi tải cảnh

scene = load_file(filename, spp=1024)

Đang tải một đối tượng Mitsuba

Cũng có thể tạo một thể hiện của một đối tượng Mitsuba đơn lẻ (e. g. một BSDF) bằng cách sử dụng trình phân tích cú pháp XML, như được hiển thị trong đoạn mã Python sau

from mitsuba.core.xml import load_string diffuse_bsdf = load_string("<bsdf version='2.0.0' type='diffuse'></bsdf>")

Bộ thử nghiệm của Mitsuba thường xuyên sử dụng phương pháp này để kiểm tra hành vi của các thành phần hệ thống riêng lẻ

Tạo đối tượng bằng từ điển Python

Một cách thuận tiện hơn để xây dựng các đối tượng Mitsuba trong Python là sử dụng từ điển Python làm đối số. Từ điển này phải tuân theo một cấu trúc tương tự như cấu trúc XML được sử dụng cho mô tả cảnh Mitsuba

Từ điển phải luôn chứa một mục <!-- sample per pixel parameter --> <default name="spp" value="8"/> ... <sampler type="independent"> <integer name="sample_count" value="$spp"/> </sampler> 8 để chỉ định tên của plugin sẽ được khởi tạo. Các khóa của từ điển phải là các chuỗi và sẽ đại diện cho tên của các thuộc tính. Loại thuộc tính sẽ được suy ra từ loại Python cho các loại đơn giản (e. g. <!-- sample per pixel parameter --> <default name="spp" value="8"/> ... <sampler type="independent"> <integer name="sample_count" value="$spp"/> </sampler> 9, scene = load_file(filename, spp=1024) 0, scene = load_file(filename, spp=1024) 1, scene = load_file(filename, spp=1024) 2,…). Có thể cung cấp một từ điển khác làm giá trị của một mục nhập. Điều này có thể được sử dụng để tạo các đối tượng lồng nhau, như trong mô tả cảnh XML

Các đoạn mã sau minh họa sự giống nhau giữa mã XML và cấu trúc từ điển Python

XML

<shape type="obj"> <string name="filename" value="dragon.obj"/> <bsdf type="roughconductor"> <float name="alpha" value="0.01"/> </bsdf> </shape>

Từ điển Python

{ "type" : "obj", "filename" : "dragon.obj", "something" : { "type" : "roughconductor", "alpha" : 0.01 } }

Dưới đây là một ví dụ cụ thể hơn về cách sử dụng chức năng

from mitsuba.core.xml import load_dict sphere = load_dict({ "type" : "sphere", "center" : [0, 0, -10], "radius" : 10.0, "flip_normals" : False, "bsdf" : { "type" : "dielectric" } })

Có thể cung cấp một đối tượng Mitsuba khác trong từ điển Python thay vì sử dụng các từ điển lồng nhau

# First create a BSDF (could use xml.load_string(..) as well) my_bsdf = load_dict({ "type" : "roughconductor", "alpha" : 0.14, }) # Pass the BSDF object in the dictionary sphere = load_dict({ "type" : "sphere", "something" : my_bsdf })

Để thuyết phục, một từ điển lồng nhau có thể được cung cấp một mục nhập <!-- sample per pixel parameter --> <default name="spp" value="8"/> ... <sampler type="independent"> <integer name="sample_count" value="$spp"/> </sampler> 8 bằng với scene = load_file(filename, spp=1024) 4 hoặc scene = load_file(filename, spp=1024) 5. Tương tự như trình phân tích cú pháp XML, mục nhập scene = load_file(filename, spp=1024) 6 trong từ điển đó sẽ được sử dụng để kích hoạt plugin scene = load_file(filename, spp=1024) 7 phù hợp. (Xem )

Dưới đây là một số ví dụ về khả năng sử dụng mục nhập scene = load_file(filename, spp=1024) 6 trong từ điển lồng nhau

# Passing gray-scale value "color_property" : { "type": "rgb", "value": 0.44 } # Passing tri-stimulus values "color_property" : { "type": "rgb", "value": [0.7, 0.1, 0.5] } # Providing a spectral file "color_property" : { "type": "spectrum", "filename": "filename.spd" } # Providing a list of (wavelength, value) pairs "color_property" : { "type": "spectrum", "value": [(400.0, 0.5), (500.0, 0.8), (600.0, 0.2)] }

Ví dụ sau xây dựng một cảnh Mitsuba bằng cách sử dụng

scene = load_dict({ "type" : "scene", "myintegrator" : { "type" : "path", }, "mysensor" : { "type" : "perspective", "near_clip": 1.0, "far_clip": 1000.0, "to_world" : ScalarTransform4f.look_at(origin=[1, 1, 1], target=[0, 0, 0], up=[0, 0, 1]), "myfilm" : { "type" : "hdrfilm", "rfilter" : { "type" : "box"}, "width" : 1024, "height" : 768, }, "mysampler" : { "type" : "independent", "sample_count" : 4, }, }, "myemitter" : {"type" : "constant"}, "myshape" : { "type" : "sphere", "mybsdf" : { "type" : "diffuse", "reflectance" : { "type" : "rgb", "value" : [0.8, 0.1, 0.1], } } } })

Như trong mô tả cảnh XML, có thể tham chiếu các đối tượng khác trong <!-- sample per pixel parameter --> <default name="spp" value="8"/> ... <sampler type="independent"> <integer name="sample_count" value="$spp"/> </sampler> 4, miễn là những đối tượng được khai báo trước khi tham chiếu diễn ra trong từ điển. Với mục đích này, bạn có thể chỉ định một từ điển lồng nhau với mục nhập from mitsuba.core.xml import load_string diffuse_bsdf = load_string("<bsdf version='2.0.0' type='diffuse'></bsdf>") 1 và mục nhập from mitsuba.core.xml import load_string diffuse_bsdf = load_string("<bsdf version='2.0.0' type='diffuse'></bsdf>") 2. Các đối tượng có thể được tham chiếu bằng cách sử dụng from mitsuba.core.xml import load_string diffuse_bsdf = load_string("<bsdf version='2.0.0' type='diffuse'></bsdf>") 3 của chúng trong từ điển. Cũng có thể tham chiếu một đối tượng bằng cách sử dụng nó là from mitsuba.core.xml import load_string diffuse_bsdf = load_string("<bsdf version='2.0.0' type='diffuse'></bsdf>") 4 nếu một đối tượng đã được xác định

Làm cách nào để chuyển đổi XML thành dict trong Python?

Sử dụng xmltodict. parse() để phân tích cú pháp nội dung từ biến và chuyển nó thành Từ điển .

Làm cách nào để sử dụng Xmltodict trong Python?

Phân tích cú pháp đầu vào XML đã cho và chuyển đổi nó thành từ điển . xml_input có thể là một chuỗi hoặc một đối tượng giống như tệp. Nếu xml_attribs là True , các thuộc tính phần tử được đưa vào từ điển giữa các phần tử con thông thường, sử dụng @ làm tiền tố để tránh xung đột.

Làm cách nào để cài đặt Xmltodict trong Python?

Gõ "cmd" vào thanh tìm kiếm và nhấn Enter để mở dòng lệnh. Cái này là cái gì? . Điều này cài đặt xmltodict cho cài đặt Python mặc định của bạn. Type “ pip install xmltodict ” (without quotes) in the command line and hit Enter again. This installs xmltodict for your default Python installation.

Làm cách nào để phân tích cú pháp tệp XML bằng Python?

Để phân tích cú pháp tài liệu XML, bạn cần có toàn bộ tài liệu trong bộ nhớ. .
Để phân tích cú pháp tài liệu XML
Nhập xml. nhà thờ. thiểu số
Sử dụng hàm “parse” để phân tích tài liệu ( doc=xml. nhà thờ. thiểu số. phân tích cú pháp (tên tệp);
Gọi danh sách các thẻ XML từ tài liệu XML bằng mã (=doc. getElementsByTagName(“tên của thẻ xml”)

Chủ đề