What’s New for Developers in BricsCAD V19?
London, United Kingdom
A Huge Lot of new features and fixes!
One of the reasons for BricsCAD’s huge success is the extremely high-level of API compatibility it provides with AutoCAD.
That is just the beginning, now the API support and extensions in BricsCAD are so comprehensive that virtually anything and every new feature of BricsCAD core native functions also is customizable, down to the last T.
The huge improvements in productivity tools, core features and end-user-interface is solidly supported by API level improvements as well. The list is long but here we begin:
The marquee new feature in BricsCAD API is the BLADE IDE. BLADE stands for BricsCAD Lisp Advanced Development Environment.
While other vendors are neglecting Lisp in favor of .NET, C++ and so on, BricsCAD is taking Lisp as well to new heights.
BALDE was introduced in the life-cycle of V18 but a slew of new features and handy tools for the programmer have enhanced it significantly in V19.
The BLADE sharpens its edges
- improved AutoComplete made safer, auto-hides if minimum characters is no longer reached
- improved Inspector dialog : the expanded list allows formatting by level
- minor fixes for some Lisp string formatting
- made Inspector dialog safe against GarbageCollection
- made Inspector dialog modeless
- Inspector dialog can be started without argument, asks for entity selection then
- added “Load Selection in Console” to run selected Lisp expression(s) in Lisp Console
- enabled Drag & Drop for Lisp Console
- added more default hotkeys for operations
- fixed some problems with Reformat/Beautify for multiline literal text
- better reformat for comment lines : now aligned to actual scope indentation (except for comments starting at column 0)
- improved Paste to Lisp Console
- when BLADE was running parallel – switching back to OpenDCL dialogs could trigger a lockup.
- added red/green line markers for edited and edited + saved text lines
- entire redesign of menu + hotkey system, no longer hard-coded, but based on stored defaults + settings
- added hotkey editor to preferences dialog
- improved “Find” dialog, supports “Find in Project” now; also better result display
- improved editor tooltips, showing syntactical help, and user comments where available
- Debugging : system variables can now serve as breakpoint, including conditions, as for all the other “data breakpoints”
- Debugging : the break expression can now also use “variables”, not only values, using the ‘name syntax
- editor windows : can now be undocked, having floating editors (partially using own menu + toolbar, depending on the editor’s window position)
- “Syntax + Variables Check” modeless dialog to analyse a code part, a file, or an entire project, for Lisp syntax issues, and variable usage
- text size for all lists + trees is now 75% of “editor text size”, to have all visual representation following the Preferences Setting, improves appearance for UHD displays
- improved “edit-while-debug” – this is work-in-progress
BRX / TX / COM / Other Improvements
- BRX: OdEdJig: calls to AcEdJig::drag() or AcEdJig::sampler() now return kOther when update() returned kFalse.
- BRX: Status bar panes added by BRX were a few pixels too wide, and text label was too close to the left edge.
- BRX: Status bar item icon and visibility state could not be changed after the item was added to the status bar.
- BRX: Adjusted entity + selectionset dragging operations, to better match ARX logic and event sequence.
- BRX: Subentity traits in custom grip draw function is now re-initialized before each grip is drawn.
- BRX: acedUnloadPartialMenu() returned false when using relative paths for loading and unloading .cuix files.
- BRX: Return value eGetNewGripPoints from a custom grip handler now causes grips for the entity to be refreshed.
- BRX: Plot engine failed when NULL plot progress handler was passed to AcPlPlotEngine::beginPlot().
- BRX: Added support for “BOX” (aka “B”) selection mode in acedSSGet().
- BRX: AcDb3dSolid::cleanBody() could empty a body originating from stitching surfaces – it shouldn’t.
- BRX: Applied performance improvements for odutWcMatch().
- BRX: AcDbMPolygon closing vertex is now preserved when provided.
- BRX: When calling AcDbDatabase::wblock() within a transaction, objects in the source database could be left open kForNotify until the transaction was closed.
- BRX/TX: Excessive modeless operation notifications were fired.
- BRX: Calling setDynamicDimension(true) on hover grip dimensions now creates a dynamic dimension.
- BRX: Fixed a crash when attaching the VS 2017 native and managed debuggers to a running BricsCAD process.
- BRX: Newly set icon on BRX pane could shift to top left corner of status bar.
- CMDECHO: MVIEW/Polygonal option: initial start point message was not suppressed by CMDECHO=0, when running from application code.
- COM: Implemented OdOxGetMaterial() and OdOxPutMaterial().
- COM: Added IAcadHatch::get/put_BackgroundColor() functions.
- CUI: When a 3dSolid was BIM classified (as wall, slab,…) double-click action no longer worked. A BIM entity type name can be specified in the Cui (however not yet available in UI) and it will override the native entity type name.
- CUI: Added the Quad button’s menugroup name to its icon name in MENUGROUP[ICON PATH] format in order to support usage of relative paths through the LargeImage and SmallImage CUI items.
- DCL: DCL LISTBOX: Having selected a list_box item, when pressing Enter, the callback reason, returned in the $reason variable, was 1 instead of 4.
- GRADIENT HATCH: Gradient hatches of which the colors were not explicitly set by OdDbHatch::setGradientColors() could not be rendered.
- LISP: (repeat) function didn’t return an error when used with a non-integer argument.
- LISP: vla-GetBoundingBox for tolerance entities returned incorrect results in case negative X coordinates were involved.
- LISP/SDS/BRX: entmake function behaved incompatible when DXF 67 and 410 (and combinations) were involved.
- LISP: Fixed a (rare) problem with (vlax-add-command) and running that command via (command) function, and the LISP code then uses interactive selection like (ssget), (getint) etc.; such scenario could result in unexpected errors and/or crashes
- LISP: (layerstate-restore layerstatename viewport [restoreflags]) function now accepts NIL value for ‘viewport’ as the key for modelspace
- LISP: Improved support for field expressions for table cells.
- LISP: CETRANSPARENCY system variable was handled as string, but must be processed as integer.
- LISP: (load “name.vlx”) and (load “name.fas”) are now processed as (load “name”), which automatically searches for .des and .lsp files, resulting in improved compatibility with existing Lisp applications.
- LISP: Improved (if …) function to detect the case when more than 2 code blocks are provided in then/else branch.
- LISP: Added vlo_VL::audit() to audit/recover Lisp VLAX-LData custom objects.
- LISP: Fixes a problem with (entmod) for hatch entities, regression since V14. The modified hatch origin point could cause unexpected reload + recalculation of original hatch patterns, resulting in wrong hatch lines
- LISP/BRX/NET: Corrected Lisp representation of resbuf sequences, created by BRX or NET, containing invalid “dotted pair” definitions.
- LISP/SDS/BRX: improved compatibilty of (entdel) / sds_entdel() by not erasing sub-entities, or entities inside a BlockDefinition.
- LISP: (load) function: error messages contained a filename spelling defect.
- LISP: Improved compatibility of return value of (sssetfirst nil).
- LISP/SDS/BRXentget() was improved to return NIL for 3dSolid, Region and Surface if the underlying ACIS object is empty.
- LISP: Improved performance and reduced memory consumption of (vl-remove), (vl-remove-if), (vl-remove-if-not).
- LISP: Improved (findfile) to provide more consistent results with unusual file or path specifications (multiple \\ or /)
- LISP: When Lisp code/file is loaded via MenuLisp mnl files a Lisp GarbageCollection could damage non-Lisp memory (causing strange problems)
- LISP COM: (vlax-create-object) and (vlax-get-or-create-object), when instantiating a new BricsCAD session – the application object could trigger exceptions when calling properties or methods
- LISP: Improved error detection at load-time, for improper (defun …) statements.
- LISP: vla-GetBoundingBox returned incorrect result for tolerance entities with negative X coordinates.
- LISP: Fixes for (caar), (cadr), (cdar) and (cddr) when used with DottedPair lists : in some cases, the expected Lisp errors were not triggered
- LISP: Fixes a potential issue with GarbageCollection, for (vl-sort) and (vl-sort-i) functions, when very large lists are sorted. Problems with GrabageCollection usually result in strange, sporadic Lsp errors
- LISP + COM: Fixed (vla-getremotefile) to download to a normal temporary file. Failed before if the URL contained characters not being allowed for a disk filename.
- LISP/.NET/COM: AcDbSortentsTable COM functions, should return or require SafeArray(IDispatch)) instead of SafeArray(Variant(IDispatch)))
- LISP/SDS/BRX: Attaching XData to 3dSolid using entget/entmod sequence could fail.
- LISP/SDS/BRX: Fixed an endless loop with entmod() for MESH entities
- LOGFILE: Log file timestamp had shifted time.
- MENUECHO: ‘Save’ attribute of the MENUECHO variable has been changed to “Not saved”.
- MENUGROUPS: fixed a problem with AUX1/RightMouseButton assigned a command or expression in menu file – the assigned operation was ignored during GripEdit; now AUX1/RightMouseButton has priority under SHORTCUTMENU=0
- .NET: Setting a jig input prompt containing keywords from within Jig.Sampler() did not display a command prompt menu.
- .NET: Adding database events could cause intermittent database problems such as failure of dimensions to update after dimension variable changes.
- .NET: A custom tooltip added via input monitor now displays even when a command is active, matching the changed behavior in ARX 2018.
- .NET: Aligned dimensions failed to update properly when database events or object overrules were active.
- .NET: The DwgVersion enumeration did not include values for the DWG 2018 format.
- .NET: Implemented HostApplicationServices.UserRegistryProductRootKey and HostApplicationServices.MachineRegistryProductRootKey properties.
- .NET: GraphicsInterface.EdgeData constructor has been made public to enable direct construction.
- .NET: MaterialMapper property is now supported.
- .NET: SetSubentColor() method returned “eKeyNotFound” exception for a SubDMesh object type.
- REGEN: Avoided unnecessary regeneration of entities when the layer(s) the entities are on, are switched ON/OFF
- RIBBON: Added support to automatically take all the properties from a specific MenuMacroID if properties are not overridden.
- TRIM command: Improved compatibility for TRIM operations on custom entities.
- TX: BricsCAD specific API to get Model Space entity by point in VIEWBASE or BIMSECTIONUPDATE generated layout – API\bricscad\od_assoc_views.h.
- UCS: Entities on locked layers could not be used to define a UCS ‘by entity’.
- UNDO: UNDO command now respects CMDECHO=0/1 setting to suppress prompts.