f3d 3.2.0rc2__cp39-cp39-macosx_11_0_arm64.whl → 3.3.0rc1__cp39-cp39-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 +1 -1
- f3d/__init__.pyi +8 -2
- f3d/lib/libf3d.dylib +0 -0
- f3d/pyf3d.cpython-39-darwin.so +0 -0
- f3d/pyf3d.pyi +355 -5
- f3d/share/f3d/plugins/assimp.json +1 -1
- f3d/share/f3d/plugins/occt.json +1 -1
- {f3d-3.2.0rc2.dist-info → f3d-3.3.0rc1.dist-info}/METADATA +21 -13
- f3d-3.3.0rc1.dist-info/RECORD +17 -0
- {f3d-3.2.0rc2.dist-info → f3d-3.3.0rc1.dist-info}/WHEEL +1 -1
- f3d-3.2.0rc2.dist-info/RECORD +0 -17
- {f3d-3.2.0rc2.dist-info → f3d-3.3.0rc1.dist-info}/licenses/LICENSE.md +0 -0
- {f3d-3.2.0rc2.dist-info/licenses/doc → f3d-3.3.0rc1.dist-info/licenses}/THIRD_PARTY_LICENSES.md +0 -0
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.
|
|
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
|
-
|
|
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
|
f3d/pyf3d.cpython-39-darwin.so
CHANGED
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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>
|
f3d/share/f3d/plugins/occt.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: f3d
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.3.0rc1
|
|
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](
|
|
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/
|
|
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/
|
|
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/
|
|
74
|
-
- If you want to build F3D, please take a look at the [
|
|
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](
|
|
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](
|
|
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](
|
|
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](
|
|
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/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
+
f3d/pyf3d.cpython-39-darwin.so,sha256=RceCNP7LugcpRDrpL6Ft0hEuRaii_NhpbNXEIWrWr-Y,549696
|
|
6
|
+
f3d/lib/libf3d.dylib,sha256=cWqhySNZJ5kXKrrUTmV7TV2iHxuwUbxPy_CGAFu1V4E,116180080
|
|
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.0rc1.dist-info/RECORD,,
|
|
14
|
+
f3d-3.3.0rc1.dist-info/WHEEL,sha256=ZF0EG4evfIAXWc5yWRjXEB82QuVPxkr7Vob35_6t9b0,112
|
|
15
|
+
f3d-3.3.0rc1.dist-info/METADATA,sha256=480oJ3IyunCPry0Nb-MZpAG8_9uo2UTi7j5HOvopgh4,7696
|
|
16
|
+
f3d-3.3.0rc1.dist-info/licenses/LICENSE.md,sha256=7rGVRbCXVnM6RxB2ttb77TLQTyyn8bQVJeP-WBjQfLw,1571
|
|
17
|
+
f3d-3.3.0rc1.dist-info/licenses/THIRD_PARTY_LICENSES.md,sha256=Vk3UD1Urd5Zij1gapdGgLmxiiqXcdb2pGLXMAFh16GQ,12443
|
f3d-3.2.0rc2.dist-info/RECORD
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
f3d-3.2.0rc2.dist-info/RECORD,,
|
|
2
|
-
f3d-3.2.0rc2.dist-info/WHEEL,sha256=Bp5NfjQuMM_4-YV1MlnhqEfxPV5ySj3kUtyINz66rJc,112
|
|
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/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
-
f3d/pyf3d.cpython-39-darwin.so,sha256=lhF9XP50i_DtuHvVdI1lbuJZNIUV9d9cscinG3EfobE,483088
|
|
11
|
-
f3d/lib/libf3d.dylib,sha256=wbndAb_1eZwmg3JSiMmqdX232F8muCVjq6EFTsiCN14,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
|
|
File without changes
|
{f3d-3.2.0rc2.dist-info/licenses/doc → f3d-3.3.0rc1.dist-info/licenses}/THIRD_PARTY_LICENSES.md
RENAMED
|
File without changes
|