yoin

martijn

He hoi,

Ik probeer via het toolpalette een tekening te openen. Dit is om op een gemakkelijke manier bij standaard tekeningen te komen.
Als ik als commando ^C^Copen;(pad en naam bestand) invul, kom ik in het scherm dat je een tekening kunt kiezen om te openen, hij gaat alleen niet naar het goede pad en opend al helemaal niet de tekening.  :oops:
Is er een manier, waarop dit wel kan?? Een hyperlink o.i.d. te plaatsen in de toolpalette??
:idea:  Ik hoor graag jullie ideeen hierover.

Met vriendelijke groet,

Martijn

HofCAD

#1
Beste Martijn,

Als het programma cmdOpen geladen is en er een tekening c:\tek.dwg
bestaat, dan kun je met ^C^C(cmdOpen) in de  VisualLisp Expression toolpalette
de tekening Tek openen.

(defun cmdOpen ()
  (setq name "C:/tek.dwg")
  (vl-load-com)
  (if (= 0 (getvar "SDI"))
    (vla-activate
      (vla-open (vla-get-documents (vlax-get-acad-object)) name)
    )
    (vla-sendcommand
      (vla-get-activedocument (vlax-get-acad-object))
      (strcat "(command \"_.OPEN\")\n" name "\n")
    )
  )
)

Met vriendelijke groet, HofCAD CSI.

PS In lisp gebruik je 2 backslash(\\) waar je er 1 backslash(\) nodig hebt of een forward slash(/).
ACADcadabra

martijn

#2
Bedankt HofCAD voor je reactie, ga het gelijk uit proberen.

Werkt perfect voor 1 tekening, maar als ik nu meerdere tekeningen op deze manier wil kunnen openen?
Ik heb het script nu de naam cmdOpen gegeven, maar zodra ik deze verander, om voor elke tekening een script aan te maken dan krijg ik error: no function definition: TEKOPENEN te zien in acad?

Is hier nog een oplossing voor??

HofCAD

#3
Citaat van: martijn op ma 16 02 2009, 13:06:38
Bedankt HofCAD voor je reactie, ga het gelijk uit proberen.

Werkt perfect voor 1 tekening, maar als ik nu meerdere tekeningen op deze manier wil kunnen openen?
Ik heb het script nu de naam cmdOpen gegeven, maar zodra ik deze verander, om voor elke tekening een script aan te maken dan krijg ik error: no function definition: TEKOPENEN te zien in acad?

Is hier nog een oplossing voor??

Beste Martijn,

Het is of terug keren naar de tekening waarin het programma is geladen,
of het programma opnieuw laden.
Je kan ook de programma's zetten in het bestand acaddoc.lsp.
Bijv.:
(defun $TekOpen (name)
  (vl-load-com)
  (if (= 0 (getvar "SDI"))
    (vla-activate
      (vla-open (vla-get-documents (vlax-get-acad-object)) name)
    )
    (vla-sendcommand
      (vla-get-activedocument (vlax-get-acad-object))
      (strcat "(command \"_.OPEN\")\n" name "\n")
    )
  )
)
(defun TekOpen1()
($TekOpen "C:\\Tek1.dwg")
)
(defun TekOpen2()
($TekOpen "C:\\Tek2.dwg")
)
(defun TekOpen3()
($TekOpen "C:\\Tek2.dwg")
)
(defun TekOpen4()
($TekOpen "C:\\Tek4.dwg")
)


Met vriendelijke groet, HofCAD CSI

PS.
The acaddoc.lsp file is intended to be associated with each document (or drawing) initialization.
This file is useful if you want to load a library of AutoLISP routines to be available every time you
start a new drawing (or open an existing drawing).
ACADcadabra

martijn

Ik denk niet dat dit de oplossing is, is zal even beschrijven wat ik heb gedaan.

Ik heb het door u gescheven programmaatje geplakt in een acad lisp en deze de naam cmdOpen genoemd.
Op de plaats van c:/tek heb ik het pad van mijn tekening opgegeven.
In de toolpalette heb ik een knopje gemaakt met het commando ^C^C(cmdOpen)
De lisp file heb ik geladen in de startup suite en acad opnieuw opgestart.

Dit werkt goed.

Nu wil ik meerdere tekeningen kunnnen openen op deze manier dus heb ik het volgende gedaan.

De Lisp routine heb ik opgeslagen als tekopenen en deze heb ik ook geladen in de startup suite en het commando in de toolpalette aangepast naar ^C^C(tekopenen)
Acad weer opnieuw opgestart.

Als ik nu op het knopje druk krijg ik dus de melding error: no function definition: tekopenen.

Het enige wat eigenlijk veranderd is is de naam van cmdOpen naar Tekopenen.

De bedoeling hiervan is dat ik meerdere knoppen kan maken met bijv. tek1, tek2 enz. en achter elke knop zit dan een andere tekening.

Ik hoop dat het zo duidelijk is.

hulpje

Martijn,

Werk je met een volledige versie van AutoCAD of heb je een LT versie?
Als je een LT versie hebt, werkt LISP nl. niet.

Richard
HELAAS BESTAAT CADToppers.com niet meer
ACP-er (AutoDesk Certified Professional)

HofCAD

#6
Citaat van: martijn op ma 16 02 2009, 14:12:22
Ik denk niet dat dit de oplossing is, is zal even beschrijven wat ik heb gedaan.

Ik heb het door u gescheven programmaatje geplakt in een acad lisp en deze de naam cmdOpen genoemd.
Op de plaats van c:/tek heb ik het pad van mijn tekening opgegeven.
In de toolpalette heb ik een knopje gemaakt met het commando ^C^C(cmdOpen)
De lisp file heb ik geladen in de startup suite en acad opnieuw opgestart.

Dit werkt goed.

Nu wil ik meerdere tekeningen kunnnen openen op deze manier dus heb ik het volgende gedaan.

De Lisp routine heb ik opgeslagen als tekopenen en deze heb ik ook geladen in de startup suite en het commando in de toolpalette aangepast naar ^C^C(tekopenen)
Acad weer opnieuw opgestart.

Als ik nu op het knopje druk krijg ik dus de melding error: no function definition: tekopenen.

Het enige wat eigenlijk veranderd is is de naam van cmdOpen naar Tekopenen.

De bedoeling hiervan is dat ik meerdere knoppen kan maken met bijv. tek1, tek2 enz. en achter elke knop zit dan een andere tekening.

Ik hoop dat het zo duidelijk is.

Beste Martijn,

Ik heb geschreven  acaddoc.lsp en niet acad.lsp, omdat acad.lsp
afhankelijk van de AutoCAD variabele Acadlspasdoc en Lispinit mogelijk
slechts in de eerste tekening geladen wordt.

In het bestand acaddoc.lsp kun je bijv. zetten:

(defun $TekOpen (name)
 (vl-load-com)
 (if (= 0 (getvar "SDI"))
   (vla-activate
     (vla-open (vla-get-documents (vlax-get-acad-object)) name)
   )
   (vla-sendcommand
     (vla-get-activedocument (vlax-get-acad-object))
     (strcat "(command \"_.OPEN\")\n" name "\n")
   )
 )
)
(defun TekOpen1()
($TekOpen "C:\\Tek1.dwg")
)
(defun TekOpen2()
($TekOpen "C:\\Tek2.dwg")
)
(defun TekOpen3()
($TekOpen "C:\\Tek2.dwg")
)
(defun TekOpen4()
($TekOpen "C:\\Tek4.dwg")
)

Met vriendelijke groet, HofCAD CSI.

PS. Uit de AutoCAD Help:
The acaddoc.lsp file is intended to be associated with each document (or drawing) initialization.
This file is useful if you want to load a library of AutoLISP routines to be available every time you
start a new drawing (or open an existing drawing).

Zie bijv. ook: http://usa.autodesk.com/adsk/servlet/ps/item?siteID=123112&id=2897258&linkID=9240617
ACADcadabra

martijn

Jahoor, het is gelukt.  :lol: :P :lol:

Met de nieuwe lispfile. Deze heb ik geladen m.b.v. de startup suite. Dan is deze namelijk ook in elke tekening beschikbaar.
In de toolpalette de knopjes de commando's  ^C^C(TekOpen1) en TekOpen2 enz. te geven.
Perfect, precies wat ik wilde hebben.

Bedankt