AutoCAD Electrical 2016:如何用AutoLISP将指定实体设为最后实体以执行c:aeballoon命令
c:aeballoon in AutoCAD Electrical 2016 Got it, let's tackle this problem. The c:aeballoon command in AutoCAD Electrical only acts on the "last entity"—usually the most recently created/modified object or the last one selected. To make it work on any arbitrary entity (like the Nth one in your drawing), we just need to trick AutoCAD into treating that target entity as the "last" one. Here's how to do it with AutoLISP:
Core Approach
The key is to make a tiny, invisible modification to the target entity and then revert it. This update marks the entity as the most recently modified object, so entlast (which c:aeballoon relies on) will return it.
Step 1: Helper Function to Set an Entity as "Last"
First, create a function that takes an entity name and makes it the last-modified object:
(defun SetAsLastEntity (ent / oldColor entData) ;; Validate the entity exists (if (and ent (setq entData (entget ent))) (progn ;; Store the entity's original color property (setq oldColor (assoc 62 entData)) ;; Temporarily set color to ByLayer (invisible change) (entmod (subst (cons 62 256) oldColor entData)) ;; Revert back to the original color (entmod (subst oldColor (assoc 62 entData) entData)) ;; Force the entity to update in the drawing (entupd ent) ) ) )
Step 2: Get the Nth Entity in the Drawing
If you need to target the Nth entity, use this function to retrieve it (note: selection sets are 0-indexed, so we subtract 1 from your input number):
(defun GetNthEntity (n / allEntities) ;; Grab all entities in the drawing (setq allEntities (ssget "X")) ;; Check if the input number is valid (if (and allEntities (> n 0) (<= n (sslength allEntities))) ;; Return the Nth entity (adjust for 0-indexed selection set) (ssname allEntities (- n 1)) (prompt "\nError: Invalid entity number!") ) )
Step 3: Combine into a Reusable Custom Command
Put it all together into a command that lets you input an entity number and apply c:aeballoon to it:
(defun c:BalloonTargetEntity (/ targetNum targetEnt) ;; Ask user for the entity number (setq targetNum (getint "\nEnter the number of the entity to balloon: ")) ;; Retrieve the target entity (setq targetEnt (GetNthEntity targetNum)) (if targetEnt (progn ;; Mark the entity as the "last" one (SetAsLastEntity targetEnt) ;; Run the balloon command (command "c:aeballoon") ) ) ;; Clean up the command prompt (princ) )
How to Use
- Open AutoCAD Electrical 2016.
- Type
APPLOAD, select your saved LISP file, and load it. - Type
BalloonTargetEntityand press Enter. - Enter the number of the entity you want to apply the balloon to.
Key Notes
- The color change/revert is completely invisible to you—your drawing will look exactly the same, but AutoCAD will now treat the target as the last modified entity.
- Ensure the target entity is supported by
c:aeballoon(e.g., electrical components, terminals—this won't work on random lines or text). - If you already have the entity name (from a selection or other script), you can directly call
(SetAsLastEntity yourEntityName)before runningc:aeballoon.
内容的提问来源于stack exchange,提问作者Dinesh Vilas Pawar

