From 3e4123b19753a5182e072b0c20bcb98d16513720 Mon Sep 17 00:00:00 2001 From: Michael Appleby Date: Wed, 29 Oct 2025 12:06:39 -0400 Subject: [PATCH 1/4] First draft --- source/presentation/4.0/index.md | 63 ++++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 3 deletions(-) diff --git a/source/presentation/4.0/index.md b/source/presentation/4.0/index.md index 3662c3942..5173a618e 100644 --- a/source/presentation/4.0/index.md +++ b/source/presentation/4.0/index.md @@ -1798,10 +1798,67 @@ A comment on a Canvas can target a non-rectangular area. This example uses a `S Annotations may alternately use a different type of Selector, called a `WktSelector`, to align the Annotation to a target region within a Canvas or Scene. -### A comment about something in a Model +### A comment about 3D sculpture + +A commenting annotation can also reference a Content Resource, such as a Model, within a Scene. This is accomplished by targeting the annotation that paints the resource into the Scene. In this example, the commenting annotation targets an annotation that paints a model of a portrait bust into a scene. + +```jsonc +{ + "@context": "http://iiif.io/api/presentation/4/context.json", + "id": "https://example.org/iiif/manifest/commenting/manifest/3", + "type": "Manifest", + "label": { "en": [ "1st Centry Roman portrait bust with comment" ] }, + "items": [ + { + "id": "https://example.org/iiif/scene/commenting/scene3", + "type": "Scene", + "items": [ + { + "id": "https://example.org/iiif/scene/commenting/scene3/painting-annotation-pages/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://example.org/iiif/scene/commenting/scene3/sculpture", + "type": "Annotation", + "motivation": [ "painting"] , + "label": { + "en": [ "A 1st century Roman portait bust." ] + }, + "body": { + "id": "https://example.org/iiif/scene/commenting/models/portait.gltf", + "type": "Model" + }, + "target": "https://example.org/iiif/scene/commenting/scene3" + } + ] + } + ] + } + ], + "annotations": [ + { + "id": "https://example.org/iiif/scene/commenting/scene3/commenting-annotation-pages/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://example.org/iiif/presentation/examples/commenting/anno/3", + "type": "Annotation", + "motivation": [ "commenting" ], + "body": { + "id": "https://example.org/iiif/presentation/examples/commenting/anno/3/comment1", + "type": "TextualBody", + "language": "en", + "format": "text/plain", + "value": "This marble portrait exemplifies the veristic tradition that dominated Roman Republican portraiture and persisted into the early Imperial period." + }, + "target": "https://example.org/iiif/scene/commenting/scene3/sculpture" + } + ] + } + ] +} +``` -(targets Scene) -Look at this scratch in the helmet > Todo: This is mostly copy-pasted from properties, is it needed here? Use in above example. From 209ec488e7389c05b4d262665f89cdc0f658b6a6 Mon Sep 17 00:00:00 2001 From: Michael Appleby Date: Wed, 29 Oct 2025 12:27:19 -0400 Subject: [PATCH 2/4] Next draft --- source/presentation/4.0/index.md | 34 +++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/source/presentation/4.0/index.md b/source/presentation/4.0/index.md index 5173a618e..829019c3b 100644 --- a/source/presentation/4.0/index.md +++ b/source/presentation/4.0/index.md @@ -1859,12 +1859,40 @@ A commenting annotation can also reference a Content Resource, such as a Model, } ``` +In some cases it is desirable to influence the client's positioning of the commenting annotation when rendered. This may be done to ensure that the annotation does not hide key visual elements or to ensure that the annotation itself is not obscured by resources painted in the container, such as 3D models. In these cases, the `position` property may be used to define the position where a TextualBody should be rendered. The following example shows a `position` that places the annotation at a specific coordinate within the Scene. The position is a `SpecificResource` that requires a `source` and `selector`. -> Todo: This is mostly copy-pasted from properties, is it needed here? Use in above example. +```jsonc + "body": { + "id": "https://example.org/iiif/presentation/examples/commenting/anno/3/comment1", + "type": "TextualBody", + "language": "en", + "format": "text/plain", + "value": "This marble portrait exemplifies the veristic tradition that dominated Roman Republican portraiture and persisted into the early Imperial period.", + "position": { + "type": "SpecificResource", + "source": [ + { + "id": "https://example.org/iiif/scene/commenting/scene3", + "type": "Scene" + } + ], + "selector": [ + { + "type": "PointSelector", + "x": 0.75, + "y": 1.5, + "z": 0.1 + } + ] + } + } +``` -It is important to be able to position the textual body of an annotation within the Container's space that the annotation also targets. For example, a description of part of an image in a Canvas should be positioned such that it does not obscure the image region itself and labels to be displayed as part of a Scene should not be rendered such that the text is hidden by the three dimensional geometry of the model. The positioning of the textual body in a container is accomplished through the `position` property, which has as a value a Specific Resource identifying the targeted container as the source and a selector defining how the textual body should be positioned in the targeted container. If this property is not supplied, then the client should do its best to ensure the content is visible to the user. + ## Linking Annotations From c8079bf51c46d09766fba3526f4bedb2948b7706 Mon Sep 17 00:00:00 2001 From: Michael Appleby Date: Wed, 29 Oct 2025 12:31:11 -0400 Subject: [PATCH 3/4] Collapse examples to one --- source/presentation/4.0/index.md | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/source/presentation/4.0/index.md b/source/presentation/4.0/index.md index 829019c3b..c008c423e 100644 --- a/source/presentation/4.0/index.md +++ b/source/presentation/4.0/index.md @@ -1802,6 +1802,8 @@ Annotations may alternately use a different type of Selector, called a `WktSelec A commenting annotation can also reference a Content Resource, such as a Model, within a Scene. This is accomplished by targeting the annotation that paints the resource into the Scene. In this example, the commenting annotation targets an annotation that paints a model of a portrait bust into a scene. +In some cases it is desirable to influence the client's positioning of the commenting annotation when rendered. This may be done to ensure that the annotation does not hide key visual elements or to ensure that the annotation itself is not obscured by resources painted in the container, such as 3D models. In these cases, the `position` property may be used to define the position where a TextualBody should be rendered. The example shows a `position` that places the annotation at a specific coordinate within the Scene. The position is a `SpecificResource` that requires a `source` and `selector`. + ```jsonc { "@context": "http://iiif.io/api/presentation/4/context.json", @@ -1844,24 +1846,6 @@ A commenting annotation can also reference a Content Resource, such as a Model, "id": "https://example.org/iiif/presentation/examples/commenting/anno/3", "type": "Annotation", "motivation": [ "commenting" ], - "body": { - "id": "https://example.org/iiif/presentation/examples/commenting/anno/3/comment1", - "type": "TextualBody", - "language": "en", - "format": "text/plain", - "value": "This marble portrait exemplifies the veristic tradition that dominated Roman Republican portraiture and persisted into the early Imperial period." - }, - "target": "https://example.org/iiif/scene/commenting/scene3/sculpture" - } - ] - } - ] -} -``` - -In some cases it is desirable to influence the client's positioning of the commenting annotation when rendered. This may be done to ensure that the annotation does not hide key visual elements or to ensure that the annotation itself is not obscured by resources painted in the container, such as 3D models. In these cases, the `position` property may be used to define the position where a TextualBody should be rendered. The following example shows a `position` that places the annotation at a specific coordinate within the Scene. The position is a `SpecificResource` that requires a `source` and `selector`. - -```jsonc "body": { "id": "https://example.org/iiif/presentation/examples/commenting/anno/3/comment1", "type": "TextualBody", @@ -1885,7 +1869,13 @@ In some cases it is desirable to influence the client's positioning of the comme } ] } - } + }, + "target": "https://example.org/iiif/scene/commenting/scene3/sculpture" + } + ] + } + ] +} ```