| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | NVIDIA GTC Paris und ISC High Performance-Konferenz 2025, eine Pressemitteilung
|
Autor
|
Thema: Aufruf von VBA-Prozeduren via Lisp (2201 mal gelesen)
|
RoSiNiNo Mitglied Konstrukteur
   
 Beiträge: 1126 Registriert: 09.10.2002 Acad 2011-deutsch, Express Tools 3ds Max 2010 Win 7-Professional HP Workstation Z400, 6GB GeForce GTX 470
|
erstellt am: 07. Jul. 2004 16:41 <-- editieren / zitieren --> Unities abgeben:         
Hallo Kollegen, ich hab da mal eine Frage zu LISP. Bisher habe ich die Befehle so definiert: Code: (defun c:blocknum () (vl-vbarun "acad.dvb!koordinaten.BlockNumeriert")) (defun c:AttCountX () (vla-runmacro(vlax-get-acad-object) "acad.dvb!Modify.AttribCountExtend"))(defun c:BlockTxP () (vl-vbarun "acad.dvb!block.BlockTextPrefix")) (defun c:BlockTxS () (vl-vbarun "acad.dvb!block.BlockTextSuffix"))
Jetzt habe ich in einem anderen Beitrag eine gute Variante gelesen, z.B. folgendes. Code: ;;; ********************* ;;; setq global variables ;;; *********************;;; get the application object (setq *acadObj* (vlax-get-acad-object)) ;; array of command name strings (setq CommandList (list "BreakLineByBlock" "CapsLockEnable" "CapslockToggle" "ColorToByLayer" "ColorToEntity" "DeleteAllPlotConfig" "DeletePlotConfig" "DeletePlotConfigs" "EraseClouds" "ExplodeMinsert" "HelpAbout" "ImportPageSetups" "ImportPageSetupsConfig" "ImportPageSetupsND" "ImportPlotConfigs" "PrintSchedule" "ScriptMgr" "SetLayout" "SetPlotConfig" "SetViewportScale" "ShowLayouts" "ScriptMgr" "ScriptMgr" "ToggleVPLock" "VpExtentsBox" ) ) ;; make a defun for each command name (foreach CommandName CommandList (eval (list 'defun (read (strcat "C:" CommandName)) '() (list 'vla-RunMacro *AcadObj* CommandName) '(princ) ) ) )
Wie ihr seht ist es eine einfache Liste mit CommandName's. Jetzt habe ich aber das Problem das bei mir bei ;;make a defun for each command name nicht zwei mal der gleiche CommandName benötigt werden würde sondern:
Code: (foreach CommandName CommandList (eval (list 'defun (read (strcat "C:" CommandName)) '() (list 'vla-RunMacro *AcadObj* CommandNameDefinition) '(princ) ) ) )
Kann man das in einer Liste bewerkstelligen? Ich hoffe mich klar genug ausgedrückt zu haben. ------------------ Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13533 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 07. Jul. 2004 16:54 <-- editieren / zitieren --> Unities abgeben:          Nur für RoSiNiNo
ungestestet , so etwa : (Setq VBA-LISTE (list ("BlockTxP" "acad.dvb!block.BlockTextPrefix") ("BlockTxS" "acad.dvb!block.BlockTextSuffix") ) ) (foreach LISTENEINTRAG VBA-LISTE (eval (list 'defun (read (strcat "C:" (car LISTENEINTRAG))) '() (list 'vla-RunMacro *AcadObj* (cadr LISTENEINTRAG)) '(princ) ) ) ) ------------------ - Thomas - Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoSiNiNo Mitglied Konstrukteur
   
 Beiträge: 1126 Registriert: 09.10.2002 Acad 2011-deutsch, Express Tools 3ds Max 2010 Win 7-Professional HP Workstation Z400, 6GB GeForce GTX 470
|
erstellt am: 08. Jul. 2004 07:06 <-- editieren / zitieren --> Unities abgeben:         
Danke Thomas, ich werde es einmal testen. Da hätte ich dann doch noch eine Frage, kann man eigentlich zu jedem Listeneintrag auch noch Kommentare schreiben? z.B. (Setq VBA-LISTE (list ("BlockTxP" "acad.dvb!block.BlockTextPrefix") ;Schreibt Prefix vor Attributtext ("BlockTxS" "acad.dvb!block.BlockTextSuffix") ;Schreibt Suffix nach Attributtext ) )
------------------ Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13533 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 08. Jul. 2004 07:38 <-- editieren / zitieren --> Unities abgeben:          Nur für RoSiNiNo
|
RoSiNiNo Mitglied Konstrukteur
   
 Beiträge: 1126 Registriert: 09.10.2002 Acad 2011-deutsch, Express Tools 3ds Max 2010 Win 7-Professional HP Workstation Z400, 6GB GeForce GTX 470
|
erstellt am: 08. Jul. 2004 07:40 <-- editieren / zitieren --> Unities abgeben:         
|
RoSiNiNo Mitglied Konstrukteur
   
 Beiträge: 1126 Registriert: 09.10.2002 Acad 2011-deutsch, Express Tools 3ds Max 2010 Win 7-Professional HP Workstation Z400, 6GB GeForce GTX 470
|
erstellt am: 08. Jul. 2004 13:12 <-- editieren / zitieren --> Unities abgeben:         
Ich hab jetzt ein kleines Problem mit diesem Code: ;;; ********************* ;;; setq global variables ;;; ********************* ;;; get the application object (setq *acadObj* (vlax-get-acad-object)) ;; array of command name strings (setq CommandList (list ("HK3D" "acad.dvb!aTest.HK_OBQZ") ;3d Höhenkote ("RIDL" "acad.dvb!aTest.RechnenIstDochLeicht") ;Rechnen ) ) ;; make a defun for each command name (foreach CommandName CommandList (eval (list 'defun (read (strcat "C:" (car CommandName))) '() (list 'vla-RunMacro *AcadObj* (cadr CommandName)) '(princ) ) ) ) Ich bekomme beim Laden folgenden Fehler:
Befehl: (load"TestBefehle") ; Fehler: Fehlerhafte Funktion: "HK3D" Wenn ich die Befehle wie früher so definiere, dann klappt es: (defun c:HK3D () (vla-runmacro (vlax-get-acad-object) "acad.dvb!aTest.HK_OBQZ")) (defun c:RIDL () (vla-runmacro (vlax-get-acad-object) "acad.dvb!aTest.RechnenIstDochLeicht")) Wo ist oben der Fehler begraben, ich habe auch versucht die Einträge in der Liste zu ändern: ("HK3D" "\"acad.dvb!aTest.HK_OBQZ\"") ;3d Höhenkote hat aber auch nicht funktioniert.
------------------ Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13533 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 08. Jul. 2004 13:17 <-- editieren / zitieren --> Unities abgeben:          Nur für RoSiNiNo
|