Coordinate > Issues

Issue Pins

Shows every open issue that has a location as a pin in the view, labelled with its number, type and title. Each pin stands about a person tall, whatever the size of the model. The pins follow edits and come back when another model opens.

Tab and panelCoordinate > Issues
KindToggle button
Live whenA model is open

Status

Launched Ran inside Navisworks at least once with no error logged; nobody checked the result yet.

Ran headless under pynavis run against a sample model; no selection: ran to the end: 'Issue pins are on'; result not checked by a person.

Recorded on 2026-10-05. The evidence is a line in a pyNavis log.

The public ask

No public source is on record for this tool.

Events it listens to

It needs these Navisworks event hooks, so installing it also copies the shared hooks folder:

  • doc-closed
  • doc-opened

Files

Paths are relative to the Playground.extension folder.

  • Coordinate.tab/Issues.panel/Issue_Pins.toggle/bundle.yaml
  • Coordinate.tab/Issues.panel/Issue_Pins.toggle/icon.dark.png
  • Coordinate.tab/Issues.panel/Issue_Pins.toggle/icon.off.dark.png
  • Coordinate.tab/Issues.panel/Issue_Pins.toggle/icon.off.png
  • Coordinate.tab/Issues.panel/Issue_Pins.toggle/icon.on.dark.png
  • Coordinate.tab/Issues.panel/Issue_Pins.toggle/icon.on.png
  • Coordinate.tab/Issues.panel/Issue_Pins.toggle/icon.png
  • Coordinate.tab/Issues.panel/Issue_Pins.toggle/icon.small.dark.png
  • Coordinate.tab/Issues.panel/Issue_Pins.toggle/icon.small.png
  • Coordinate.tab/Issues.panel/Issue_Pins.toggle/script.py

Install

  1. Only this tool. In Navisworks, click pyNavis > Playground, search for Issue Pins, tick it and click Install.
  2. The whole extension. Download Playground.extension.zip, unzip it, put the Playground.extension folder in %APPDATA%\pyNavis\extensions\, and click pyNavis > Reload. Issue Pins is on the Coordinate tab, Issues panel.

You need pyNavis 1.3.0 or later.

Tried it? Tell us whether it worked or not. That report is what moves a tool up the status ladder.

Report

Source

The tool's own files, word for word as published in pynavis/Playground. Paths are relative to the Playground.extension folder.

script.py

The script that runs on a click.

Coordinate.tab/Issues.panel/Issue_Pins.toggle/script.py View on GitHub
# -*- coding: utf-8 -*-
"""Shows every open issue with a location as a pin in the view, or hides the pins.

On: pins are drawn with pynavis.overlay (one item per issue, tagged
'playground-issues:<id>'), each a real 1.2 m tall whatever the model's units; a session
flag makes hk_issuepins redraw them when another document opens, and an issue listener
redraws them after any edit made in this session. Off: every issue pin in the view is
cleared and both stop.

Pins that are on, by the button or by the session flag, decide what a click does, so a
click on Hide Pins always hides: the two can never disagree for longer than one click.
"""
from pynavis import overlay, script, toast

from namo import issueapi, issuestore


def _overlay_redraw():
    """Redraws the overlay through namo.overlayfix, so labels land on their points."""
    from namo import overlayfix
    return overlayfix.redraw()


def run():
    if script.get_toggle_state() or issueapi.pins_on():
        issueapi.unwatch_pins()
        issueapi.set_pins_on(False)
        issueapi.clear_pins()
        script.set_toggle_state(False)
        toast.info('Issue pins hidden')
        return
    doc = issuestore.active_doc()
    if doc is None or not issueapi.has_model(doc):
        script.set_toggle_state(False)
        toast.info('No model open', 'Open the model the issues belong to, then show the pins.')
        return
    store = issuestore.for_doc(doc)
    rows = store.list()
    if rows:
        count = issueapi.draw_pins(rows, doc)
    else:
        count = 0
        issueapi.clear_pins()
    if not _overlay_redraw():
        # Nothing can be drawn, so the button stays off rather than claim pins are showing.
        script.set_toggle_state(False)
        toast.error('Could not show the issue pins',
                    'The pyNavis view overlay is not loaded. Restart Navisworks, then try again.')
        return
    issueapi.set_pins_on(True)
    issueapi.watch_pins()
    script.set_toggle_state(True)
    if count:
        toast.success('%s issue pin%s shown' % ('{:,}'.format(count), '' if count == 1 else 's'),
                      'Open and in progress issues with a location.')
    elif not store.saved:
        toast.info('Issue pins are on', 'Save the model, then raise issues: their pins appear here.')
    elif not rows:
        toast.info('Issue pins are on', 'No issues yet. Raise one with Issue Stamps and its pin '
                   'appears here.')
    else:
        toast.info('Issue pins are on', 'No open issue has a location yet. Use Set pin in the '
                   'Issues panel, or Issue Stamps.')


run()

Library modules this tool uses

From the shared namo library, which installs with every tool. Each name opens the module on GitHub.

  • namo.issueapiThe Navisworks half of the issue tools: capture a view as issue material, go back to it, draw issue pins, pick stamp points, and find BCF components in the model.
  • namo.issuestoreWhere Playground issues live: one record per issue, per model file, in the data mode namo.config chooses, plus the session events every issue view listens to.
  • namo.overlayfixKeeps pynavis.overlay labels on their points, whichever way up the view counts pixels.

bundle.yaml

The bundle contract: the keys pyNavis reads for this tool.

Coordinate.tab/Issues.panel/Issue_Pins.toggle/bundle.yaml View on GitHub
title: Issue\nPins
title_on: Hide\nPins
tooltip: Shows every open issue that has a location as a pin in the view, labelled with its number, type and title. Each pin stands about a person tall, whatever the size of the model. The pins follow edits and come back when another model opens.
tooltip_on: Takes the issue pins out of the view.
context: doc