2017-10-02 3 views
1

Je cherche une fonction qui me permettra de "reconstruire" automatiquement 1 ou plusieurs splines dans AutoCAD. J'ai des dessins qui ont des centaines de splines avec 30-50 sommets de contrôle chacun. Cela rend les dessins très lents à travailler, en particulier lorsque vous interagissez directement avec un groupe de ces splines.Recréer plusieurs splines dans AutoCAD

J'ai le code de base pour ce que je veux faire, mais je ne suis pas sûr à ce stade comment utiliser la commande cvrebuild dans AutoLISP. L'utilisation de cette commande dans la ligne de commande fait simplement apparaître une interface graphique. Voir le code ci-dessous pour ce que j'ai jusqu'à présent.

Je veux simplement appeler la commande cvrebuild en utilisant les variables n_controlvertices et degree comme arguments. La routine AutoLISP passe par un objet à la fois et les reconstruit avec les mêmes paramètres.

Je m'excuse pour l'apparition du code. Apparemment AutoLISP ne joue pas bien avec StackOverflow

;; Batch rebuild splines 
;;defines command name and variables 

(defun c: batchrebuild (/ ss n obj n_controlvertices degré)

;; asks for selection 

(invite )

"\ splines nSélectionnez à reconstruire."
;;decides if any splines are selected, and if not selects all 

(si (non (setq ss (ssget '((0 "SPLINE"))))) (setq ss (ssget "_X"' ((0 "SPLINE")))) )

;;sets allowable entry to [2 (only nonzero) + 4 (only positive)] 

(initget 6)

;;asks for number of fit points. if nothing is entered, it gives it the default value of 20 

(setq n_controlvertices (getint "\ nNombre de sommets de contrôle < 20>:"))

(si (= n_controlvertices nil) (setq n_controlvertices 20) (setq n_controlvertices (fix n_controlvertices))
)

;;asks for degree of fit points. if nothing is entered, it gives it the default value of 3 

(degré setq (getint "\ nDegree de points d'ajustement < 3>:"))

(si (= zéro degré) (degré de setq 3) (degré de setq (degré fixe))
)

(répétition (setq n (sslength ss))

(setq obj  (vlax-ename->vla-object (ssname ss (setq n (1- n)))) 


    ;;(command cvrebuild) 
    ;;This is the part that I am not sure about 


) 

(princ)

Répondre

1

Voici un moyen. Il appelle la version en ligne de commande de CVREBUILD (-CVREBUILD). Il traite des variables système pour les paramètres d'entrées utilisateur.

;; Batch rebuild splines 
;;defines command name and variables 

(defun c:batchrebuild (/ ss n obj n_controlvertices degree rebuild2doption rebuild2ddegree rebuild2dcv cmdecho) 

    ;; asks for selection 
    (prompt "\nSelect splines to be rebuilt.") 

    ;;decides if any splines are selected, and if not selects all 
    (or (setq ss (ssget '((0 . "SPLINE")))) 
     (setq ss (ssget "_X" '((0 . "SPLINE")))) 
) 
    ;; checks if the selection is not empty 
    (if ss 
    (progn 
     ;;sets allowable entry to [2 (only nonzero) + 4 (only positive) 
     (initget 6) 

     ;;asks for number of fit points. if nothing is entered, it gives it the default value of 20 
     (setq n_controlvertices 
      (cond 
       ((getint "\nNumber of control vertices<20>: ")) 
       (T 20) 
      ) 
    ) 

     ;;asks for degree of fit points. if nothing is entered, it gives it the default value of 3 
     (setq degree (cond 
        ((getint "\nDegree of fit points<3>: ")) 
        (T 3) 
        ) 
    ) 

     ;; saves the sysvars current values 
     (setq rebuild2doption (getvar "REBUILD2DOPTION") 
      rebuild2ddegree (getvar "REBUILD2DDEGREE") 
      rebuild2dcv  (getvar "REBUILD2DCV") 
      cmdecho   (getvar "CMDECHO") 
    ) 

     ;; sets the sysvars values according to user inputs 
     (setvar "REBUILD2DOPTION" 1) 
     (setvar "REBUILD2DDEGREE" degree) 
     (setvar "REBUILD2DCV" n_controlvertices) 
     (setvar "CMDECHO" 0) 

     ;; rebuilds the selected splines 
     (repeat (setq n (sslength ss)) 
     (command "_-cvrebuild" (ssname ss (setq n (1- n)))) 
    ) 

     ;; restores sysvars initial values 
     (setvar "REBUILD2DOPTION" rebuild2doption) 
     (setvar "REBUILD2DDEGREE" rebuild2ddegree) 
     (setvar "REBUILD2DCV" rebuild2dcv) 
     (setvar "CMDECHO" cmdecho) 
    ) 
) 
    (princ) 
) 
+0

Merci beaucoup pour l'aide! Je suis nouveau à AutoLISP, et certaines de ces choses sont difficiles à trouver des réponses. Existe-t-il de la documentation sur la façon de mettre en œuvre les commandes AutoCAD et leurs paramètres associés? Je suis habitué à pouvoir rechercher de la documentation pour chaque commande en Java (paramètres, options, variables d'instance, etc.). –