Welcome to Lee Mac Programming Custom Programming Services Want to harness the power of custom programming to save your company countless hours of repetitive work?
If there is a specific task that you wish to automate using custom programming, feel free to contact me to hire my services. Want to know what you're missing out on? Read the testimonials of those who have worked with me and my programs. A Sample of my Work In addition to my custom programming services, I offer a plethora of free LISP programs available for you to download, covering a huge range of applications: Not sure how to run a program?
This update accounts for nested blocks within nested xrefs. My Align Objects to Curve program has now been updated to Version 1. This update incorporates the option to enable to disable Multiple Mode; when enabled, this mode allows the user to continuously align multiple copies of the selected objects to the selected curve. This version restructures the program as a core function accepting a viewport entity argument, facilitating the creation of two additional custom commands: This version implements further minor efficiency refinements and also enables compatibility with newer releases of AutoCAD and its derivatives through the use of the command-s function.
This minor refinement to the code improves the efficiency of the function when supplied with linetypes which are already defined in the active drawing and when the redefine argument is nil. The code for this new version has been entirely rewritten to offer a more elegant solution for supplied arguments of varying data types, and the function will now also accept an entity handle argument. This version introduces a new layerdirector: By default, the parameter is disabled, meaning that only the AutoLISP command itself will trigger a layer change; but if this parameter is enabled, any AutoCAD commands invoked as part of the evaluation of the AutoLISP program may also trigger layer changes.
This version accounts for the possibility of encountering nested external references xrefs when using the Nested Burst nburst command, excluding such objects from the burst operation. This version now offers two custom commands pburst Primary Burst and nburst Nested Burst , incorporating the functionality of my Nested Burst application and consolidating the two very similar programs into a single program, facilitating easier maintainance going forward.
The program has also been modified to account for invisible objects created when exploding dynamic block references with visibility states, and fixes a bug causing attributes with transparency to be removed by the burst operation. This new version implements code to account for a bug present in AutoCAD whereby the multileader text spacing factor is reset to 1. This new version converts the two core commands c: These functions may each be evaluated with two parameters: I have provided a full explanation of how to define additional custom commands on the program page , and have also included a table of contents for ease of navigation.
The program has also been restructured in an effort to standardise the output functionality across all of my related field programs. I have updated my Field Arithmetic program to Version 1. This new version generates the resulting field using my standard LM: Essentially, the code is now consistent with the latest version my Burst Upgraded application.
I have also included an animated GIF to demonstrate the program in action. Multiline Justification enables the user to change the justification of a selection of multilines, without changing their position.
I have also restructured the program page to include a link to download the code for the function directly. I have also added a Table of Contents for ease of navigation. This enhanced version offers a new Multiple option at the polyline selection prompt, allowing the user to apply a taper to all polylines in a selection simultaneously.
The new code accounts for earlier versions of AutoCAD in which the effectivename property of a block reference object is not available.
The new code addresses a number of issues involving duplicate points being returned when generating point lists for polylines containing multiple arc segments or polylines which are visually closed but whose Closed property is False. The new version also introduces an additional parameter to control the point density when approximating non-linear objects.
This new version fixes a bug in which any text content following the last field expression held by the target annotation object would be lost following the application of the source field formatting.
I have updated my set of Bulge Conversion Functions to include a new 3-Points to Bulge function which will calculate the appropriate bulge value for an arc passing through three supplied points. This revised version refines the calculation of the block definition bounding box to ignore block components residing on frozen layers and account for the possibility of null bounding boxes as a result of all components being excluded from the calculation.
This version also updates the ABB command to incorporate the ability for the user to specify a block name directly at the command-line when inserting a new block. I have also renamed the LM: For extra convenience, all functions in the library may now be downloaded as a single file using the download link at the top of the page.
This new version offers the ability to offset the viewport outline by a predetermined number of paperspace units inside the viewport boundary, and also allows the user to automatically apply a set of predefined properties to the resulting modelspace polyline. I have also included a new animated demonstration of the program on the program page in order to convey the program's capabilities. In the case of selecting multiple objects, the field expression references the sum of the lengths of all objects in the selection.
The resulting field can then be displayed as a new MText object, or housed within an existing table cell, single-line text, multiline text, multileader, or attribute. The program will now enable or disable the ordering controls depending on whether the ordering operation is valid for the selected items e.
The test program now also accounts for a deselection of all items in the list disabling all ordering controls , a situation that would cause the previous version to crash. Following this modification, I have consequently updated my Copy Field , Field Formatting Code , Match Field Formatting , and Field Arithmetic programs, which all rely heavily on receiving the correct output from this function.
Field Arithmetic allows the user to perform arithmetic operations on selected text or field expressions, with the result of the calculation represented using a field expression.
This update incorporates a couple of user-configurable program parameters which allow the user to easily adjust the tolerance used for dimension comparison, and the properties of the layer assigned to overlapping dimensions. The new version fixes a bug which was causing the program to crash when modifying the background mask properties for dimensions with one or more dimension style overrides already applied.
This update resolves a bug causing the program to produce an incorrect output when processing MText objects whose text content occupied multiple DXF group 3 entries. The new version now accounts for the use of the 3DORBIT command when invoked transparently from within a command which has been configured to trigger a layer change.
Previously, the act of invoking the 3DORBIT command transparently would cause the layer to be reset to the previously active layer, resulting in the new object incorrectly being created on this layer.
The updated code also removes the restriction present in the previous version which prevented layers whose layer name started or ended with the same character as the prefix or suffix from being selected for processing.
Finally, the new version provides more verbose output to indicate to the user exactly which layers have been renamed by the program. I have also included a brand new test program, and a GIF animation to demonstrate how the function may be used. Layout Field defines a set of commands which enable the user to populate a selected annotation object Text, MText, Attribute with a field expression referencing the name and position of the layout in which the object resides.
However - and most importantly - the field expressions generated by the program do not reference the CTAB system variable, and will therefore yield the correct result independent of whether or not the layout is current.
The function will therefore gracefully return nil if either of the supplied objects do not support this method. This update alters the program operation to allow the user to select a block to be deleted from the drawing, with the option of selecting a block by name using the dialog displayed by the previous version of the program available upon the user typing N at the selection prompt.
The dialog interface has also been enhanced to include an edit box, allowing the user to filter the displayed list of block names. I have updated my List Box with Filter function to Version 1. This version fixes a bug arising when the user selects multiple items, applies a filter which excludes one or more of the selected items, and then accepts the resulting selection. This revision fixes a bug causing the program to crash if parentheses or double-quotes were found in the text content.
This version fixes the implementation of the block filter parameter when processing attributed dynamic blocks Version 1. The updated code now accounts for polygonal viewports represented by 2D Heavy Polylines this can arise when rotating a rectangular viewport, for example. Limited Length Polyline allows the user to dynamically construct a straight-segmented polyline whose overall length may optionally be limited to a given value. The program uses my GrText and GrSnap functions to allow the polyline to be accurately constructed with the length displayed in real-time at the cursor.
This new version ensures that the selection count for selected objects following grip-editing operations is retained, and corrects the reported selection count for non-rectangular viewports which were previously counted as two objects.
I will also soon update the program description to include instructions on how to create such programs. The new version has been entirely restructured and now provides dedicated functions to allow the user to bypass the main program dialog if desired.
The program also now enables the user to manipulate the background mask for dimensions. In rewriting the application, I have improved the error handling, program performance and code readability, paving the way for possible future enhancements.
I determined that the cause of this issue was due to the arithmetic operations that are performed on the 4 bit hash values after processing each bit chunk of input data not being wrapped to a bit unsigned integer as required by the algorithm , and also that such operations could potentially be introducing rounding errors as a consequence of the use of doubles to store the 4 bit items of hash data.
To resolve this issue, I designed a bitwise addition function so that all operations could be performed on a list of bits, with no loss of precision.
I have now fixed the reported bugs and have updated the program to Version 1. I wish to extend a huge thank you to all of my readers who were kind enough to test the program to its limit and report back with their feedback, in turn improving the application for others.
The program has been mostly rewritten in order to incorporate compatibility for all types of Dimensions, and for Multileaders with Attributed Block content.
This brief study forms part of my selection of Mathematical Endeavours. This page also demonstrates an alternative method in which to generate the Sierpinski Triangle by recursively applying one of three randomly selected transformations to a given point.
This function will return a pseudo-random number within the range given by the two integer arguments. Method 4a: Reverse ssdel. This method demonstrates how to process a selection set by sequentially removing the entity at the sslength - 1 th index until no entities remain in the set.
I have also updated the page to include a table of contents to assist with navigation of the tutorial. This new version will offer the user the option to erase the set of objects in the original selection.
This new version no longer restricts the user to selecting a visible attribute to house the resulting Field Expression, but instead allows the user to select any attributed block and will prompt the user to choose the attribute tag to be populated with the Field Expression if the selected block contains more than one attribute. The updated program also enables the user to predetermine the attribute tag to be populated with the Field Expression using a parameter defined in the program source code.
Finally, this new version also accounts for bit versions of AutoCAD in which the ActiveX getobjectidstring method is not available. I have updated my Align Text program to Version 1. The new version includes an additional prompt for an optional line spacing factor which offers a default option allowing the user to retain the existing spacing between the selected text objects.
I have updated my Length at Midpoint program to Version 1. This update implements a new version of my LM: The new version allows the user to cue an automatic layer change following the use of a custom AutoLISP command, and also adds the Layer Plot Style to the list of layer properties which may be configured by the program. Following user feedback, I have updated my reactor-driven utility allowing a user to automatically select all MText content on a double-click to enable compatibility with Multileader objects, such that all MLeader text content is selected when double-clicking on an MLeader object.
In this new version, the core function which performs the overlap test has been completely rewritten in order to account for dimensions which overlap on both sides, and to also enable compatibility with dimensions created in any UCS or construction plane.
A Simple Block Counter provides a step-by-step explanation of how to use an association list to construct a simple block counter program in AutoLISP, which will prompt the user for a selection of block references and will output the quantities of each block in the selection to the AutoCAD command-line. Finally, I wish all of my readers a very Merry Christmas!
It was real fun being in on the AutoCAD for Mac project from Alpha through beta and seeing what it has, and continues to evolve to. Remembering that A4M is a TOTAL rewrite. The same would be partially true for a Civil 3D for Mac project. I run Civil 3D on my . autocad free download - AutoCAD 2D 3D SofTutor Tutorials, AutoCAD, AutoCAD Mechanical, and many more programs. Mac. Enter to Search. My Profile Logout. Login Join. Includes AutoCAD + Revit + Civil 3D + more AutoCAD for Mac, or any of the industry-specific AutoCAD toolsets to see how they can speed your work. All are included when you subscribe, but each trial must be downloaded separately. This software may not be compatible with your operating system, but you can download it for installation on a.
It empowers you to make and recording basic planning things and using it for building information showing BIM. Perform speedier arrangement cycles and streamline dreary assignments. Use discernment, reenactment, and water examination devices facilitated with the arrangement methodology to improve expand the movement and essential administration. Autodesk InfraWorks: