yoin

Matthias

Beste,

Is het mogelijk om via een lispje of iets anders een drukletter te plaatsen voor layers.
Ik krijg bijvoorbeeld een opmetingsplan binnen van landmeter = hier plaats ik dan graag LA voor
Ik krijg dan plan binnen van de architect = voor die layers plaats ik dan graag AR
mijn eigen layers bijvoorbeeld Z.
enz...

Is het handig om om deze manier te werken of is het beter om met filters te werken?

Mvg
Landschaps- en tuinarchitect

bart

dat kan middels het commando rename
in de aangeleverde tekening


geef een * aan als oude naam
en bijvoorbeeld LA* als nieuwe
Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

HofCAD

#2
Citaat van: bart op do 08 01 2009, 07:31:36
dat kan middels het commando rename
in de aangeleverde tekening


geef een * aan als oude naam
en bijvoorbeeld LA* als nieuwe

Beste Mathias,

Om het herbenoemen met RENAME via een Lisp programma te doen,
kun je kijken naar:
http://www.cadsite.be/smf/index.php/topic,1397.0.html
http://www.cadsite.be/smf/index.php/topic,1509.0.html
http://www.cadsite.be/smf/index.php/topic,1481.0.html
Of je kan zoiets als onderstaand maken:

(defun c:ChLay(/ ~CMDE Prefix LayerTableItem LayerTableName)
(setq ~CMDE (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(textscr)
(princ "\n Prefix LA betekent afkomstig van Landmeter")
(princ "\n Prefix AR betekent afkomstig van Architect")
(princ "\n Prefix Z  betekent afkomstig van Mijzelf")
(initget "LA AR Z")
(setq PreFix (getkword "\nGeef de Prefix van de layers in [LA/AR/Z] <LA>"))
(if (= PreFix nil) (setq Prefix "LA"))
(setq LayerTableItem (tblnext "LAYER" T))
(while LayerTableItem
(setq LayerTableName (cdr (assoc 2 LayerTableItem)))
(if (not (wcmatch LayerTableName "0,*|*,*$*$*"))
(command "_RENAME" "_LA" LayerTableName (strcat PreFix LayerTableName)
))
(setq LayerTableItem (tblnext "LAYER"))
)
(setvar "CMDECHO" ~CMDE)
(princ)
)


of met
(defun c:ChLay2 (/ PreFix Layers LayerName)
(textscr)
(princ "\n Prefix LA betekent afkomstig van Landmeter")
(princ "\n Prefix AR betekent afkomstig van Architect")
(princ "\n Prefix Z  betekent afkomstig van Mijzelf")
(initget "LA AR Z")
(setq PreFix (getkword "\nGeef de Prefix van de layers in [LA/AR/Z] <LA>"))
(if (= PreFix nil) (setq Prefix "LA"))
(vl-load-com)
(or *acad* (setq *acad* (vlax-get-acad-object)))
(or *doc* (setq *doc* (vla-get-activedocument *acad*)))
(setq layers (vla-get-layers *doc*))
(vlax-for x layers
(setq LayerName (vla-get-name x))
(if (not (wcmatch LayerName "0,*|*,*$*$*"))
(vla-put-name x (strcat PreFix LayerName))))
)

of
(defun c:ChLay3(/ Prefix LayerTableItem LayerTableName edata)
(textscr)
(princ "\n Prefix LA betekent afkomstig van Landmeter")
(princ "\n Prefix AR betekent afkomstig van Architect")
(princ "\n Prefix Z  betekent afkomstig van Mijzelf")
(initget "LA AR Z")
(setq PreFix (getkword "\nGeef de Prefix van de layers in [LA/AR/Z] <LA>"))
(if (= PreFix nil) (setq Prefix "LA"))
(setq LayerTableItem (tblnext "LAYER" T))
(while LayerTableItem
(setq LayerTableName (cdr (assoc 2 LayerTableItem)))
(if (not (wcmatch LayerTableName "0,*|*,*$*$*"))
(progn
(setq edata (entget (tblobjname "LAYER" LayerTableName)))
(setq edata (entmod (subst (cons 2 (strcat PreFix LayerTableName))(assoc 2 edata) edata)))
))
(setq LayerTableItem (tblnext "LAYER"))
)
(princ)
)

Met vriendelijke groet, HofCAD CSI

ACADcadabra

Matthias

Citaat van: HofCAD op do 08 01 2009, 09:57:07
Citaat van: bart op do 08 01 2009, 07:31:36
dat kan middels het commando rename
in de aangeleverde tekening


geef een * aan als oude naam
en bijvoorbeeld LA* als nieuwe

Beste Mathias,

Om het herbenoemen met RENAME via een Lisp programma te doen,
kun je kijken naar:
http://www.cadsite.be/smf/index.php/topic,1397.0.html
http://www.cadsite.be/smf/index.php/topic,1509.0.html
http://www.cadsite.be/smf/index.php/topic,1481.0.html
Of je kan zoiets als onderstaand maken:

(defun c:ChLay(/ ~CMDE Prefix LayerTableItem LayerTableName)
(setq ~CMDE (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(textscr)
(princ "\n Prefix LA betekent afkomstig van Landmeter")
(princ "\n Prefix AR betekent afkomstig van Architect")
(princ "\n Prefix Z  betekent afkomstig van Mijzelf")
(initget "LA AR Z")
(setq PreFix (getkword "\nGeef de Prefix van de layers in [LA/AR/Z] <LA>"))
(if (= PreFix nil) (setq Prefix "LA"))
(setq LayerTableItem (tblnext "LAYER" T))
(while LayerTableItem
(setq LayerTableName (cdr (assoc 2 LayerTableItem)))
(if (not (wcmatch LayerTableName "0,*|*,*$*$*"))
(command "_RENAME" "_LA" LayerTableName (strcat PreFix LayerTableName)
))
(setq LayerTableItem (tblnext "LAYER"))
)
(setvar "CMDECHO" ~CMDE)
(princ)
)


of met
(defun c:ChLay2 (/ PreFix Layers LayerName)
(textscr)
(princ "\n Prefix LA betekent afkomstig van Landmeter")
(princ "\n Prefix AR betekent afkomstig van Architect")
(princ "\n Prefix Z  betekent afkomstig van Mijzelf")
(initget "LA AR Z")
(setq PreFix (getkword "\nGeef de Prefix van de layers in [LA/AR/Z] <LA>"))
(if (= PreFix nil) (setq Prefix "LA"))
(vl-load-com)
(or *acad* (setq *acad* (vlax-get-acad-object)))
(or *doc* (setq *doc* (vla-get-activedocument *acad*)))
(setq layers (vla-get-layers *doc*))
(vlax-for x layers
(setq LayerName (vla-get-name x))
(if (not (wcmatch LayerName "0,*|*,*$*$*"))
(vla-put-name x (strcat PreFix LayerName))))
)

of
(defun c:ChLay3(/ Prefix LayerTableItem LayerTableName edata)
(textscr)
(princ "\n Prefix LA betekent afkomstig van Landmeter")
(princ "\n Prefix AR betekent afkomstig van Architect")
(princ "\n Prefix Z  betekent afkomstig van Mijzelf")
(initget "LA AR Z")
(setq PreFix (getkword "\nGeef de Prefix van de layers in [LA/AR/Z] <LA>"))
(if (= PreFix nil) (setq Prefix "LA"))
(setq LayerTableItem (tblnext "LAYER" T))
(while LayerTableItem
(setq LayerTableName (cdr (assoc 2 LayerTableItem)))
(if (not (wcmatch LayerTableName "0,*|*,*$*$*"))
(progn
(setq edata (entget (tblobjname "LAYER" LayerTableName)))
(setq edata (entmod (subst (cons 2 (strcat PreFix LayerTableName))(assoc 2 edata) edata)))
))
(setq LayerTableItem (tblnext "LAYER"))
)
(princ)
)

Met vriendelijke groet, HofCAD CSI



Mooi hofcad,

Ik bekijk dit even.
Plaats ik de lipsroutines gewoon in een txt bestand om deze te activeren?

Mvg
Landschaps- en tuinarchitect

HofCAD

#4
Citaat van: Matthias op vr 09 01 2009, 14:14:08
Mooi hofcad,

Ik bekijk dit even.
Plaats ik de lipsroutines gewoon in een txt bestand om deze te activeren?

Mvg
Beste Matthias,

De lisproutines moeten in een asci bestand staan met de extensie *.lsp.
Zo'n bestand kun je bijv. aanmaken met Notepad en met Wordpad,
maar bij Wordpad moet je dan wel daarbij kiezen voor tekstdocument.

De Lisp file laden doe je met het commando APPLOAD(afkorting AP)
of door de file vanuit de verkenner te slepen naar de tekening.
Ook Lisp heeft een oplossing met de routine Load met
syntax (load filename [onfailure])
Bijv.: (load "c:\\MijnLispen\\ChLay.lsp")

Na het laden kun je de routine runnen met ChLay, ChLay2 of ChLay3.

Met vriendelijke groet, HofCAD CSI

PS Ik heb de file ChLay.lsp hier toegevoegd.
ACADcadabra

yoin