Skip to content

Release Notes

2025-0-1

  • Bug fixes:

    • Modifying a door swing created with Python API could lead to a crash. This has been fixed now.
  • New content in the documentation

    • In this new paragraph you will learn how to process handles in an interactor PythonPart
    • In this new paragraph you will learn more on how dependency packages are handled in the Python environment of ALLPLAN, and in this you will learn more about the environment itself
    • In this new paragraph you can learn more on how to make the entire palette content dynamic.

2025-0-0

RC-3

  • The Python version was upgraded to 3.12.6
  • New method GetPlacementMatrix in BarPlacement class allows to determine the position of the first rebar in a linear or rotational placement. This allows to determine the entire geometry of a rebar placement in global coordinate system.
  • Bug fixes:

    • In the case of multiple country-specific office standards (e.g. Std.eng\, Std.deu\, Std.cze, etc...), the Allep installer now installs the plugin in the current directory.

      Warning

      Action bar icons are not displayed correctly when the plugin is installed in one of these directories. This will be fixed in future versions.

    • It is now possible to create dynamic picture combo box by filling the tag <ValueTextList> from the script using ControlPropertiesUtil.set_value_text_list

    • Initializing a list parameter with an asterisk, like <Value>["Foo"]*5<Value> is possible again.
    • It is now possible to modify parameters of an interactor PythonPart using ModifyPythonPartParameterUtil

RC-2

  • It is now possible to get the sub-position number from a polygonal rebar placement with the method GetBarPositionData. The placement must be unlinked beforehand.
  • Bug fixes:

    • Creating a general opening in an entity-based wall (e.g. with spline axis) was causing ALLPLAN to crash.
    • The method Vector2D.Orthogonal is now returning a new object (orthogonal vector). Before the fix, it mutated the vector and returned a reference to it.

RC-1

  • Minor bug fixes:

    • When a handle is controlling a list parameter, the values are now recalculated correctly after moving the handle
    • HandleModificationService is now working correctly, even if the build_ele_list contains more than one BuildingElement

Beta-2

  • New article about connecting (associating) a PythonPart with another element. Learn more here.
  • New article about ALLPLAN elements. Learn more here.
  • Minor bug fixes:

    • After installing an Allep-Plugin by drag-and-drop, the installer war still running in the background. This is fixed now.
    • Installing an Allep-package into USR wasn't generating any icons on the Actionbar. This is now fixed.
    • Connected PythonPart was not updated in case change of plane reference. This has been fixed.
    • It is now possible to create a recess with an opening part in it.
    • In some cases, calling GetElements().

Beta-1

  • The tools in the SDK were updated:

    • There is a new extension for VS-Code available in the Visual Studio Marketplace: PythonPartTools .
    • Tool for debugging was made more intuitive. Learn more in this article.
    • For beginners: it is easier to start coding. Learn more in the getting started article.
  • The Python version was upgraded to 3.12.4

  • Improvements to Allep Installer:

    • The user can now install your plugin by drag-and-drop
    • The user can now update your plugin by reinstalling it
    • You can place a hard separator into the Actionbar
    • You can now organize your files into sub-directories
    • The unexpected behavior of the Actionbar, when more than 13 plugins are installed, is now fixed.
  • The examples are now available for download in a GitHub repository and are no longer delivered with ALLPLAN. You can access the repository anytime by clicking the icon in the navigation bar.

  • Reloader is no more delivered with ALLPLAN. As a developer, you have to install the SDK to use it. Learn here why.
  • When the PythonPart is implemented as script object, the BaseScriptObject now inherits from BaseScriptObjectData which gives you access to much more data inside the script object class. Learn more here.
  • requests - a popular package for easy implementation of HTTP requests - is now delivered with ALLPLAN.
  • The palette can be now refreshed after on_control_event. The contract has been changed in both BaseScriptObject as well as in [BaseInteractor.BaseInteractor.on_control_event] and expects now a bool return value.

WIP-6

  • The BarPlacement object can now be read from a BaseElementAdapter which enables you to access the data of existing rebar placements specific to linear, polygonal and rotational types of placements, such as: spacing, bending shape being placed, its shape polygon, bending rollers etc.
  • With the new utility ModifyPythonPartParameterUtil it is now easier to modify and recalculate existing PythonParts with a script. Learn more here.
  • New API functionality for creating flush pier. See documentation of the FlushPierElement.
  • Improvements to the Allep Installer:

    • Installation to STD and USR is now possible
    • Keys task-area and tools are now optional
  • You can now place a ComboBox with an editable text box in the property palette. Learn more here.

  • New value types of parameter:

  • With the following new utility classes you can more easily create sloped openings inside architectural elements, like walls or slabs by providing just the volume (BRep or a polyhedron) that cuts out the wall or slab.

    The classes calculate the bottom and top plane reference and a polygon in the ground view necessary to create a recess or niche.

  • Instructions on how to handle the property palette inside an interactor PythonPart. Learn more here

WIP-5

  • The Allplan Extension Package (Allep) allows to pack multiple PythonParts into one plugin and ship it to the end-user more easily.
  • Newly exposed PolyhedronUtil offers new useful methods for processing a polyhedron geometry, for example repairing an invalid geometry.
  • New API functionality for creating joints. See documentation of the JointElement.
  • It is now possible to modify the display name of a PythonPart. Learn more here.
  • New service in the NemAll_Python_BaseElements, the ZoomService, allows you to zoom to a specific element(s) inside the viewport(s). Check out the example ZoomService ( PYP | PY)

  • The new progress bar is accessible via the class ProgressBar in the NemAll_Python_Utility module.

    Warning

    Methods referring to the old progress bar has been deprecated. Refer to the API reference, to see what methods to use to access the new progress bar.

  • The creation of PythonPart groups has been simplified and documented. Learn more in this article

  • The handling of slab openings with API has been improved:

    • The read access is granted
    • Placing opening symbols inside the opening is possible

    See the examples SlabOpening ( PYP | PY) and ModifySlabOpening ( PYP | PY)

  • The polyhedron geometry validation when calling the DrawElementPreview is now disabled by default, which increases the performance during preview draw of complex geometries. In case of unexpected results, this validation can be turned back on by calling SetValidateGeometry

  • Articles about the key components of the PythonParts framework: the palette and the script has been completely refactored.

  • New type of contract is available in the PythonParts framework: beside a standard PythonPart and an interactor you can now create a script object PythonPart

WIP-4

  • New API functionality for creating polygonal niche or recess. See documentation of the GeneralOpeningElement
  • New extensive articles about accessing and modifying elements inside ALLPLAN model.
  • It is now possible to provide a library dialog for selecting a smart symbol or a SmartPart. Learn more here.
  • It is now possible to specify maximum and minimum values for point and vector parameters. Learn more here.
  • It is now possible to show some controls from a row on the left side of the palette. Learn more here.
  • It is now easier to provide an info box with a more extensive description for a parameter in the palette. Learn more here.
  • The UX when using list parameters can now be improved by using a new parameter type, the MultiIndex. Learn more here.
  • New parameter type DynamicList enables the user to append and delete items from the list. Learn more here
  • The alignment of the text parameter can now be controlled with the new tag <Orientation>. Learn more here
  • It is now possible to place pictures in the palette with picture parameter not only a path to a .png file, but also ALLPLAN internal resource ID or an option of a dedicated enumeration classes. Learn more here
  • A picture from ALLPLAN's image resources can now be shown on a button by accessing an option of a dedicated enumeration class. Learn more here
  • The layout of the palette can now be controlled with an advanced logic by adding a script to do that into the .pyp file. Learn more here
  • There are some new options of a reference point button. Learn more here

WIP-3

  • New class DoorOpeningElement in the NemAll_Python_ArchElements module allows you to create door openings. See the example DoorOpening ( PYP | PY)

  • The article about element selection has been completely rewritten.

  • New extensive article about coordinate input.
  • It is now possible (and even recommended) to delete model elements with the PythonPartTransaction. See new argument elements_to_delete in the execute method.
  • New tags <ValueTextList> and <ValueTextIdList>, relevant for the definition of a picture combo box and for a picture button list
  • You can now control the visibility/enable state of multiple directly consecutive parameters with a condition group
  • You can now create a list of tuples in the palette, that stretch over the entire width of the palette. This allows you to create controls layout similar to a table. Learn more here

Warning

Module level attributes representing values of enumeration classes have been deprecated in 2025-WIP-3. Instead of using:

NemAll_Python_Geometry.eOK

Use the full name:

NemAll_Python_Geometry.eGeometryErrorCode.eOK

WIP-2

WIP-1

Placeholder