f3d 3.2.0rc2__cp310-cp310-macosx_11_0_arm64.whl → 3.3.0__cp310-cp310-macosx_11_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of f3d might be problematic. Click here for more details.

f3d/__init__.py CHANGED
@@ -33,7 +33,7 @@ __all__ = [name for name in dir(pyf3d) if not name.startswith("_")]
33
33
  # Automatically load plugins for the user
34
34
  Engine.autoload_plugins()
35
35
 
36
- __version__ = "3.2.0"
36
+ __version__ = "3.3.0"
37
37
 
38
38
 
39
39
  ################################################################################
f3d/__init__.pyi CHANGED
@@ -5,11 +5,14 @@ Fast and minimalist 3D viewer
5
5
  from __future__ import annotations
6
6
  from f3d.pyf3d import Camera
7
7
  from f3d.pyf3d import CameraState
8
+ from f3d.pyf3d import Color
8
9
  from f3d.pyf3d import Engine
9
10
  from f3d.pyf3d import Image
10
11
  from f3d.pyf3d import InteractionBind
11
12
  from f3d.pyf3d import Interactor
12
13
  from f3d.pyf3d import LibInformation
14
+ from f3d.pyf3d import LightState
15
+ from f3d.pyf3d import LightType
13
16
  from f3d.pyf3d import Log
14
17
  from f3d.pyf3d import Mesh
15
18
  from f3d.pyf3d import Options
@@ -23,13 +26,16 @@ import re as re
23
26
  import sys as sys
24
27
  import warnings as warnings
25
28
  from . import pyf3d
26
- __all__: list = ['Camera', 'CameraState', 'Engine', 'Image', 'InteractionBind', 'Interactor', 'LibInformation', 'Log', 'Mesh', 'Options', 'ReaderInformation', 'Scene', 'Utils', 'Window']
29
+ __all__: list = ['CAMERA_LIGHT', 'Camera', 'CameraState', 'Color', 'Engine', 'HEADLIGHT', 'Image', 'InteractionBind', 'Interactor', 'LibInformation', 'LightState', 'LightType', 'Log', 'Mesh', 'Options', 'ReaderInformation', 'SCENE_LIGHT', 'Scene', 'Utils', 'Window']
27
30
  def _add_deprecation_warnings():
28
31
  ...
29
32
  def _deprecated_decorator(f, reason):
30
33
  ...
31
34
  def _f3d_options_update(self, arg: typing.Union[typing.Mapping[str, typing.Any], typing.Iterable[tuple[str, typing.Any]]]) -> None:
32
35
  ...
36
+ CAMERA_LIGHT: pyf3d.LightType # value = <LightType.CAMERA_LIGHT: 2>
33
37
  F3D_ABSOLUTE_DLLS: list = list()
34
38
  F3D_RELATIVE_DLLS: list = list()
35
- __version__: str = '3.2.0'
39
+ HEADLIGHT: pyf3d.LightType # value = <LightType.HEADLIGHT: 1>
40
+ SCENE_LIGHT: pyf3d.LightType # value = <LightType.SCENE_LIGHT: 3>
41
+ __version__: str = '3.3.0'
f3d/lib/libf3d.dylib CHANGED
Binary file
Binary file
f3d/pyf3d.pyi CHANGED
@@ -2,9 +2,10 @@
2
2
  f3d library bindings
3
3
  """
4
4
  from __future__ import annotations
5
+ import f3d
5
6
  import os
6
7
  import typing
7
- __all__ = ['Camera', 'CameraState', 'Engine', 'Image', 'InteractionBind', 'Interactor', 'LibInformation', 'Log', 'Mesh', 'Options', 'ReaderInformation', 'Scene', 'Utils', 'Window']
8
+ __all__: list[str] = ['CAMERA_LIGHT', 'Camera', 'CameraState', 'Color', 'Engine', 'HEADLIGHT', 'Image', 'InteractionBind', 'Interactor', 'LibInformation', 'LightState', 'LightType', 'Log', 'Mesh', 'Options', 'ReaderInformation', 'SCENE_LIGHT', 'Scene', 'Utils', 'Window']
8
9
  class Camera:
9
10
  focal_point: tuple[float, float, float]
10
11
  position: tuple[float, float, float]
@@ -44,6 +45,24 @@ class CameraState:
44
45
  @typing.overload
45
46
  def __init__(self, position: tuple[float, float, float] = (0.0, 0.0, 1.0), focal_point: tuple[float, float, float] = (0.0, 0.0, 0.0), view_up: tuple[float, float, float] = (0.0, 1.0, 0.0), view_angle: float = 30.0) -> None:
46
47
  ...
48
+ class Color:
49
+ b: float
50
+ g: float
51
+ r: float
52
+ @typing.overload
53
+ def __init__(self) -> None:
54
+ ...
55
+ @typing.overload
56
+ def __init__(self, r: float, g: float, b: float) -> None:
57
+ ...
58
+ def from_tuple(self, arg0: tuple[float, float, float]) -> None:
59
+ """
60
+ Set color from a tuple of (r, g, b)
61
+ """
62
+ def to_tuple(self) -> tuple[float, float, float]:
63
+ """
64
+ Convert color to a tuple of (r, g, b)
65
+ """
47
66
  class Engine:
48
67
  options: Options
49
68
  @staticmethod
@@ -343,17 +362,238 @@ class InteractionBind:
343
362
  def format(self) -> str:
344
363
  ...
345
364
  class Interactor:
365
+ class BindingType:
366
+ """
367
+ Members:
368
+
369
+ CYCLIC
370
+
371
+ NUMERICAL
372
+
373
+ TOGGLE
374
+
375
+ OTHER
376
+ """
377
+ CYCLIC: typing.ClassVar[Interactor.BindingType] # value = <BindingType.CYCLIC: 0>
378
+ NUMERICAL: typing.ClassVar[Interactor.BindingType] # value = <BindingType.NUMERICAL: 1>
379
+ OTHER: typing.ClassVar[Interactor.BindingType] # value = <BindingType.OTHER: 3>
380
+ TOGGLE: typing.ClassVar[Interactor.BindingType] # value = <BindingType.TOGGLE: 2>
381
+ __members__: typing.ClassVar[dict[str, Interactor.BindingType]] # value = {'CYCLIC': <BindingType.CYCLIC: 0>, 'NUMERICAL': <BindingType.NUMERICAL: 1>, 'TOGGLE': <BindingType.TOGGLE: 2>, 'OTHER': <BindingType.OTHER: 3>}
382
+ def __eq__(self, other: typing.Any) -> bool:
383
+ ...
384
+ def __getstate__(self) -> int:
385
+ ...
386
+ def __hash__(self) -> int:
387
+ ...
388
+ def __index__(self) -> int:
389
+ ...
390
+ def __init__(self, value: int) -> None:
391
+ ...
392
+ def __int__(self) -> int:
393
+ ...
394
+ def __ne__(self, other: typing.Any) -> bool:
395
+ ...
396
+ def __repr__(self) -> str:
397
+ ...
398
+ def __setstate__(self, state: int) -> None:
399
+ ...
400
+ def __str__(self) -> str:
401
+ ...
402
+ @property
403
+ def name(self) -> str:
404
+ ...
405
+ @property
406
+ def value(self) -> int:
407
+ ...
408
+ class InputAction:
409
+ """
410
+ Members:
411
+
412
+ PRESS
413
+
414
+ RELEASE
415
+ """
416
+ PRESS: typing.ClassVar[Interactor.InputAction] # value = <InputAction.PRESS: 0>
417
+ RELEASE: typing.ClassVar[Interactor.InputAction] # value = <InputAction.RELEASE: 1>
418
+ __members__: typing.ClassVar[dict[str, Interactor.InputAction]] # value = {'PRESS': <InputAction.PRESS: 0>, 'RELEASE': <InputAction.RELEASE: 1>}
419
+ def __eq__(self, other: typing.Any) -> bool:
420
+ ...
421
+ def __getstate__(self) -> int:
422
+ ...
423
+ def __hash__(self) -> int:
424
+ ...
425
+ def __index__(self) -> int:
426
+ ...
427
+ def __init__(self, value: int) -> None:
428
+ ...
429
+ def __int__(self) -> int:
430
+ ...
431
+ def __ne__(self, other: typing.Any) -> bool:
432
+ ...
433
+ def __repr__(self) -> str:
434
+ ...
435
+ def __setstate__(self, state: int) -> None:
436
+ ...
437
+ def __str__(self) -> str:
438
+ ...
439
+ @property
440
+ def name(self) -> str:
441
+ ...
442
+ @property
443
+ def value(self) -> int:
444
+ ...
445
+ class InputModifier:
446
+ """
447
+ Members:
448
+
449
+ NONE
450
+
451
+ CTRL
452
+
453
+ SHIFT
454
+
455
+ CTRL_SHIFT
456
+ """
457
+ CTRL: typing.ClassVar[Interactor.InputModifier] # value = <InputModifier.CTRL: 1>
458
+ CTRL_SHIFT: typing.ClassVar[Interactor.InputModifier] # value = <InputModifier.CTRL_SHIFT: 3>
459
+ NONE: typing.ClassVar[Interactor.InputModifier] # value = <InputModifier.NONE: 0>
460
+ SHIFT: typing.ClassVar[Interactor.InputModifier] # value = <InputModifier.SHIFT: 2>
461
+ __members__: typing.ClassVar[dict[str, Interactor.InputModifier]] # value = {'NONE': <InputModifier.NONE: 0>, 'CTRL': <InputModifier.CTRL: 1>, 'SHIFT': <InputModifier.SHIFT: 2>, 'CTRL_SHIFT': <InputModifier.CTRL_SHIFT: 3>}
462
+ def __eq__(self, other: typing.Any) -> bool:
463
+ ...
464
+ def __getstate__(self) -> int:
465
+ ...
466
+ def __hash__(self) -> int:
467
+ ...
468
+ def __index__(self) -> int:
469
+ ...
470
+ def __init__(self, value: int) -> None:
471
+ ...
472
+ def __int__(self) -> int:
473
+ ...
474
+ def __ne__(self, other: typing.Any) -> bool:
475
+ ...
476
+ def __repr__(self) -> str:
477
+ ...
478
+ def __setstate__(self, state: int) -> None:
479
+ ...
480
+ def __str__(self) -> str:
481
+ ...
482
+ @property
483
+ def name(self) -> str:
484
+ ...
485
+ @property
486
+ def value(self) -> int:
487
+ ...
488
+ class MouseButton:
489
+ """
490
+ Members:
491
+
492
+ LEFT
493
+
494
+ MIDDLE
495
+
496
+ RIGHT
497
+ """
498
+ LEFT: typing.ClassVar[Interactor.MouseButton] # value = <MouseButton.LEFT: 0>
499
+ MIDDLE: typing.ClassVar[Interactor.MouseButton] # value = <MouseButton.MIDDLE: 2>
500
+ RIGHT: typing.ClassVar[Interactor.MouseButton] # value = <MouseButton.RIGHT: 1>
501
+ __members__: typing.ClassVar[dict[str, Interactor.MouseButton]] # value = {'LEFT': <MouseButton.LEFT: 0>, 'MIDDLE': <MouseButton.MIDDLE: 2>, 'RIGHT': <MouseButton.RIGHT: 1>}
502
+ def __eq__(self, other: typing.Any) -> bool:
503
+ ...
504
+ def __getstate__(self) -> int:
505
+ ...
506
+ def __hash__(self) -> int:
507
+ ...
508
+ def __index__(self) -> int:
509
+ ...
510
+ def __init__(self, value: int) -> None:
511
+ ...
512
+ def __int__(self) -> int:
513
+ ...
514
+ def __ne__(self, other: typing.Any) -> bool:
515
+ ...
516
+ def __repr__(self) -> str:
517
+ ...
518
+ def __setstate__(self, state: int) -> None:
519
+ ...
520
+ def __str__(self) -> str:
521
+ ...
522
+ @property
523
+ def name(self) -> str:
524
+ ...
525
+ @property
526
+ def value(self) -> int:
527
+ ...
528
+ class WheelDirection:
529
+ """
530
+ Members:
531
+
532
+ FORWARD
533
+
534
+ BACKWARD
535
+
536
+ LEFT
537
+
538
+ RIGHT
539
+ """
540
+ BACKWARD: typing.ClassVar[Interactor.WheelDirection] # value = <WheelDirection.BACKWARD: 1>
541
+ FORWARD: typing.ClassVar[Interactor.WheelDirection] # value = <WheelDirection.FORWARD: 0>
542
+ LEFT: typing.ClassVar[Interactor.WheelDirection] # value = <WheelDirection.LEFT: 2>
543
+ RIGHT: typing.ClassVar[Interactor.WheelDirection] # value = <WheelDirection.RIGHT: 3>
544
+ __members__: typing.ClassVar[dict[str, Interactor.WheelDirection]] # value = {'FORWARD': <WheelDirection.FORWARD: 0>, 'BACKWARD': <WheelDirection.BACKWARD: 1>, 'LEFT': <WheelDirection.LEFT: 2>, 'RIGHT': <WheelDirection.RIGHT: 3>}
545
+ def __eq__(self, other: typing.Any) -> bool:
546
+ ...
547
+ def __getstate__(self) -> int:
548
+ ...
549
+ def __hash__(self) -> int:
550
+ ...
551
+ def __index__(self) -> int:
552
+ ...
553
+ def __init__(self, value: int) -> None:
554
+ ...
555
+ def __int__(self) -> int:
556
+ ...
557
+ def __ne__(self, other: typing.Any) -> bool:
558
+ ...
559
+ def __repr__(self) -> str:
560
+ ...
561
+ def __setstate__(self, state: int) -> None:
562
+ ...
563
+ def __str__(self) -> str:
564
+ ...
565
+ @property
566
+ def name(self) -> str:
567
+ ...
568
+ @property
569
+ def value(self) -> int:
570
+ ...
571
+ BACKWARD: typing.ClassVar[Interactor.WheelDirection] # value = <WheelDirection.BACKWARD: 1>
572
+ CTRL: typing.ClassVar[Interactor.InputModifier] # value = <InputModifier.CTRL: 1>
573
+ CTRL_SHIFT: typing.ClassVar[Interactor.InputModifier] # value = <InputModifier.CTRL_SHIFT: 3>
574
+ CYCLIC: typing.ClassVar[Interactor.BindingType] # value = <BindingType.CYCLIC: 0>
575
+ FORWARD: typing.ClassVar[Interactor.WheelDirection] # value = <WheelDirection.FORWARD: 0>
576
+ LEFT: typing.ClassVar[Interactor.WheelDirection] # value = <WheelDirection.LEFT: 2>
577
+ MIDDLE: typing.ClassVar[Interactor.MouseButton] # value = <MouseButton.MIDDLE: 2>
578
+ NONE: typing.ClassVar[Interactor.InputModifier] # value = <InputModifier.NONE: 0>
579
+ NUMERICAL: typing.ClassVar[Interactor.BindingType] # value = <BindingType.NUMERICAL: 1>
580
+ OTHER: typing.ClassVar[Interactor.BindingType] # value = <BindingType.OTHER: 3>
581
+ PRESS: typing.ClassVar[Interactor.InputAction] # value = <InputAction.PRESS: 0>
582
+ RELEASE: typing.ClassVar[Interactor.InputAction] # value = <InputAction.RELEASE: 1>
583
+ RIGHT: typing.ClassVar[Interactor.WheelDirection] # value = <WheelDirection.RIGHT: 3>
584
+ SHIFT: typing.ClassVar[Interactor.InputModifier] # value = <InputModifier.SHIFT: 2>
585
+ TOGGLE: typing.ClassVar[Interactor.BindingType] # value = <BindingType.TOGGLE: 2>
346
586
  @typing.overload
347
- def add_binding(self, arg0: InteractionBind, arg1: str, arg2: str, arg3: typing.Callable[[], tuple[str, str]]) -> Interactor:
587
+ def add_binding(self, bind: InteractionBind, command: str, group: str, documentationCallback: typing.Callable[[], tuple[str, str]] = None, type: Interactor.BindingType = Interactor.BindingType.OTHER) -> Interactor:
348
588
  """
349
589
  Add a binding command
350
590
  """
351
591
  @typing.overload
352
- def add_binding(self, arg0: InteractionBind, arg1: typing.Sequence[str], arg2: str, arg3: typing.Callable[[], tuple[str, str]]) -> Interactor:
592
+ def add_binding(self, bind: InteractionBind, command: typing.Sequence[str], group: str, documentationCallback: typing.Callable[[], tuple[str, str]] = None, type: Interactor.BindingType = Interactor.BindingType.OTHER) -> Interactor:
353
593
  """
354
594
  Add binding commands
355
595
  """
356
- def add_command(self, arg0: str, arg1: typing.Callable[[list[str]], None]) -> Interactor:
596
+ def add_command(self, action: str, callback: typing.Callable[[list[str]], None], doc: tuple[str, str] | None = None, completionCallback: typing.Callable[[list[str]], typing.Sequence[str]] = None) -> Interactor:
357
597
  """
358
598
  Add a command
359
599
  """
@@ -369,6 +609,8 @@ class Interactor:
369
609
  ...
370
610
  def get_binding_documentation(self, arg0: InteractionBind) -> tuple[str, str]:
371
611
  ...
612
+ def get_binding_type(self, arg0: InteractionBind) -> Interactor.BindingType:
613
+ ...
372
614
  def get_binds(self) -> list[InteractionBind]:
373
615
  ...
374
616
  def get_binds_for_group(self, arg0: str) -> list[InteractionBind]:
@@ -429,10 +671,34 @@ class Interactor:
429
671
  """
430
672
  Toggle the animation
431
673
  """
432
- def trigger_command(self, arg0: str) -> bool:
674
+ def trigger_command(self, command: str, keep_comments: bool = True) -> bool:
433
675
  """
434
676
  Trigger a command
435
677
  """
678
+ def trigger_keyboard_key(self, arg0: Interactor.InputAction, arg1: str) -> Interactor:
679
+ """
680
+ Trigger a keyboard input
681
+ """
682
+ def trigger_mod_update(self, arg0: Interactor.InputModifier) -> Interactor:
683
+ """
684
+ Trigger a key modifier update
685
+ """
686
+ def trigger_mouse_button(self, arg0: Interactor.InputAction, arg1: Interactor.MouseButton) -> Interactor:
687
+ """
688
+ Trigger a mouse button
689
+ """
690
+ def trigger_mouse_position(self, arg0: float, arg1: float) -> Interactor:
691
+ """
692
+ Trigger a mouse position
693
+ """
694
+ def trigger_mouse_wheel(self, arg0: Interactor.WheelDirection) -> Interactor:
695
+ """
696
+ Trigger a mouse wheel
697
+ """
698
+ def trigger_text_character(self, arg0: int) -> Interactor:
699
+ """
700
+ Trigger a text character input
701
+ """
436
702
  class LibInformation:
437
703
  @property
438
704
  def build_date(self) -> str:
@@ -461,6 +727,60 @@ class LibInformation:
461
727
  @property
462
728
  def vtk_version(self) -> str:
463
729
  ...
730
+ class LightState:
731
+ color: Color
732
+ direction: tuple[float, float, float]
733
+ intensity: float
734
+ position: tuple[float, float, float]
735
+ positional_light: bool
736
+ switch_state: bool
737
+ type: LightType
738
+ @typing.overload
739
+ def __init__(self) -> None:
740
+ ...
741
+ @typing.overload
742
+ def __init__(self, type: LightType = f3d.LightType.SCENE_LIGHT, position: tuple[float, float, float] = (0.0, 0.0, 0.0), color: Color = ..., direction: tuple[float, float, float] = (1.0, 0.0, 0.0), positional_light: bool = False, intensity: float = 1.0, switch_state: bool = True) -> None:
743
+ ...
744
+ class LightType:
745
+ """
746
+ Members:
747
+
748
+ HEADLIGHT
749
+
750
+ CAMERA_LIGHT
751
+
752
+ SCENE_LIGHT
753
+ """
754
+ CAMERA_LIGHT: typing.ClassVar[LightType] # value = <LightType.CAMERA_LIGHT: 2>
755
+ HEADLIGHT: typing.ClassVar[LightType] # value = <LightType.HEADLIGHT: 1>
756
+ SCENE_LIGHT: typing.ClassVar[LightType] # value = <LightType.SCENE_LIGHT: 3>
757
+ __members__: typing.ClassVar[dict[str, LightType]] # value = {'HEADLIGHT': <LightType.HEADLIGHT: 1>, 'CAMERA_LIGHT': <LightType.CAMERA_LIGHT: 2>, 'SCENE_LIGHT': <LightType.SCENE_LIGHT: 3>}
758
+ def __eq__(self, other: typing.Any) -> bool:
759
+ ...
760
+ def __getstate__(self) -> int:
761
+ ...
762
+ def __hash__(self) -> int:
763
+ ...
764
+ def __index__(self) -> int:
765
+ ...
766
+ def __init__(self, value: int) -> None:
767
+ ...
768
+ def __int__(self) -> int:
769
+ ...
770
+ def __ne__(self, other: typing.Any) -> bool:
771
+ ...
772
+ def __repr__(self) -> str:
773
+ ...
774
+ def __setstate__(self, state: int) -> None:
775
+ ...
776
+ def __str__(self) -> str:
777
+ ...
778
+ @property
779
+ def name(self) -> str:
780
+ ...
781
+ @property
782
+ def value(self) -> int:
783
+ ...
464
784
  class Log:
465
785
  class VerboseLevel:
466
786
  """
@@ -603,16 +923,40 @@ class Scene:
603
923
  """
604
924
  Add a surfacic mesh from memory into the scene
605
925
  """
926
+ def add_light(self, light_state: LightState) -> int:
927
+ """
928
+ Add a light to the scene
929
+ """
606
930
  def animation_time_range(self) -> tuple[float, float]:
607
931
  ...
608
932
  def available_animations(self) -> int:
609
933
  ...
610
934
  def clear(self) -> Scene:
611
935
  ...
936
+ def get_light(self, index: int) -> LightState:
937
+ """
938
+ Get a light from the scene
939
+ """
940
+ def get_light_count(self) -> int:
941
+ """
942
+ Get the number of lights in the scene
943
+ """
612
944
  def load_animation_time(self, arg0: float) -> Scene:
613
945
  ...
946
+ def remove_all_lights(self) -> Scene:
947
+ """
948
+ Remove all lights from the scene
949
+ """
950
+ def remove_light(self, index: int) -> Scene:
951
+ """
952
+ Remove a light from the scene
953
+ """
614
954
  def supports(self, arg0: os.PathLike[str]) -> bool:
615
955
  ...
956
+ def update_light(self, index: int, light_state: LightState) -> Scene:
957
+ """
958
+ Update a light in the scene
959
+ """
616
960
  class Utils:
617
961
  class KnownFolder:
618
962
  """
@@ -672,6 +1016,9 @@ class Utils:
672
1016
  @staticmethod
673
1017
  def text_distance(arg0: str, arg1: str) -> int:
674
1018
  ...
1019
+ @staticmethod
1020
+ def tokenize(str: str, keep_comments: bool = True) -> list[str]:
1021
+ ...
675
1022
  class Window:
676
1023
  class Type:
677
1024
  """
@@ -774,3 +1121,6 @@ class Window:
774
1121
  @property
775
1122
  def type(self) -> Window.Type:
776
1123
  ...
1124
+ CAMERA_LIGHT: LightType # value = <LightType.CAMERA_LIGHT: 2>
1125
+ HEADLIGHT: LightType # value = <LightType.HEADLIGHT: 1>
1126
+ SCENE_LIGHT: LightType # value = <LightType.SCENE_LIGHT: 3>
@@ -1,5 +1,5 @@
1
1
  {
2
- "description" : "Assimp support (version 5.4.3)",
2
+ "description" : "Assimp support (version 6.0.2)",
3
3
  "name" : "assimp",
4
4
  "readers" :
5
5
  [
@@ -1,5 +1,5 @@
1
1
  {
2
- "description" : "OpenCASCADE support (version 7.9.0)",
2
+ "description" : "OpenCASCADE support (version 7.9.1)",
3
3
  "name" : "occt",
4
4
  "readers" :
5
5
  [
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: f3d
3
- Version: 3.2.0rc2
3
+ Version: 3.3.0
4
4
  Summary: F3D, a fast and minimalist 3D viewer
5
5
  Keywords: vtk,animations,fbx,step,stl,gltf,pbr,raytracing,rendering
6
6
  Author: Michael Migliore, Mathieu Westphal
@@ -36,21 +36,21 @@ It is fully controllable from the command line and support configuration files.
36
36
 
37
37
  F3D also contains the libf3d, a simple library to render meshes, with a C++17 API, Python Bindings, and experimental Java and Javascript bindings.
38
38
 
39
- <img src="https://media.githubusercontent.com/media/f3d-app/f3d-media/95b76c22d927bb24759bbe0246b6260121f2933b/media/typical.png" width="640">
39
+ <img src="https://media.githubusercontent.com/media/f3d-app/f3d-media/95b76c22d927bb24759bbe0246b6260121f2933b/media/typical.png" width="640" />
40
40
 
41
41
  _A typical render by F3D_
42
42
 
43
- <img src="https://user-images.githubusercontent.com/3129530/194735261-dd6f1c1c-fa57-47b0-9d27-f735d18ccd5e.gif" width="640">
43
+ <img src="https://user-images.githubusercontent.com/3129530/194735261-dd6f1c1c-fa57-47b0-9d27-f735d18ccd5e.gif" width="640" />
44
44
 
45
45
  _Animation of a glTF file within F3D_
46
46
 
47
- <img src="https://user-images.githubusercontent.com/3129530/194735272-5bcd3e7c-a333-41f5-8066-9b0bec9885e8.png" width="640">
47
+ <img src="https://user-images.githubusercontent.com/3129530/194735272-5bcd3e7c-a333-41f5-8066-9b0bec9885e8.png" width="640" />
48
48
 
49
49
  _A direct scalars render by F3D_
50
50
 
51
- See the [gallery](doc/GALLERY.md) for more images, take a look at the [changelog](doc/CHANGELOG.md) or go to the [install guide](doc/user/INSTALLATION.md) to download and install F3D!
51
+ See the [gallery](https://f3d.app/gallery) for more images, take a look at the [changelog](doc/CHANGELOG.md) or go to the [download page](https://f3d.app/download) to download and install F3D!
52
52
 
53
- You can even use F3D directly in your [browser](https://f3d.app/web)!
53
+ You can even use F3D directly in your [browser](https://f3d.app/viewer)!
54
54
 
55
55
  If you need any help or want to discuss with other F3D users and developers, head over to our [discord](https://discord.f3d.app).
56
56
 
@@ -68,22 +68,30 @@ See the [Quickstart Guide](doc/user/QUICKSTART.md) for more information about ge
68
68
 
69
69
  # Documentation
70
70
 
71
- - To get started, please take a look at the [user documentation](doc/user/README_USER.md).
71
+ - To get started, please take a look at the [user documentation](doc/user/QUICKSTART.md).
72
72
  - If you need any help, are looking for a feature or found a bug, please open an [issue](https://github.com/f3d-app/f3d/issues).
73
- - If you want to use the libf3d, please take a look at its [documentation](doc/libf3d/README_LIBF3D.md).
74
- - If you want to build F3D, please take a look at the [developer documentation](doc/dev/README_DEV.md).
73
+ - If you want to use the libf3d, please take a look at its [documentation](doc/libf3d/OVERVIEW.md).
74
+ - If you want to build F3D, please take a look at the [contribution guide](CONTRIBUTING.md).
75
75
 
76
76
  # Support
77
77
 
78
78
  F3D needs your help!
79
79
 
80
80
  If you can, please consider sponsoring F3D. Even a small donation would help us offset the recurring maintenance costs.
81
- With enough sponsors we would be able to make F3D grow faster and stronger! Read more about it [here](doc/user/SPONSORING.md).
81
+ With enough sponsors we would be able to make F3D grow faster and stronger! Read more about it [here](https://f3d.app/thanks).
82
82
 
83
- If you are an industry user of F3D and want to make sure it can keep growing and being maintained, [please reach out](doc/user/SPONSORING.md#industry-sponsors)!
83
+ If you are an industry user of F3D and want to make sure it can keep growing and being maintained, [please reach out](https://f3d.app/thanks)!
84
84
 
85
85
  In any case, please star it on github and share the word about it!
86
86
 
87
+ ## Sponsors
88
+
89
+ Many thanks to our sponsors for supporting F3D
90
+
91
+ <a href="https://nlnet.nl/project/F3D/" target="_blank"><img src="https://nlnet.nl/image/logos/NGI0Core_tag.svg" height="45"/></a>
92
+ <a href="https://www.lambdatest.com/?utm_source=f3d&utm_medium=sponsor" target="_blank"><img src="https://www.lambdatest.com/blue-logo.png" height="45" /></a>
93
+ <a href="https://www.opendronemap.org/" target="_blank"><img src="https://f3d.app/assets/images/opendronemap-95d4ad6e24c091a06ec00e1828e1eb38.png" height="45" /></a>
94
+
87
95
  # Vision
88
96
 
89
97
  As a minimalist 3D viewer F3D aims to:
@@ -105,7 +113,7 @@ but there is no plan to:
105
113
 
106
114
  # Contributing
107
115
 
108
- F3D as a community-driven, inclusive and beginner-friendly project. We love to see how the project is growing thanks to the contributions from the community. We would love to see your face in the list below! If you want to contribute to F3D, you are very welcome to! Take a look at our [contribution documentation](CONTRIBUTING.md), [governance documentation](doc/dev/GOVERNANCE.md) and [code of conduct](CODE_OF_CONDUCT.md).
116
+ F3D as a community-driven, inclusive and beginner-friendly project. We love to see how the project is growing thanks to the contributions from the community. We would love to see your face in the list below! If you want to contribute to F3D, you are very welcome to! Take a look at our [contribution documentation](CONTRIBUTING.md), [governance documentation](https://f3d.app/dev/GOVERNANCE) and [code of conduct](CODE_OF_CONDUCT.md).
109
117
 
110
118
  <a href="https://github.com/f3d-app/f3d/graphs/contributors">
111
119
  <img src="https://contrib.rocks/image?repo=f3d-app/f3d" />
@@ -118,5 +126,5 @@ F3D was initially created by [Kitware SAS](https://www.kitware.eu/) and is relyi
118
126
  # License
119
127
 
120
128
  F3D can be used and distributed under the 3-Clause BSD License, see the [license](LICENSE.md).
121
- F3D integrate the sources of other libraries and tools, all under permissive licenses, see the [third party licenses](doc/THIRD_PARTY_LICENSES.md).
129
+ F3D integrate the sources of other libraries and tools, all under permissive licenses, see the [third party licenses](THIRD_PARTY_LICENSES.md).
122
130
  F3D packages relies on other libraries and tools, all under permissive licenses, all listed in the respective packages.
@@ -0,0 +1,17 @@
1
+ f3d/pyf3d.pyi,sha256=6bN42LJGSBNDN9WkDQP-18Nlg-Evp6QNe8EcC2zbJOk,38344
2
+ f3d/__init__.pyi,sha256=6-PnhQR8B_gyXUe6PDdPx1x11_aRIO79ZWO2qpCrlHM,1512
3
+ f3d/__init__.py,sha256=UWe8SwC4RAqKK3GrdbgcXJrodQs3FC4wFHBb0DcQX7o,2409
4
+ f3d/pyf3d.cpython-310-darwin.so,sha256=Cf33YXljU9Gv45v5Oerwp2ROQm5tgkRXhY9BTPXG9ro,549728
5
+ f3d/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ f3d/lib/libf3d.dylib,sha256=8UITkBPFcwc1vxARTxtdgtP4HFgf5BgXLQbhv8tHn7I,116180096
7
+ f3d/share/f3d/plugins/alembic.json,sha256=Rteh8KuTV_zzoH8pEf5WWkVuKiwkxoX9CH1x3UCFo8M,357
8
+ f3d/share/f3d/plugins/occt.json,sha256=q_bo7jnkZOsh448r-wn3Ub1gqfMxgyzojuvRqqdv__Y,1081
9
+ f3d/share/f3d/plugins/assimp.json,sha256=KUftB-Zh8qjfwmGaKzubGC58-2mziUvi9cp1ZSOGOjk,1431
10
+ f3d/share/f3d/plugins/native.json,sha256=3oj5xRl3c1vnxPxfkaDQheO4FsVeD1QyodXs5TX4s_8,5063
11
+ f3d/share/f3d/plugins/hdf.json,sha256=Q-ML3rCSuf9VUwAMYylD_SbipcNkfPhn7pjgS-Tjj_Q,837
12
+ f3d/share/f3d/plugins/draco.json,sha256=6OTOWoaOfVLok6BrBbw8XjaRXtT0Nj4UdUUsUsXOWqE,605
13
+ f3d-3.3.0.dist-info/RECORD,,
14
+ f3d-3.3.0.dist-info/WHEEL,sha256=ARvpZEbgFu-cAxZINNemqHWSYlsYgHkQqksAmhPJqFw,141
15
+ f3d-3.3.0.dist-info/METADATA,sha256=W72AD-zjN9GUyxMAr-ytubH6d2ek-DrnmHpESlXGpr0,7693
16
+ f3d-3.3.0.dist-info/licenses/LICENSE.md,sha256=7rGVRbCXVnM6RxB2ttb77TLQTyyn8bQVJeP-WBjQfLw,1571
17
+ f3d-3.3.0.dist-info/licenses/THIRD_PARTY_LICENSES.md,sha256=Vk3UD1Urd5Zij1gapdGgLmxiiqXcdb2pGLXMAFh16GQ,12443
@@ -1,5 +1,6 @@
1
1
  Wheel-Version: 1.0
2
- Generator: scikit-build-core 0.11.5
2
+ Generator: scikit-build-core 0.11.6
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp310-cp310-macosx_11_0_arm64
5
+ Generator: delocate 0.13.0
5
6
 
@@ -1,17 +0,0 @@
1
- f3d-3.2.0rc2.dist-info/RECORD,,
2
- f3d-3.2.0rc2.dist-info/WHEEL,sha256=nFSIsNnUJn_8RF-FUhBaXtCep1yHZRCxSkBom4ebATM,114
3
- f3d-3.2.0rc2.dist-info/METADATA,sha256=LrYPMIjx460biHyf8u2-olNaKp3n-tekJSOwEjrI_Z8,7190
4
- f3d-3.2.0rc2.dist-info/licenses/LICENSE.md,sha256=7rGVRbCXVnM6RxB2ttb77TLQTyyn8bQVJeP-WBjQfLw,1571
5
- f3d-3.2.0rc2.dist-info/licenses/doc/THIRD_PARTY_LICENSES.md,sha256=Vk3UD1Urd5Zij1gapdGgLmxiiqXcdb2pGLXMAFh16GQ,12443
6
- f3d/pyf3d.pyi,sha256=RbjTN1hkjKKTD51OOW4nxOmO-S8wzi0ajVuDSvmkLP8,25492
7
- f3d/__init__.pyi,sha256=tSUhhEimW_GDaa6XYYi5O95-EAZjti3AbPvqZDOPx0A,1140
8
- f3d/__init__.py,sha256=58ratHNOvqRdrc5eq0hPRJjEpRWPymuCOohoSmLR3tw,2409
9
- f3d/pyf3d.cpython-310-darwin.so,sha256=Ipk8dqLb_-0TJ3fn8xciym63XCDsGnoWLhPc_PdGHW4,483056
10
- f3d/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- f3d/lib/libf3d.dylib,sha256=TY-doVcZlUO1CM2bFk5-0pUZRNFbrSX-Fb7MPKrEAYg,98119744
12
- f3d/share/f3d/plugins/alembic.json,sha256=Rteh8KuTV_zzoH8pEf5WWkVuKiwkxoX9CH1x3UCFo8M,357
13
- f3d/share/f3d/plugins/occt.json,sha256=p5U9VTksYIT5K49pzy_Puj2UqrF9qocgEPTesnplazw,1081
14
- f3d/share/f3d/plugins/assimp.json,sha256=4fTrhIq0iIiopTJhYesspph3myD-yXm40i50HSpptYQ,1431
15
- f3d/share/f3d/plugins/native.json,sha256=3oj5xRl3c1vnxPxfkaDQheO4FsVeD1QyodXs5TX4s_8,5063
16
- f3d/share/f3d/plugins/hdf.json,sha256=Q-ML3rCSuf9VUwAMYylD_SbipcNkfPhn7pjgS-Tjj_Q,837
17
- f3d/share/f3d/plugins/draco.json,sha256=6OTOWoaOfVLok6BrBbw8XjaRXtT0Nj4UdUUsUsXOWqE,605