FastFiber

polylijn met global width tekenen

Gestart door marcelmaas, di 23 11 2010, 08:31:49

Vorige topic - Volgende topic

marcelmaas

Hallo,

Ik probeer vanaf onze toolpalette een polylijn te tekenen met een global width van 250 maar het lukt me niet.
Je moet eerst een lijn tekenen en dan daarvan de global width instellen.
Zou dat misschien mogelijk zijn met een scriptje ofzo?

Met vriendelijke groet Marcel..

marcelmaas

Ik las net ergens de variabelen 'plinewid' waarmee je de polyline width kunt opgeven, en daarmee heb ik een gedeelte van mijn probleem opgelost.

Ik heb nu dit scriptje gemaakt.

^C^Cplinewid;250;_pline

Hierna blijft de plwid op 250 staan, en die zou ik graag weer op 0 hebben staan bij het afsluiten van dit script.
Weet iemand of dat mogeljik is en hoe?

Met vriendelijke groet Marcel..

hulpje

Marcel,

Dit is geen script, maar een macro.
Ik zou gewoon een 2e knop maken, maar dan met de plinewid op 0.

Volgens mij is het nl. lastig om sit in een macro op te nemen.

Succes!

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

marcelmaas

Ja je hebt helemaal gelijk, het is idd een macro.

Een knop erbij, ja zou altijd kunnen natuurlijk, maar dan hebben we alweer een extra knop erbij, vinden ze hier vast niet leuk.

Maar ik ga toch kijken of het niet anders kan..

Iemand anders nog een idee?

groeten Marcel..

roy_043

(defun c:PL250 ( / old)
  (setq old (getvar 'plinewid))
  (setvar 'plinewid 250)
  (vl-cmdf "_.pline")
  (while (/= 0 (getvar 'cmdactive))
    (vl-cmdf pause)
  )
  (setvar 'plinewid old)
  (princ)
)

marcelmaas

Hi Roy_043

Ik heb de code zelf wat proberen aan te passen zodat eerst de laag ingesteld wordt, en de goede kleur.
Tot zover is het me gelukt, maar ik wil eigenlijk ook nog de linetype op 'hidden2' instellen en de lineweight op 'bylayer'
En stel nu dat iemand e linetype hidden2 niet geladen heeft wat gebeurt er dan?
Ik heb de code zoals ik hem nu heb hieronder staan.
Zou jij nog eens kunnen helpen?


Citeer(defun c:PL40 ( / old)

(setq Lay "HCKP_SONOREX" ColLay "4" LtLay "HIDDEN2" LwLay 0.25)
(if (not (tblsearch "LAYER" Lay))
(command "_.LAYER" "_M" Lay "_C" ColLay "" "_L" LtLay "HIDDEN2" "_LW" LwLay "" ""))
;(command "_.LAYER" "_T" Lay "_ON" Lay "_S" Lay ""))
 
  (setq old (getvar 'plinewid))
  (setvar 'plinewid 40)
  (vl-cmdf "_.pline")
  (while (/= 0 (getvar 'cmdactive))
    (vl-cmdf pause)
  )
  (setvar 'plinewid old)
  (princ)
)

HofCAD

#6
Beste Marcel,

(defun c:PL40 ( / old)
(setq Lay "HCKP_SONOREX" ColLay "4" LtLay "HIDDEN2" LwLay 0.25)
(if (not (tblsearch "LTYPE" LtLay))
(command "_.LINETYPE" "_L" LtLay "acadiso.lin" "")
)
(if (not (tblsearch "LAYER" Lay))
(command "_.LAYER" "_M" Lay "_C" ColLay "" "_L" LtLay "" "_LW" LwLay "" "")
(command "_.LAYER" "_T" Lay "_ON" Lay "_S" Lay ""))
 (setq old (getvar 'PLINEWID))
 (setvar 'plinewid 40)(setvar 'CELWEIGHT -1)
 (vl-cmdf "_.pline")
 (while (/= 0 (getvar 'cmdactive))
   (vl-cmdf pause)
 )
 (setvar 'PLINEWID old)
 (princ)
)


De regels:
(if (not (tblsearch "LTYPE" LtLay))
(command "_.LINETYPE" "_L" LtLay "acadiso.lin" "")
)

Zijn niet echt nodig.

Met vriendelijke groet, HofCAD CSI.
ACADcadabra

roy_043

HofCAD was iets sneller... maar dit is mijn oplossing:
(defun c:PL40 ( / oldCelweight oldClayer oldPlinewid lay)
  (setq oldCelweight (getvar 'celweight))
  (setq oldClayer (getvar 'clayer))
  (setq oldPlinewid (getvar 'plinewid))
  (setvar 'celweight -1)
  (setvar 'plinewid 40)
  (setvar 'cmdecho 0)
  (setq lay "HCKP_SONOREX")
  (if (not (tblsearch "LAYER" lay))
    (vl-cmdf "_.layer" "_new" lay "")
  )
  (vl-cmdf
    "_.layer"
    "_on"      lay
    "_thaw"    lay
    "_unlock"  lay
    "_color"   4         lay
    "_ltype"   "HIDDEN2" lay ; ltype wordt automatische geladen
    "_lweight" 0.25      lay
    "_set"     lay
    ""
  )
  (setvar 'cmdecho 1)
  (vl-cmdf "_.pline")
  (while (/= 0 (getvar 'cmdactive))
    (vl-cmdf pause)
  )
  (setvar 'celweight oldCelweight)
  (setvar 'clayer oldClayer)
  (setvar 'plinewid oldPlinewid)
  (princ)
)

In Bricscad worden ltypes door het commando layer automatisch geladen.

roy_043

Uit de edit van HofCAD (om 13:40:57):
Citaat van: HofCAD op di 23 11 2010, 13:31:04
De regels:
(if (not (tblsearch "LTYPE" LtLay))
(command "_.LINETYPE" "_L" LtLay "acadiso.lin" "")
)

Zijn niet echt nodig.
concludeer ik dat dit:
Citaat van: roy_043 op di 23 11 2010, 13:36:00
In Bricscad worden ltypes door het commando layer automatisch geladen.
toch ook voor AutoCAD geldt.

P.S. Wat zijn eigenlijk de regels m.b.t. het editeren van berichten op dit forum?

EddyBeerke

Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

marcelmaas

De versie van Roy_043 tekent de pl op de goede laag en houd de laag die voor de aanroep van het programma actief was ook actief, die van Hofcad niet, is verder niet zo'n probleem.

Beide code's maken de linetype 'hidden2' wel aan, maar zetten de linetype bylayer en niet op hidden2.
Wel wordt een stippellijn getekend, maar het is een hele fijne, en moet eerst zelf nog een keer de linetype hidden2 laden, dan gaat het wel goed.

Werkt het bij jullie wel, doe ik dus misschien iets fout?

Met vriendelijke groet, Marcel..

roy_043

Citaat van: marcelmaas op di 23 11 2010, 15:23:31...maar het is een hele fijne, en moet eerst zelf nog een keer de linetype hidden2 laden, dan gaat het wel goed.
Kan het zijn dat de instelling voor MEASUREMENT verkeerd staat...? Dat zou slecht zijn want het getuigt van een een verkeerd gebruik van templates.
Citaat van: marcelmaas op di 23 11 2010, 15:23:31zetten de linetype bylayer en niet op hidden2.
Uit een vorig bericht moet geconcludeerd worden dat jij een laag wilt aanmaken met als lijntype HIDDEN2. Beide :D lisps doen dit. Nu lijkt het of zowel de laag als de polylijn zelf dat lijntype moeten krijgen. Dat is onlogisch.

HofCAD

#12
Citaat van: marcelmaas op di 23 11 2010, 15:23:31
De versie van Roy_043 tekent de pl op de goede laag en houd de laag die voor de aanroep van het programma actief was ook actief, die van Hofcad niet, is verder niet zo'n probleem.

Beide code's maken de linetype 'hidden2' wel aan, maar zetten de linetype bylayer en niet op hidden2.
Wel wordt een stippellijn getekend, maar het is een hele fijne, en moet eerst zelf nog een keer de linetype hidden2 laden, dan gaat het wel goed.

Werkt het bij jullie wel, doe ik dus misschien iets fout?

Met vriendelijke groet, Marcel..

Beste Marcel,

Een alternatief voor mijn vorige versie:

(defun c:PL40 (/ oldCmdecho oldPlinewid oldClayer oldCelweight)
 (setq oldCelweight (getvar 'CELWEIGHT))
 (setq oldClayer (getvar 'CLAYER))
 (setq oldPlinewid (getvar 'PLINEWID))
 (setq oldCmdecho (getvar 'CMDECHO))
 (setvar 'CELWEIGHT -1)
;(setvar 'CECOLOR "ByLayer")(setvar 'CELTYPE "ByLayer")
 (setvar 'PLINEWID 40)
 (setvar 'CMDECHO 0)
 (setq Lay    "HCKP_SONOREX"
ColLay "4"
LtLay  "HIDDEN2"
LwLay  0.25
 )
 (if (not (tblsearch "LTYPE" LtLay))
   (command "_.LINETYPE" "_L" LtLay "acadiso.lin" "")
 )
 (if (not (tblsearch "LAYER" Lay))
   (command "_.LAYER" "_M" Lay "_C" ColLay "" "_L" LtLay "" "_LW" LwLay "" "")
   (command "_.LAYER" "_T" Lay "_ON" Lay "_S" Lay "")
 )
 (setvar 'CMDECHO 1) ; of (setvar 'CMDECHO oldCmdecho)
 (Command "_.PLINE")
 (While (eq 1 (logand 1 (getvar 'CMDACTIVE)))
   (command pause)
 )
 (setvar 'CELWEIGHT oldCelweight)
 (setvar 'CLAYER oldClayer)
 (setvar 'PLINEWID oldPlinewid)
 (princ)
)

of
(defun c:PL40 (/ oldCmdecho oldExpert oldPlinewid oldClayer oldCelweight)
  (setq oldCelweight (getvar 'CELWEIGHT))
  (setq oldClayer (getvar 'CLAYER))
  (setq oldPlinewid (getvar 'PLINEWID))
  (setq oldCmdecho (getvar 'CMDECHO))
  (setq oldExpert (getvar 'EXPERT))
  (setvar 'CELWEIGHT -1)
;(setvar 'CECOLOR "ByLayer")(setvar 'CELTYPE "ByLayer")
  (setvar 'PLINEWID 40)
  (setvar 'CMDECHO 0)
  (setq Lay    "HCKP_SONOREX"
ColLay "4"
LtLay  "HIDDEN2"
LwLay  0.25
  )
  (setvar 'EXPERT 3)
  (command "_.LINETYPE" "_L" LtLay "acadiso.lin" "")
  (setvar 'EXPERT oldExpert)
  (if (not (tblsearch "LAYER" Lay))
    (command "_.LAYER" "_M" Lay "_C" ColLay "" "_L" LtLay "" "_LW" LwLay "" "")
    (command "_.LAYER" "_T" Lay "_ON" Lay "_S" Lay "")
  )
  (setvar 'CMDECHO 1) ; of (setvar 'CMDECHO oldCmdecho)
  (Command "_.PLINE")
  (While (eq 1 (logand 1 (getvar 'CMDACTIVE)))
    (command pause)
  )
  (setvar 'CELWEIGHT oldCelweight)
  (setvar 'CLAYER oldClayer)
  (setvar 'PLINEWID oldPlinewid)
  (princ)
)


Ik ben het met met roy_043  in het bovenstaande bericht volkomen eens.
Als je in mijn ogen wil knoeien "door niet  'ByLayer' te werken",  dan kun
je met de AutoCAD variabelen:  CECOLOR, CELTYPE, CELWEIGHT de setting
van de laag overrulen.
Ik zelf doe dit alleen soms in blockdefinities.
In mijn programma ga ik er dus van uit dat CECOLOR en CELTYPE al 'ByLayer'
staan, en ook zo blijven.

Als je met Format->Linetype... of met het Commando LINETYPE met
het knopje Load... een lijntype laadt, staat er dan bij 'File'
het bestand 'acad.lin' of 'acadiso.lin'  (maw staat MEASUREMENT wel op 1).
Staat de AutoCAD variabele MEASUREINIT op 1.

Met vriendelijke groet, HofCAD CSI.

PS Via AI_EDITCUSTFILE acad.lin en AI_EDITCUSTFILE acadiso.lin kan men nagaan:

Dat in acad.lin de definitie voor HIDDEN2 is:
*HIDDEN2,Hidden (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
A,.125,-.0625

En dat in acadiso.lin de definitie voor HIDDEN2 is:
*HIDDEN2,Hidden (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
A, 3.175, -1.5875

Dus een faktor van 25.4
ACADcadabra

marcelmaas

@hofcad

Mijn measurement staat op 1, dus dat is goed.
Bij file in linetype staat "acadiso.lin"

En als ik jou laatste code gebruik in een nieuwe lege tekening dan wordt na activering van de code wel hidden2 geladen maar de line wordt bylayer getekend en die is niet gestreept, pas als ik de lijn selecteer en hidden2 aan klik dan wordt hij gestreept.

Als ik eerlijk ben snap ik ook niet precies wat het verschil is tussen de laag op bylayer en de line op bylayer zetten waar jullie het over hebben.

Wij willen in ieder geval op deze laag de ene keer hidden2 en de andere keer hidden gebruiken als linetype, dus misschien moet dan de layer op bylayer en de laag op hidden2, als ik het goed begrijp.




roy_043

Citaat van: marcelmaas op wo 24 11 2010, 10:57:21laag op bylayer
:vraagteken:
Een entiteit (lijn, cirkel etc.) kan voor de eigenschap lijntype de waarde "bylayer" hebben. Voor de layer zelf is "bylayer" nooit van toepassing. Als je deze belangrijke materie nog niet helemaal onder de knie hebt, dan raad ik je aan een goede AutoCAD-cursus te gaan volgen of een goed lesboek door te nemen... :mrgreen:
Citaat van: marcelmaas op wo 24 11 2010, 10:57:21
een nieuwe lege tekening
Post deze lege tekening eens.
Citaat van: marcelmaas op wo 24 11 2010, 10:57:21
de ene keer hidden2 en de andere keer hidden gebruiken als linetype
Geef wat meer achtergrondinformatie:
In dezelfde tekening of in verschillende tekeningen? Tegelijkertijd? Schaalafhankelijk?


FastFiber