Ik maak veel gebruik van ctrl+c en ctrl+v. Nu merk ik dat dat op ons systeem steeds trager werkt, vooral bij het plakken. Ik heb ook wel eens gelezen dat iemand dacht dat er eerder errors in je dwg ontstaan wanneer je via het klembord van Windows kopieert. Daarom probeer ik een lisp te maken om via Wblock te kopiëren en plakken. Hieronder mijn eerste opzet.
Ik ben benieuwd wat anderen hier van vinden. Of iemand grote risico's ziet, of liever nog verbeteringen!
Voor het plakken (P00) ben ik vooral aan het zoeken naar een methode waarbij het wblock geëxplodeerd in de tekening komt (ook als deze op een gelockte laag ingevoegd wordt) en waarna de blockdefinitie weer verwijderd wordt. Purge werkt dan weer erg langzaam, vandaar dat ik een stukje visual-lisp van internet heb gebruikt.
(defun c:c00 ( / OLDECHO SS)
(setq OLDECHO (getvar 'cmdecho))
(setvar 'cmdecho 0)
;select objects:
(or
(setq SS (ssget ":L-i"));add preselected objects (exclude locked layers)
(setq SS (ssget "_:L"));select objects (exclude locked layers)
);_or
(command);deselect SS
;check file and folder, execute wblock:
(if SS
(if (findfile "c:\\temp")
(progn
(command "_.ucs" "w")
(if (findfile "c:\\temp\\cpblock.dwg")
(command "_.wblock" "c:\\temp\\cpblock.dwg" "y" "" '(0 0) SS "");folder is found, block overwritten
(command "_.wblock" "c:\\temp\\cpblock.dwg" "" '(0 0) SS "");forder is found, block created
);_if blk exists
(command "_.ucs" "p")
);_progn
(prompt "\De ingestelde map (c:\\temp) is niet gevonden! -EINDE-")
);_if dir exists
(prompt "\Geen objecten geselecteerd! -EINDE-")
);_if SS
(command "_.oops")
(prompt "\nCOPY00, objecten zijn gekopieerd naar c:\\temp\cpblock.dwg. Gebruik P00 om te plakken.")
(setvar 'cmdecho OLDECHO)
(print)
);_defun
(defun c:p00 ( / OLDECHO BLK)
(if (not (tblsearch "BLOCK" "cpblock"))
(if (findfile "c:\\temp\\cpblock.dwg")
(progn
(setq OLDECHO (getvar 'cmdecho))
(setvar 'cmdecho 0)
(command "-insert" "c:\\temp\\cpblock.dwg")
(command)
(setvar 'insname "*cpblock")
(command "ucs" "w")
(command "-insert" "" '(0 0) "1" "0")
(command "ucs" "p")
(vl-load-com)
(and (setq blk (tblobjname "block" "cpblock"))
(vla-delete (vlax-ename->vla-object (cdr (assoc 330 (entget blk)))))
);_and
(setvar 'cmdecho OLDECHO)
(prompt "P00 is gereed")
);_progn
(prompt "\nHet kopiebestand c:\\temp\\cpblock.dwg is niet gevonden. -EINDE-")
);_if c:\\temp\\cpblock
(prompt "\nHet block CPBLOCK bestaat al in de tekening. Verwijder deze eerst! -EINDE-")
);_if cpblock
(print)
);_defun
Groeten,
Reimer
Ik heb net uw code getest en deze is op mijn PC niet sneller dan de standaard ctrl-c/ctrl-p. Ik zal vanavond de code in detail bestuderen.
Ikzelf gebruik voor het kopiëren en plakken via clipboard en met base point 0,0,0 volgende LISP code (via 2 tool buttons):
(defun c:ClipBaseCopy ( / #ss #ssLength )
(if (not (setq #ss (ssget "_I"))) (setq #ss (ssget)))
(setq #ssLength (sslength #ss))
(command "_.copybase" "0,0,0" #ss "")
(princ "\n")
(princ #ssLength)
(cond ((= #ssLength 1) (princ " entity is")))
(cond ((> #ssLength 1) (princ " entities are")))
(princ " copied to the clipboard with base point 0,0,0")
(princ)
)
(defun c:ClipBasePaste ( / )
(command "_.pasteclip" "0,0,0")
(princ "\nClipboard contents is pasted to base point 0,0,0")
(princ)
)
Met deze codes heb ik nog nooit problemen gehad.
Uit de help:
Citaat van: AutodeskYou can control block insertion behavior using the following methods:
Inserting exploded blocks: Preceding the name of the block with an asterisk (*) explodes the block and inserts the individual parts of it. The block definition is not added to the drawing.
Dus een "*" voor het blockmaan zorgd ervoor dat het block geexplodeerd in de tekening komt zonder block definitie.
Vervolgend op het commentaar van Eddy (let op "_non"):
(command "_.-insert" "*cpblock=C:\\temp\\cpblock.dwg" "_non" '(0 0 0) 1 0)
Overigens is het beter om te proberen het copy-paste probleem eerst op te lossen alvorens een work-around te verzinnen.
Citaat van: Reimer op ma 11 09 2017, 10:20:48Voor het plakken (P00) ben ik vooral aan het zoeken naar een methode waarbij het wblock geëxplodeerd in de tekening komt (ook als deze op een gelockte laag ingevoegd wordt) en waarna de blockdefinitie weer verwijderd wordt.
Hier geeft u zelf het antwoord: https://www.cadsite.be/smf/index.php?topic=6643.msg35126#msg35126, ik weet wel niet of dit ook op een gelockte laag lukt.
Bedankt voor jullie reacties allemaal. We werken sinds kort met al onze software vanaf de server (deze is vakkundig afgeschermd). De ICT-afdeling doet zijn best om alle problemen op te lossen maar ik ben bang dat dit nog lang kan gaan duren. :roll:
Ik heb de code van Roy getest maar krijg een foutmelding:
(command "_.-insert" "*cpblock=C:\\temp\\cpblock.dwg" "_non" '(0 0 0) 1 0)
_.-insert Enter block name or [?]: *cpblock=C:\\temp\\cpblock.dwg
** Error: You may not explode blocks using the
"block name=file name" syntax.
Wat wel werkt is:
(command "_.-insert" "*C:\\temp\\cpblock.dwg" "_non" '(0 0 0) 1 0)
Ik hoef nu ook de visual lisp code niet meer te gebruiken. :vreegoe:
Nogmaals bedankt!
Reimer
@Reimer:
BricsCAD accepteert beide varianten en AutoCAD dus alleen de laatste:
(command "_.-insert" "*cpblock=C:\\temp\\cpblock.dwg" "_non" '(0 0 0) 1 0)
(command "_.-insert" "*C:\\temp\\cpblock.dwg" "_non" '(0 0 0) 1 0)
Misschien 'Superclip' eens proberen.
Je kunt er ook een netwerk versie van maken zodat het als clipboard werkt tussen collega's.
Werkt best handig.
https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/superclip-revision/td-p/2942752
Leuk om te zien. Het principe is hetzelfde als bij mij. Helaas loopt Superclip wel vast wanneer je Paste (Insert) terwijl de actieve laag gelocked is. De dialoogbox is wel handig omdat je met de toetsen makkelijk kunt kiezen tussen de opties.
Bedankt voor het delen!
Reimer
En als ander alternatief.. : RLXpaste van Neerlandse bodem.
http://www.cadtutor.net/forum/showthread.php?95094-RlxPaste