forked from mcneel/opennurbs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathopennurbs_xml.h
944 lines (750 loc) · 39.9 KB
/
opennurbs_xml.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
//
// Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved.
// OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert
// McNeel & Associates.
//
// THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.
// ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF
// MERCHANTABILITY ARE HEREBY DISCLAIMED.
//
// For complete openNURBS copyright information see <http://www.opennurbs.org>.
//
////////////////////////////////////////////////////////////////
#if !defined(ON_XML_INC_)
#define ON_XML_INC_
typedef bool (*ON_XMLRecurseChildrenCallback)(class ON_XMLNode*, void*);
#define ON_XML_SLASH L"/"
// This is the structure of the RDK document XML.
#define ON_RDK_DOCUMENT L"render-content-manager-document"
#define ON_RDK_CURRENT_CONTENT L"content"
#define ON_RDK_BACKGROUND_ENVIRONMENT L"environment"
#define ON_RDK_DEFAULT_CONTENT_SECTION L"default-content-section"
#define ON_RDK_SETTINGS L"settings"
#define ON_RDK_NAMED_VIEWS L"named-views"
#define ON_RDK_NAMED_CPLANES L"named-cplanes"
#define ON_RDK_NAMED_POSITIONS L"named-positions"
#define ON_RDK_NAMED_SNAPSHOTS L"named-snapshots"
#define ON_RDK_SORT_MODE L"sort-mode"
#define ON_RDK_SORT_MODE_ASCENDING L"ascending"
#define ON_RDK_SORT_MODE_DESCENDING L"descending"
#define ON_RDK_SORT_MODE_CUSTOM L"custom"
#define ON_RDK_MISCELLANEOUS L"miscellaneous"
#define ON_RDK_CUSTOM_IMAGE_SIZE_IS_PRESET L"custom-image-size-is-preset"
#define ON_RDK_NAME_COLLISION_SUPPRESS L"smart-merge-name-collision-suppress"
#define ON_RDK_IMPORT L"import"
#define ON_RDK_PASTE L"paste"
#define ON_RDK_EXCLUDED_RENDER_ENGINES L"excluded-render-engines"
#define ON_RDK_UUIDS L"uuids"
#define ON_RDK_FILTERS L"filters"
#define ON_RDK_NAME_FILTER L"name-filter"
#define ON_RDK_NAME_FILTER_INVERT L"name-filter-invert"
#define ON_RDK_SHOW_UNASSIGNED L"show-unassigned-materials"
#define ON_RDK_SHOW_V4 L"show-v4-materials"
#define ON_RDK_SHOW_HIDDEN L"show-hidden-materials"
#define ON_RDK_SHOW_REFERENCE L"show-reference-materials"
#define ON_RDK_POST_EFFECTS L"post-effects-new"
#define ON_RDK_PEP_TYPE_EARLY L"early"
#define ON_RDK_PEP_TYPE_TONE_MAPPING L"tone-mapping"
#define ON_RDK_PEP_TYPE_LATE L"late"
#define ON_RDK_PEP_PLUG_IN L"plug-in"
#define ON_RDK_PEP_LOCAL_NAME L"name"
#define ON_RDK_PEP_ON L"on"
#define ON_RDK_PEP_ID L"id"
#define ON_RDK_PEP_SHOWN L"shown"
#define ON_RDK_PEP_PARAMS L"state" // This should really be 'params'.
#define ON_RDK_PEP_SELECTION L"selection"
#define ON_RDK_RENDERING L"rendering"
#define ON_RDK_RENDER_CHANNELS L"render-channels"
#define ON_RDK_RCH_LIST L"list"
#define ON_RDK_RCH_MODE L"mode"
#define ON_RDK_RCH_MODE_AUTOMATIC L"automatic"
#define ON_RDK_RCH_MODE_CUSTOM L"custom"
#define ON_RDK_CURRENT_RENDER_PRESET L"current-preset"
#define ON_RDK_EMBED_SUPPORT_FILES_ON L"embed-support-files-on"
#define ON_RDK_DITHERING_ENABLED L"use-dithering"
#define ON_RDK_DITHERING_METHOD L"dithering"
#define ON_RDK_DITHERING_METHOD_FLOYD_STEINBERG L"floyd-steinberg"
#define ON_RDK_DITHERING_METHOD_SIMPLE_NOISE L"simple-noise"
#define ON_RDK_PRE_PROCESS_GAMMA_ON L"use-linear-workflow"
#define ON_RDK_POST_PROCESS_GAMMA_ON L"use-post-process-gamma"
#define ON_RDK_POST_PROCESS_GAMMA L"gamma" // Keep original XML tag.
#define ON_RDK_CUSTOM_REFLECTIVE_ENVIRONMENT_ON L"custom-env-for-refl-and-refr-on"
#define ON_RDK_CUSTOM_REFLECTIVE_ENVIRONMENT L"custom-env-for-refl-and-refr"
#define ON_RDK_SUN L"sun"
#define ON_RDK_SUN_ENABLE_ALLOWED L"enable-allowed"
#define ON_RDK_SUN_ENABLE_ON L"enable-on"
#define ON_RDK_SUN_MANUAL_CONTROL_ALLOWED L"manual-control-allowed"
#define ON_RDK_SUN_MANUAL_CONTROL_ON L"manual-control-on"
#define ON_RDK_SUN_NORTH L"north"
#define ON_RDK_SUN_AZIMUTH L"sun-azimuth"
#define ON_RDK_SUN_ALTITUDE L"sun-altitude"
#define ON_RDK_SUN_DATE_YEAR L"year"
#define ON_RDK_SUN_DATE_MONTH L"month"
#define ON_RDK_SUN_DATE_DAY L"day"
#define ON_RDK_SUN_TIME_HOURS L"time"
#define ON_RDK_SUN_DAYLIGHT_SAVING_ON L"daylight-saving-on"
#define ON_RDK_SUN_DAYLIGHT_SAVING_MINUTES L"daylight-saving-minutes"
#define ON_RDK_SUN_OBSERVER_LATITUDE L"observer-latitude"
#define ON_RDK_SUN_OBSERVER_LONGITUDE L"observer-longitude"
#define ON_RDK_SUN_OBSERVER_TIMEZONE L"observer-timezone"
#define ON_RDK_SUN_SKYLIGHT_ENABLED L"skylight-on"
#define ON_RDK_SUN_SKYLIGHT_SHADOW_INTENSITY L"skylight-shadow-intensity"
#define ON_RDK_SUN_SKYLIGHT_ENVIRONMENT_OVERRIDE L"skylight-custom-environment-on"
#define ON_RDK_SUN_SKYLIGHT_ENVIRONMENT_ID L"skylight-custom-environment"
#define ON_RDK_SUN_SHADOW_INTENSITY L"shadow-intensity"
#define ON_RDK_SUN_INTENSITY L"intensity"
#define ON_RDK_SAFE_FRAME L"safe-frame"
#define ON_RDK_SF_ENABLED L"on"
#define ON_RDK_SF_PERSPECTIVE_ONLY L"perspective-only"
#define ON_RDK_SF_4x3_FIELD_GRID_ON L"field-display-on"
#define ON_RDK_SF_LIVE_FRAME L"live-frame"
#define ON_RDK_SF_ACTION_FRAME L"action-frame"
#define ON_RDK_SF_TITLE_FRAME L"title-frame"
#define ON_RDK_SFF_ON L"on"
#define ON_RDK_SFF_XSCALE L"x-scale"
#define ON_RDK_SFF_YSCALE L"y-scale"
#define ON_RDK_SFF_LINK L"link"
#define ON_RDK_GROUND_PLANE L"ground-plane"
#define ON_RDK_GP_ENABLED L"on"
#define ON_RDK_GP_ALTITUDE L"altitude"
#define ON_RDK_GP_AUTO_ALTITUDE L"auto-altitude"
#define ON_RDK_GP_SHOW_UNDERSIDE L"show-underside"
#define ON_RDK_GP_SHADOW_ONLY L"shadow-only"
#define ON_RDK_GP_MATERIAL_ID L"material"
#define ON_RDK_GP_TEXTURE_OFFSET L"texture-offset"
#define ON_RDK_GP_TEXTURE_OFFSET_LOCKED L"offset-lock" // Keep old string.
#define ON_RDK_GP_TEXTURE_SIZE L"texture-size"
#define ON_RDK_GP_TEXTURE_SIZE_LOCKED L"repeat-lock" // Keep old string.
#define ON_RDK_GP_TEXTURE_ROTATION L"texture-rotation"
// Decals (stored in object attributes user data).
#define ON_RDK_DECALS L"decals"
#define ON_RDK_DECAL L"decal"
#define ON_RDK_DECAL_CUSTOM L"custom"
#define ON_RDK_DECAL_CUSTOM_RENDERER L"renderer"
#define ON_RDK_DECAL_CUSTOM_PARAMS L"parameters"
#define ON_RDK_DECAL_MAPPING L"mapping"
//----- +++++++++++++++++++
#define ON_RDK_DECAL_MAPPING_PLANAR L"planar"
#define ON_RDK_DECAL_MAPPING_CYLINDRICAL L"cylindrical"
#define ON_RDK_DECAL_MAPPING_SPHERICAL L"spherical"
#define ON_RDK_DECAL_MAPPING_UV L"uv"
#define ON_RDK_DECAL_MAPPING_NONE L"none"
#define ON_RDK_DECAL_PROJECTION L"projection"
//----- ++++++++++++++++++++++
#define ON_RDK_DECAL_PROJECTION_FORWARD L"forward"
#define ON_RDK_DECAL_PROJECTION_BACKWARD L"backward"
#define ON_RDK_DECAL_PROJECTION_BOTH L"both"
#define ON_RDK_DECAL_PROJECTION_NONE L"none"
#define ON_RDK_DECAL_MAP_TO_INSIDE_ON L"map-to-inside-on"
#define ON_RDK_DECAL_TRANSPARENCY L"transparency"
#define ON_RDK_DECAL_TEXTURE_INSTANCE L"texture-instance"
#define ON_RDK_DECAL_HEIGHT L"height"
#define ON_RDK_DECAL_ORIGIN L"origin"
#define ON_RDK_DECAL_RADIUS L"radius"
#define ON_RDK_DECAL_HORZ_SWEEP_STA L"latitude-start"
#define ON_RDK_DECAL_HORZ_SWEEP_END L"latitude-stop"
#define ON_RDK_DECAL_VERT_SWEEP_STA L"longitude-start"
#define ON_RDK_DECAL_VERT_SWEEP_END L"longitude-stop"
#define ON_RDK_DECAL_VECTOR_UP L"vector-up"
#define ON_RDK_DECAL_VECTOR_ACROSS L"vector-across"
#define ON_RDK_DECAL_MIN_U L"min-u"
#define ON_RDK_DECAL_MIN_V L"min-v"
#define ON_RDK_DECAL_MAX_U L"max-u"
#define ON_RDK_DECAL_MAX_V L"max-v"
#define ON_RDK_DECAL_IS_TEMPORARY L"is-temporary"
#define ON_RDK_DECAL_IS_VISIBLE L"is-visible"
#define ON_RDK_DECAL_INSTANCE_ID L"instance-id"
// Render Content.
#define ON_RENDER_CONTENT_TYPE_NAME L"type-name"
#define ON_RENDER_CONTENT_TYPE_ID L"type-id"
#define ON_RENDER_CONTENT_INSTANCE_ID L"instance-id"
#define ON_RENDER_CONTENT_RENDER_ENGINE_ID L"render-engine-id"
#define ON_RENDER_CONTENT_PLUG_IN_ID L"plug-in-id"
#define ON_RENDER_CONTENT_GROUP_ID L"group-id"
#define ON_RENDER_CONTENT_INSTANCE_NAME L"instance-name"
#define ON_RENDER_CONTENT_CHILD_SLOT_NAME L"child-slot-name"
#define ON_RENDER_CONTENT_NOTES L"notes"
#define ON_RENDER_CONTENT_TAGS L"tags"
#define ON_RENDER_CONTENT_HIDDEN L"hidden"
#define ON_RENDER_CONTENT_REFERENCE L"reference"
#define ON_RENDER_CONTENT_AUTO_DELETE L"auto-delete"
#define ON_RENDER_CONTENT_PARAMETERS L"parameters"
#define ON_RENDER_CONTENT_PARAMETERS_V8 L"parameters-v8"
#define ON_RENDER_CONTENT_SIMULATION L"simulation"
// General parameters used by materials that simulate ON_Material.
#define ON_MATERIAL_ALPHA_TRANSPARENCY L"alpha-transparency"
#define ON_MATERIAL_AMBIENT L"ambient"
#define ON_MATERIAL_DIFFUSE L"diffuse"
#define ON_MATERIAL_DISABLE_LIGHTING L"disable-lighting"
#define ON_MATERIAL_EMISSION L"emission"
#define ON_MATERIAL_FLAMINGO_LIBRARY L"flamingo-library"
#define ON_MATERIAL_FRESNEL_ENABLED L"fresnel-enabled"
#define ON_MATERIAL_CLARITY_AMOUNT L"clarity-amount"
#define ON_MATERIAL_IOR L"ior"
#define ON_MATERIAL_POLISH_AMOUNT L"polish-amount"
#define ON_MATERIAL_SHINE L"shine" // Value is 0.0..1.0, NOT ON_Material::MaxShine.
#define ON_MATERIAL_SPECULAR L"specular"
#define ON_MATERIAL_REFLECTIVITY_AMOUNT L"reflectivity"
#define ON_MATERIAL_REFLECTIVITY_COLOR L"reflectivity-color"
#define ON_MATERIAL_TRANSPARENCY_AMOUNT L"transparency"
#define ON_MATERIAL_TRANSPARENCY_COLOR L"transparency-color"
#define ON_MATERIAL_SIM_REFLECTION_COLOR L"reflection" // Used by simulation, not by Custom Material field.
#define ON_MATERIAL_SIM_TRANSPARENT_COLOR L"transparent" // Used by simulation, not by Custom Material field.
#define ON_MATERIAL_IS_PHYSICALLY_BASED L"is-physically-based"
#define ON_PBR_MATERIAL_BRDF L"pbr-brdf"
#define ON_PBR_MATERIAL_BRDF_GGX L"ggx"
#define ON_PBR_MATERIAL_BRDF_WARD L"ward"
#define ON_PBR_MATERIAL_ALPHA L"pbr-alpha"
#define ON_PBR_MATERIAL_ANISOTROPIC L"pbr-anisotropic"
#define ON_PBR_MATERIAL_ANISOTROPIC_ROTATION L"pbr-anisotropic-rotation"
#define ON_PBR_MATERIAL_BASE_COLOR L"pbr-base-color"
#define ON_PBR_MATERIAL_CLEARCOAT L"pbr-clearcoat"
#define ON_PBR_MATERIAL_CLEARCOAT_BUMP L"pbr-clearcoat-bump"
#define ON_PBR_MATERIAL_CLEARCOAT_ROUGHNESS L"pbr-clearcoat-roughness"
#define ON_PBR_MATERIAL_EMISSION_COLOR L"pbr-emission"
#define ON_PBR_MATERIAL_EMISSION_MULTIPLIER L"emission-multiplier"
#define ON_PBR_MATERIAL_METALLIC L"pbr-metallic"
#define ON_PBR_MATERIAL_OPACITY L"pbr-opacity"
#define ON_PBR_MATERIAL_OPACITY_IOR L"pbr-opacity-ior"
#define ON_PBR_MATERIAL_OPACITY_ROUGHNESS L"pbr-opacity-roughness"
#define ON_PBR_MATERIAL_ROUGHNESS L"pbr-roughness"
#define ON_PBR_MATERIAL_SHEEN L"pbr-sheen"
#define ON_PBR_MATERIAL_SHEEN_TINT L"pbr-sheen-tint"
#define ON_PBR_MATERIAL_SPECULAR L"pbr-specular"
#define ON_PBR_MATERIAL_SPECULAR_TINT L"pbr-specular-tint"
#define ON_PBR_MATERIAL_SUBSURFACE L"pbr-subsurface"
#define ON_PBR_MATERIAL_SUBSURFACE_SCATTERING_COLOR L"pbr-subsurface-scattering-color"
#define ON_PBR_MATERIAL_SUBSURFACE_SCATTERING_RADIUS L"pbr-subsurface-scattering-radius"
#define ON_PBR_MATERIAL_USE_BASE_COLOR_TEXTURE_ALPHA L"pbr-use-base-color-texture-alpha"
#define ON_RENDER_TEXTURE_FILENAME L"filename"
// Material's texture simulation.
#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_FORMAT L"Texture-%u-"
#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_FILENAME L"filename"
#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_ON L"on"
#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_AMOUNT L"amount"
#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_TYPE L"type"
#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_FILTER L"filter"
#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_MODE L"mode"
#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_UVW L"uvw"
#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_WRAP_U L"wrap-u"
#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_WRAP_V L"wrap-v"
// Environment simulation.
#define ON_ENVIRONMENT_SIMULATION_BACKGROUND_COLOR L"background-color"
#define ON_ENVIRONMENT_SIMULATION_BACKGROUND_IMAGE L"background-image"
#define ON_ENVIRONMENT_SIMULATION_BACKGROUND_PROJECTION L"background-projection"
// Environment projections.
#define ON_ENVIRONMENT_PROJECTION_BOX L"box"
#define ON_ENVIRONMENT_PROJECTION_CUBE_MAP L"cubemap"
#define ON_ENVIRONMENT_PROJECTION_CUBE_MAP_HORZ L"horizontal-cross-cubemap"
#define ON_ENVIRONMENT_PROJECTION_CUBE_MAP_VERT L"vertical-cross-cubemap"
#define ON_ENVIRONMENT_PROJECTION_EMAP L"emap"
#define ON_ENVIRONMENT_PROJECTION_HEMISPHERICAL L"hemispherical"
#define ON_ENVIRONMENT_PROJECTION_LIGHT_PROBE L"lightprobe"
#define ON_ENVIRONMENT_PROJECTION_PLANAR L"planar"
#define ON_ENVIRONMENT_PROJECTION_SPHERICAL L"spherical"
// Texture simulation.
#define ON_TEXTURE_SIMULATION_ON L"on"
#define ON_TEXTURE_SIMULATION_FILENAME L"filename"
#define ON_TEXTURE_SIMULATION_MODE L"mode"
#define ON_TEXTURE_SIMULATION_TYPE L"type"
#define ON_TEXTURE_SIMULATION_OFFSET L"offset"
#define ON_TEXTURE_SIMULATION_REPEAT L"repeat"
#define ON_TEXTURE_SIMULATION_ROTATION L"rotation"
#define ON_TEXTURE_SIMULATION_MAPPING_CHANNEL L"mapping-channel"
#define ON_TEXTURE_SIMULATION_PROJECTION_MODE L"projection-mode"
#define ON_TEXTURE_SIMULATION_HAS_TRANSPARENT_COLOR L"has-trans-color"
#define ON_TEXTURE_SIMULATION_MIN_FILTER L"min-filter"
#define ON_TEXTURE_SIMULATION_MAG_FILTER L"mag-filter"
#define ON_TEXTURE_SIMULATION_TRANSPARENCY_TEXTURE_ID L"transparency-texture-id"
#define ON_TEXTURE_SIMULATION_TRANSPARENT_COLOR L"trans-color"
#define ON_TEXTURE_SIMULATION_TRANSPARENT_COLOR_SENSITIVITY L"trans-color-sensitivity"
#define ON_TEXTURE_SIMULATION_TREAT_AS_LINEAR L"treat-as-linear"
#define ON_TEXTURE_SIMULATION_WRAP_TYPE L"wrap-type"
#define ON_TEXTURE_SIMULATION_BLEND_CONSTANT_A L"blend-constant-a"
// Strings returned by ON_RenderContent::Kind().
#define ON_KIND_MATERIAL L"material"
#define ON_KIND_ENVIRONMENT L"environment"
#define ON_KIND_TEXTURE L"texture"
// Standard texture child slot names.
#define ON_TEXTURE_CHILD_SLOT_NAME_BITMAP_TEXTURE L"bitmap-texture"
#define ON_TEXTURE_CHILD_SLOT_NAME_BUMP_TEXTURE L"bump-texture"
#define ON_TEXTURE_CHILD_SLOT_NAME_TRANSPARENCY_TEXTURE L"transparency-texture"
#define ON_TEXTURE_CHILD_SLOT_NAME_ENVIRONMENT_TEXTURE L"environment-texture"
#define ON_RDK_POSTFIX_SECTION L"-section"
class ON_CLASS ON_XMLVariant
{
public:
enum class Types : unsigned int
{
Null,
Bool, Integer, Float, Double, String,
DoubleArray2, DoubleArray3, DoubleArray4, DoubleColor4,
Matrix, Uuid, Time, Buffer
};
enum class ArrayTypes : unsigned int
{
Array2, Array3, Array4, Array16
};
public:
ON_XMLVariant(); // Creates an empty string type.
ON_XMLVariant(bool value);
ON_XMLVariant(int value);
ON_XMLVariant(float value);
ON_XMLVariant(double value);
ON_XMLVariant(time_t time);
ON_XMLVariant(const ON_wString& value);
ON_XMLVariant(const ON_UUID& uuid);
ON_XMLVariant(const ON_2dPoint& p);
ON_XMLVariant(const ON_3dPoint& p);
ON_XMLVariant(const ON_4fColor& c);
ON_XMLVariant(const ON_Xform& xform);
ON_XMLVariant(const double* point, ArrayTypes at=ArrayTypes::Array3);
ON_XMLVariant(const float* point, ArrayTypes at=ArrayTypes::Array3);
ON_XMLVariant(const wchar_t* wsz);
ON_XMLVariant(const void* buffer, size_t size);
ON_XMLVariant(const ON_Buffer& buffer);
ON_XMLVariant(const ON_XMLVariant& src);
virtual ~ON_XMLVariant();
const ON_XMLVariant& operator = (const ON_XMLVariant& src);
bool operator == (const ON_XMLVariant& v) const;
bool operator != (const ON_XMLVariant& v) const;
virtual ON__UINT32 DataCRC(ON__UINT32 current_remainder) const;
public:
virtual Types Type(void) const;
virtual ON_wString TypeAsString(void) const;
virtual bool IsEmpty(void) const;
virtual bool IsNull(void) const;
virtual bool Varies(void) const;
virtual void SetVaries(void);
virtual ON::LengthUnitSystem Units(void) const;
virtual void SetUnits(ON::LengthUnitSystem units);
// Optimized version of ON_wString::NeedsXMLEncode(). Always use this if possible
// because it knows from the type of the variant whether entity ref encoded output is even possible.
virtual bool NeedsXMLEncode(void) const;
virtual ON_Buffer& GetBuffer(void) const;
virtual void ClearBuffers(void);
public:
virtual void SetNull(void);
virtual void SetValue(int v);
virtual void SetValue(double v);
virtual void SetValue(float v);
virtual void SetValue(const wchar_t* s);
virtual void SetValue(const ON_wString& s);
virtual void SetValue(const double* p, ArrayTypes at);
virtual void SetValue(const float* p, ArrayTypes at);
virtual void SetValue(const ON_2dPoint& p);
virtual void SetValue(const ON_3dPoint& p);
virtual void SetValue(const ON_4dPoint& p);
virtual void SetValue(const ON_4fColor& c);
virtual void SetValue(bool b);
virtual void SetValue(time_t time);
virtual void SetValue(const ON_UUID& uuid);
virtual void SetValue(const ON_Xform& xform);
virtual void SetValue(const void* buffer, size_t size);
virtual void SetValue(const ON_Buffer& buffer);
virtual bool AsBool(void) const;
virtual int AsInteger(void) const;
virtual double AsDouble(void) const;
virtual float AsFloat(void) const;
virtual ON_2dPoint As2dPoint(void) const;
virtual ON_3dPoint As3dPoint(void) const;
virtual ON_4dPoint As4dPoint(void) const;
virtual ON_UUID AsUuid(void) const;
virtual ON_Xform AsXform(void) const;
virtual time_t AsTime(void) const;
virtual ON_4fColor AsColor(void) const;
virtual ON_Buffer AsBuffer(void) const;
virtual void* AsBuffer(size_t& size_out) const;
virtual ON_wString AsString(void) const;
operator bool() const;
operator double() const;
operator float() const;
operator int() const;
operator ON_2dPoint() const;
operator ON_3dPoint() const;
operator ON_4dPoint() const;
operator ON_4fColor() const;
operator ON_UUID() const;
operator time_t() const;
operator ON_Buffer() const;
operator ON_wString() const;
public:
virtual bool TypePending(void) const;
virtual void SetTypePendingFlag(bool bTypePending) const;
// Format string as type and value. Useful for debugging.
virtual void Format(ON_wString& s) const;
protected:
virtual void StringToPoint(int iValues) const;
private:
class ON_XMLVariantPrivate* _private;
ON__UINT8 _PRIVATE[168+64];
};
class ON_CLASS ON_XMLProperty
{
public:
ON_XMLProperty();
ON_XMLProperty(const ON_XMLVariant& value);
ON_XMLProperty(const ON_wString& sName, const ON_XMLVariant& value);
ON_XMLProperty(const ON_XMLProperty& prop);
virtual ~ON_XMLProperty();
const ON_XMLProperty& operator = (const ON_XMLProperty& prop);
virtual const ON_wString& Name(void) const;
virtual void SetName(const wchar_t* name);
virtual ON__UINT32 DataCRC(ON__UINT32 current_remainder) const;
virtual ON_XMLProperty* Next(void) const;
virtual bool IsDefaultProperty(void) const;
virtual const ON_XMLVariant& GetValue(void) const;
virtual void SetValue(const ON_XMLVariant& value);
bool operator < (const ON_XMLProperty& prop) const;
virtual ON_XMLVariant& GetNonConstValue(void);
virtual void SetHugeStringValue(const ON_wString& s);
virtual void* EVF(const wchar_t* func, void* data);
private:
class ON_XMLPropertyPrivate* _private;
ON__UINT8 _PRIVATE[24+64];
friend class ON_XMLNode;
friend class ON_XMLNodePrivate;
friend class ON_XMLPropertyPrivate;
};
class ON_CLASS ON_XMLSegmentedStream
{
public:
ON_XMLSegmentedStream();
virtual ~ON_XMLSegmentedStream();
virtual int Count(void) const;
virtual void Append(wchar_t* s);
virtual wchar_t* Segment(int index) const;
protected:
// Emergency virtual function for future expansion.
virtual void* EVF(const wchar_t* func, void* data);
ON_XMLSegmentedStream(const ON_XMLSegmentedStream&) = delete;
const ON_XMLSegmentedStream& operator = (const ON_XMLSegmentedStream&) = delete;
private:
class ON_XMLSegmentedStreamPrivate* _private;
};
class ON_CLASS ON_XMLNode
{
public:
ON_XMLNode(const wchar_t* name); // Always creates empty default property.
ON_XMLNode(const ON_XMLNode&);
ON_XMLNode(ON_XMLNode&&) noexcept = delete;
virtual ~ON_XMLNode();
const ON_XMLNode& operator = (const ON_XMLNode&);
bool operator == (const ON_XMLNode&) const;
bool operator != (const ON_XMLNode&) const;
virtual bool MergeFrom(const ON_XMLNode& src); // src node must have the same name
virtual const ON_wString& TagName(void) const;
virtual void SetTagName(const wchar_t* name);
static bool IsValidXMLNameWithDebugging(const wchar_t* name);
static bool IsValidXMLName(const wchar_t* name);
static ON_wString GetNameFromTag(const wchar_t* tag);
public: // Hierarchy.
// Get the first child of this node or null if none.
virtual ON_XMLNode* FirstChild(void) const;
// Get the previous sibling of this node or null if none.
virtual ON_XMLNode* PrevSibling(void) const;
// Get the next sibling of this node or null if none.
virtual ON_XMLNode* NextSibling(void) const;
// Get the parent of this node or null if none.
virtual ON_XMLNode* Parent(void) const;
// Get the top-level parent of this node.
virtual const ON_XMLNode& TopLevel(void) const;
// Recursively iterate over the children of this node, calling the supplied callback function for each child.
// If the callback function returns false, this function will fail.
// Returns true if successful, false on failure.
virtual bool RecurseChildren(ON_XMLRecurseChildrenCallback callback, void* data) const;
public: // Change data.
// Adds a node as a child of this node. Takes ownership of node.
// Returns a pointer to node for convenience.
virtual ON_XMLNode* AttachChildNode(ON_XMLNode* node);
// Attaches a property directly to the node. Takes ownership of the property.
// Any existing property with the same name is first deleted.
// For convenience, returns a pointer to the input property.
virtual ON_XMLProperty* AttachProperty(ON_XMLProperty* prop);
// Sets a property on the node. The property is copied and ownership of it remains with the caller.
// Any existing property with the same name is first deleted.
// Returns a pointer to the copy of the property.
virtual ON_XMLProperty* SetProperty(const ON_XMLProperty& prop);
// Removes and deletes this node.
virtual void Remove(void);
// Removes and deletes the child node, if possible.
// Returns true if successful, else false.
virtual bool RemoveChild(ON_XMLNode* child);
// Removes and deletes the named property, if possible.
// Returns true if successful, else false.
virtual bool RemoveProperty(const wchar_t* prop_name);
// Removes the child node and passes ownership to the caller.
// Returns the detached node or null on failure.
virtual ON_XMLNode* DetachChild(ON_XMLNode& child);
// Removes and deletes all child nodes.
virtual void RemoveAllChildren(void);
// Removes and deletes all properties and adds an empty default property.
virtual void RemoveAllProperties(void);
// Removes and deletes all child nodes and properties, and clears the tag name.
virtual void Clear(void);
// Moves this node before another node.
virtual void MoveBefore(ON_XMLNode& other);
// Moves this node after another node.
virtual void MoveAfter(ON_XMLNode& other);
public: // Serialization.
static constexpr ON__UINT32 ReadError = 0xFFFFFFFF; // Indicates ReadFromStream() failure.
virtual ON__UINT32 ReadFromStream(const wchar_t* buf, bool warnings_as_errors=false, bool validate_tags=true);
virtual void* LastReadBufferPointer(void) const;
// This function is called on the top-most node during the reading process.
virtual void OnNodeReadFromStream(const ON_XMLNode* node) const;
virtual ON_wString String(bool include_formatting=true, bool force_long_format=false, bool sorted_props=false) const;
operator ON_wString() const;
// Writes the node to a wide buffer (AKA 'stream') as XML text.
// max_chars is the maximum number of wide characters that the buffer can accommodate.
// To find out how much space is needed without actually writing anything, pass zero.
// When writing to the buffer, a terminator is written if there is room for it, but the
// terminator is not included in the returned number of characters.
virtual ON__UINT32 WriteToStream(wchar_t* stream, ON__UINT32 max_chars, bool include_formatting = true, bool force_long_format = false, bool sorted_props = false) const;
class ON_CLASS CharacterCounts
{
public:
void operator += (const CharacterCounts& cw);
// Number of characters that would have been written if the buffer was big enough.
// This value does not include the terminator.
ON__UINT32 _logical = 0;
// Number of characters that were physically written. Always zero if max_chars is zero.
// It is otherwise usually the same as m_logical, but less when the buffer is too small.
// This value does not include the terminator.
ON__UINT32 _physical = 0;
ON__UINT64 _reserved = 0;
};
virtual CharacterCounts WriteToStreamEx (wchar_t* stream, ON__UINT32 max_chars, bool include_formatting = true, bool force_long_format = false, bool sorted_props = false) const;
virtual CharacterCounts WriteHeaderToStream (wchar_t* stream, ON__UINT32 max_chars, bool include_formatting = true, bool force_long_format = false, bool sorted_props = false) const;
virtual CharacterCounts WriteChildrenToStream(wchar_t* stream, ON__UINT32 max_chars, bool include_formatting = true, bool force_long_format = false, bool sorted_props = false) const;
virtual CharacterCounts WriteFooterToStream (wchar_t* stream, ON__UINT32 max_chars, bool include_formatting = true, bool force_long_format = false) const;
virtual bool WriteToSegmentedStream(ON_XMLSegmentedStream& stream, bool include_formatting=true, bool force_long_format=false, bool sorted_props=false) const;
public: // Utilities.
virtual int PropertyCount(void) const;
virtual int ChildCount(void) const;
virtual int GetNestedDepth(void) const;
// Get the CRC of this node.
// Param current_remainder is the current remainder value as used by ON_CRC32.
// Param recursive is true to process nodes recursively, false to process only this node.
virtual ON__UINT32 DataCRC(ON__UINT32 current_remainder, bool recursive) const;
// Use this when you are looking for a node that is only one child below - non-recursive, but fast.
virtual ON_XMLNode* GetNamedChild(const wchar_t* name) const;
virtual ON_XMLProperty* GetNamedProperty(const wchar_t* name) const;
virtual ON_XMLProperty& GetDefaultProperty(void) const;
// Returns the full path to this node.
virtual ON_wString GetPathFromRoot(void) const;
// Gets at nodes deep into the tree using a slash-delimited path, i.e., "child/grandchild/great-grandchild".
// There's no checking for multiple nodes with the same name at each level of the tree, so if you use these
// methods, you have to make sure you have unique node names at each level.
// Gets a child node given the relative path from the current node. If the node does not exist, the method
// returns null. The returned pointer should not be deleted by the caller. The child node is owned by its
// immediate parent at that position in the node hierarchy.
virtual ON_XMLNode* GetNodeAtPath(const wchar_t* path) const;
// Gets a child node given the relative path from the current node. If the node does not exist, it is
// created. This method should therefore never return null. The returned pointer should not be deleted
// by the caller. The child node is owned by its immediate parent at that position in the node hierarchy.
virtual ON_XMLNode* CreateNodeAtPath(const wchar_t* path);
protected:
// Emergency virtual function for future expansion.
virtual void* EVF(const wchar_t* func, void* data);
public: // Iteration.
class ON_CLASS ChildIterator
{
public:
ChildIterator(const ON_XMLNode* parent);
ChildIterator(const ChildIterator& other);
virtual ~ChildIterator();
const ChildIterator& operator = (const ChildIterator& other);
virtual ON_XMLNode* GetNextChild(void);
virtual void* EVF(const wchar_t* func, void* data);
private:
class ON_XMLNodeChildIteratorPrivate* _private;
};
class ON_CLASS PropertyIterator
{
public:
PropertyIterator(const ON_XMLNode* parent, bool sorted = false);
PropertyIterator(const PropertyIterator& other);
virtual ~PropertyIterator();
const PropertyIterator& operator = (const PropertyIterator& other);
virtual ON_XMLProperty* GetNextProperty(void);
virtual void* EVF(const wchar_t* func, void* data);
private:
class ON_XMLNodePropertyIteratorPrivate* _private;
};
virtual ChildIterator GetChildIterator(void) const;
virtual PropertyIterator GetPropertyIterator(bool alphabetized = false) const;
static bool AutoTypePropValue(void);
static void SetAutoTypePropValue(bool b=true);
// For internal use only.
virtual void SetInternalDebuggingFlags(ON__UINT64);
private:
class ON_XMLNodePrivate* _private;
ON__UINT8 _PRIVATE[152+64];
friend class ON_XMLNodePrivate;
friend class ON_XMLNodePropertyIteratorPrivate;
};
class ON_CLASS ON_XMLRootNode : public ON_XMLNode
{
public:
ON_XMLRootNode();
ON_XMLRootNode(const ON_XMLNode& node);
ON_XMLRootNode(const ON_XMLRootNode& root);
virtual ~ON_XMLRootNode();
const ON_XMLRootNode& operator = (const ON_XMLNode& node);
const ON_XMLRootNode& operator = (const ON_XMLRootNode& root);
virtual const ON_XMLRootNode& NodeForRead(void) const;
virtual ON_XMLRootNode& NodeForWrite(void);
virtual bool ReadFromFile(const wchar_t* path, bool warnings_as_errors=false, bool validate_tags=true);
virtual bool WriteToFile (const wchar_t* path, bool include_formatting=true, bool utf8=false, bool sorted_properties=false) const;
virtual void Clear(void) override;
private:
class ON_XMLRootNodePrivate* _private;
};
class ON_CLASS ON_XMLUserData : public ON_UserData
{
public:
ON_XMLUserData();
ON_XMLUserData(const ON_XMLUserData& ud);
virtual ~ON_XMLUserData();
const ON_XMLUserData& operator = (const ON_XMLUserData& ud);
virtual const ON_XMLRootNode& XMLRootForRead(void) const;
virtual ON_XMLRootNode& XMLRootForWrite(void) const;
virtual ON_XMLProperty* Property(const wchar_t* xml_path, const wchar_t* prop_name) const;
virtual ON_XMLVariant Value(const wchar_t* xml_path, const wchar_t* prop_name = L"") const;
virtual bool SetValue(const wchar_t* xml_path, const wchar_t* prop_name, const ON_XMLVariant& value);
virtual void SetValue(const wchar_t* xml_path, const ON_XMLVariant& value);
virtual void Clear(void) const;
virtual int Version(void) const;
virtual bool Archive(void) const override;
virtual void SetToDefaults(void) const = 0;
virtual void ReportVersionError(void) const = 0;
virtual bool Write(ON_BinaryArchive&) const override;
virtual bool Read(ON_BinaryArchive&) override;
virtual void _Dump(const wchar_t* wszFileName) const;
// Emergency virtual function for future expansion.
virtual void* EVF(const wchar_t* func, void* data);
protected:
ON_XMLProperty* InternalProperty(const wchar_t* xml_path, const wchar_t* prop_name) const;
public:
virtual void SetToDefaultsImpl(int) const;
private:
class ON_XMLUserDataPrivate* _private;
ON__UINT8 _PRIVATE[240+64];
};
class ON_CLASS ON_XMLParameters
{
public:
ON_XMLParameters(ON_XMLNode& node);
ON_XMLParameters(const ON_XMLNode& node);
ON_XMLParameters(const ON_XMLParameters&) = delete;
virtual ~ON_XMLParameters();
const ON_XMLParameters& operator = (const ON_XMLParameters&) = delete;
virtual void SetWriteTypeProperty(bool b);
virtual void SetDefaultReadType(const wchar_t* type);
virtual ON_wString AsString(void) const;
virtual void SetAsString(const wchar_t* s);
virtual bool GetParam(const wchar_t* param_name, ON_XMLVariant& param_value_out) const;
virtual ON_XMLNode* SetParam(const wchar_t* param_name, const ON_XMLVariant& param_value);
// Easy-to-use helper function. Returns 'default_value' if param is not found.
ON_XMLVariant GetParam(const wchar_t* param_name, const ON_XMLVariant& default_value) const;
// Expert access to the underlying XML node.
ON_XMLNode& Node(void);
const ON_XMLNode& Node(void) const;
class ON_CLASS CIterator
{
public:
CIterator(const ON_XMLParameters& p);
virtual ~CIterator();
bool Next(ON_wString& param_name_out, ON_XMLVariant& param_value_out) const;
protected:
virtual void* EVF(const wchar_t*, void*);
private:
class ON_XMLParametersIteratorPrivate* _private;
};
CIterator* NewIterator(void) const;
protected:
virtual bool GetParamNode(const ON_XMLNode& node, ON_XMLVariant& param_value) const;
virtual void* EVF(const wchar_t*, void*);
virtual ON_XMLNode* SetParamNode(ON_XMLNode& node, const wchar_t* param_name, const ON_XMLVariant& param_value);
virtual ON_XMLNode* ObtainChildNodeForWrite(ON_XMLNode& node, const wchar_t* param_name) const;
private:
class ON_XMLParametersPrivate* _private;
friend class ON_XMLParametersIteratorPrivate;
};
class ON_CLASS ON_XMLParametersV8 : public ON_XMLParameters
{
public:
ON_XMLParametersV8(ON_XMLNode& node);
ON_XMLParametersV8(const ON_XMLNode& node);
ON_XMLParametersV8(const ON_XMLParametersV8&) = delete;
const ON_XMLParametersV8& operator = (const ON_XMLParametersV8&) = delete;
virtual bool GetParam(const wchar_t* param_name, ON_XMLVariant& param_value_out) const override;
protected:
virtual ON_XMLNode* ObtainChildNodeForWrite(ON_XMLNode& node, const wchar_t* param_name) const override;
virtual ON_XMLNode* FindNodeByNameProperty(const wchar_t* param_name) const;
};
// Class ON_XMLParamBlock is ON_XMLParameters with a built-in XML node.
class ON_CLASS ON_XMLParamBlock : public ON_XMLParameters
{
public:
ON_XMLParamBlock();
virtual ~ON_XMLParamBlock();
private:
ON_XMLRootNode _node;
ON__UINT64 _reserved;
};
ON_DECL bool ON_RunXMLTests(const wchar_t* test_folder);
////////////////////////////////////////////////////////////////////////////////////////////
//
// ON_RdkUserData is for internal use only and is not intended for use by SDK clients.
//
////////////////////////////////////////////////////////////////////////////////////////////
class ON_CLASS ON_RdkUserData : public ON_XMLUserData
{
private:
ON_OBJECT_DECLARE(ON_RdkUserData);
public:
ON_RdkUserData();
ON_RdkUserData(const ON_RdkUserData& ud);
virtual ~ON_RdkUserData();
const ON_RdkUserData& operator = (const ON_RdkUserData& ud);
static ON_UUID Uuid(void);
virtual void SetToDefaults(void) const override;
virtual bool GetDescription(ON_wString& s) override;
virtual bool Read(ON_BinaryArchive&) override;
virtual bool Write(ON_BinaryArchive&) const override;
virtual bool DeleteAfterWrite(const ON_BinaryArchive& archive, const ON_Object* parent_object) const override;
virtual bool DeleteAfterRead(const ON_BinaryArchive& archive, ON_Object* parent_object) const override;
virtual bool Transform(const ON_Xform& xform) override;
virtual void ReportVersionError(void) const override;
typedef bool (*ReadCallback)(ON_RdkUserData& ud);
typedef bool (*WriteCallback)(const ON_RdkUserData& ud);
typedef bool (*TransformCallback)(ON_RdkUserData& ud, const ON_Xform& xform);
static void SetCallbacks(ReadCallback rc, WriteCallback wc, TransformCallback tc);
};
///////////////////////////////////////////////////////////////////////////////////////////////////////
// This class is for internal RDK use only.
class ON_CLASS ON_RdkDocumentDefaults
{
public:
enum class ValueSets { All, New };
ON_RdkDocumentDefaults(int major_version, ValueSets vs, void* reserved=nullptr);
ON_RdkDocumentDefaults(const ON_RdkDocumentDefaults&) = delete;
virtual ~ON_RdkDocumentDefaults();
const ON_RdkDocumentDefaults& operator = (const ON_RdkDocumentDefaults&) = delete;
virtual const ON_XMLNode& Node(void) const;
virtual void CopyDefaultsTo(ON_XMLNode& dest) const;
// Emergency virtual function for future expansion.
virtual void* EVF(const wchar_t* func, void* data);
private:
virtual void CreateXML(void);
private:
ON_XMLRootNode _root;
const ValueSets _vs;
const int _major_version;
void* _reserved;
};
///////////////////////////////////////////////////////////////////////////////////////////////////////
extern ON_DECL ON_UUID ON_UuidDefaultMaterialInstance;
extern ON_DECL ON_UUID ON_UuidDefaultEnvironmentInstance;
#endif