Макросы для СС2
Название | Парапет 1 |
Автор | Morgan Olden |
Команда | PARAPET1 |
Описание | Изображает зубчатый парапет между двумя точками.
|
Instructions | Макрос не имеет настроек. Просто укажите две точки и ждите пока макрос работает. Макрос рисует зубцу вверху, если точки стоят слева направо - на приведенном рисунке левая точка первая. Макрос изображает 5-футовые зубцы и 2.5-футовые промежутки между ними. Для смены цвета парапета измените значение "ColDS" на третьей строке макроса. |
Код
//Morgan Olden (June 2000)
macro PARAPET1
ecoff
gv ColDS 18
gp
P1 ^DPoint 1:
iferr done
gp P2 ^DPoint 2:
iferr done
color
ColDS;lwidth 1.5;fstyle solid;lstyle solid
line P1 P2;
color 0;fstyle
hollow
line P1 P2;
gdist DTS P1 P2
gv DTS DTS-12.5
gv remainder
DTS
:remainderloop
ifz remainder doneremainderloop
ifn remainder-7.5
doneremainderloop
gv remainder remainder-7.5
go
remainderloop
:doneremainderloop
gbrng CrenBrng P1 P2
gp P1 ref P1
<(CrenBrng+90),.5
gp P2 ref P2 <(CrenBrng+90),.5
gp Cren1 ref P1
<CrenBrng,(remainder/2)+7.5
gv CrenTDist DTS-remainder
lwidth 2.5;color
ColDS;fstyle solid
line P1 ref P1 <CrenBrng,5+(remainder/2);
color
0;fstyle hollow
line P1 ref P1 <CrenBrng,5+(remainder/2);
gp CrenS
Cren1
ifn DTS-7.5 control1
:loop
gp Cren2 ref Cren1
<CrenBrng,5
lstyle solid;color ColDS;lwidth 2.5;fstyle solid;line Cren1
Cren2;
color 0;fstyle hollow;line Cren1 Cren2;
gdist CrenDist CrenS
Cren2
ifn CrenTDist-CrenDist-7.5 control1
gp Cren1 ref Cren1
<CrenBrng,7.5
go loop
:control1
lwidth 2.5;color ColDS;fstyle
solid
line P2 ref P2 <CrenBrng+180,5+(remainder/2);
color 0;fstyle
hollow
line P2 ref P2
<CrenBrng+180,5+(remainder/2);
:done
econ
endm
Название | Парапет 2 |
Автор | Morgan Olden |
Команда | parapet2 |
Описание | Преобразует существующую линию в парапет зубчатой стены. Работает на открытые и закрытые объекты.
|
Инструкции | Версия 2.0 Полностью измененный макрос, заменяющий старую версию и работающий на закрытые объекты. Должен работать немного лучше своего предшественника. В макрос включен файл скрипта с кодом (смотри вложение). Для работы скрипта просто запустите его из СС2.
|
Код
macro parapet2
ecoff
rdoff
point 10001,10001;
golayer
MacroConstruction1
golayer MacroConstruction
:mcoStart
gv mcoColDS
18
gv mcoColLS 16
ge mcoEntity ^DEntity
iferr mcoDone
gp mcoP1 % 0
mcoentity
line mcoP1 ^DWhich side to crenelate?;
selbyp
erase
gp
mcoP2 @0,0
gbrng mcoTEST1 mcoP1 % 1 mcoentity
gbrng mcoTEST2 mcoP1
mcoP2
ifp mcoTEST1-mcoTEST2 mcoControl1
gv mcoSIDE -1
ifp
mcoTEST2-mcoTEST1-180 mcoControl2
gv mcoSIDE 1
go
mcoControl2
:mcoControl1
gv mcoSIDE 1
ifp mcoTEST1-mcoTEST2-180
mcoControl2
gv mcoSIDE -1
:mcoControl2
gv mcoClosed 1
gdist
mcoTestDist % 0 mcoEntity % 100 mcoEntity
ifz mcoTestDist mcoControl3
gv
mcoClosed 0
:mcoControl3
gdist mcoTotLen % 0 mcoEntity % .1
mcoEntity
gv mcoTotLen mcoTotLen*1000
gv mcoUnit 100/mcoTotLen
gv
mcoremainder mcoTotLen-(2.5*mcoClosed)
gv mcosegments
0
:mcoremainderloop
ifn mcoremainder-7.5 mcodoneremainderloop
gv
mcosegments mcosegments+1
gv mcoremainder mcoremainder-7.5
go
mcoremainderloop
:mcodoneremainderloop
gv mcopartlen
((mcoTotLen-(2.5*mcoClosed))-((mcosegments-1)*2.5))/mcosegments
gv
mcoPartFrag mcopartlen/5
selby1
CHANGEC mcoentity 0
CHANGEC2 mcoentity
mcoColDS
CHANGELW mcoentity 1.5
CHANGEFS mcoentity
SOLID
selbyp
lwidth 2.5;fstyle solid;color 0
gv mcoLC
(2.5*mcoClosed)
:mcoLoop
gbrng mcoB1 % mcoLC*mcoUnit mcoEntity %
(mcoLC*mcoUnit)+.01 mcoEntity
gp mcoP1 ref % mcoLC*mcoUnit mcoEntity
<mcoB1+(90*mcoSIDE),.5
gbrng mcoB1 % (mcoLC+mcoPartFrag)*mcoUnit mcoEntity
% ((mcoLC+mcoPartFrag)*mcoUnit)+.01 mcoEntity
gp mcoP2 ref %
(mcoLC+mcoPartFrag)*mcoUnit mcoEntity <mcoB1+(90*mcoSIDE),.5
gbrng mcoB1 %
(mcoLC+(mcoPartFrag*2))*mcoUnit mcoEntity %
((mcoLC+(mcoPartFrag*2))*mcoUnit)+.01 mcoEntity
gp mcoP3 ref %
(mcoLC+(mcoPartFrag*2))*mcoUnit mcoEntity <mcoB1+(90*mcoSIDE),.5
gbrng
mcoB1 % (mcoLC+(mcoPartFrag*3))*mcoUnit mcoEntity %
((mcoLC+(mcoPartFrag*3))*mcoUnit)+.01 mcoEntity
gp mcoP4 ref %
(mcoLC+(mcoPartFrag*3))*mcoUnit mcoEntity <mcoB1+(90*mcoSIDE),.5
gbrng
mcoB1 % (mcoLC+(mcoPartFrag*4))*mcoUnit mcoEntity %
((mcoLC+(mcoPartFrag*4))*mcoUnit)+.01 mcoEntity
gp mcoP5 ref %
(mcoLC+(mcoPartFrag*4))*mcoUnit mcoEntity <mcoB1+(90*mcoSIDE),.5
gbrng
mcoB1 % (mcoLC+(mcoPartFrag*5))*mcoUnit mcoEntity %
((mcoLC+(mcoPartFrag*5))*mcoUnit)+.01 mcoEntity
gp mcoP6 ref %
(mcoLC+(mcoPartFrag*5))*mcoUnit mcoEntity <mcoB1+(90*mcoSIDE),.5
path
mcoP1 mcoP2 mcoP3 mcoP4 mcoP5 mcoP6;
changec2 mcoColDS
gv mcoLC
mcoLC+mcopartlen+2.5
ifn mcoLC-mcoTotLen+8 mcoLoop
gbrng mcoB1 %
mcoLC*mcoUnit mcoEntity % (mcoLC*mcoUnit)+.01 mcoEntity
gp mcoP1 ref %
mcoLC*mcoUnit mcoEntity <mcoB1+(90*mcoSIDE),.5
gbrng mcoB1 %
(mcoLC+mcoPartFrag)*mcoUnit mcoEntity % ((mcoLC+mcoPartFrag)*mcoUnit)+.01
mcoEntity
gp mcoP2 ref % (mcoLC+mcoPartFrag)*mcoUnit mcoEntity
<mcoB1+(90*mcoSIDE),.5
gbrng mcoB1 % (mcoLC+(mcoPartFrag*2))*mcoUnit
mcoEntity % ((mcoLC+(mcoPartFrag*2))*mcoUnit)+.01 mcoEntity
gp mcoP3 ref %
(mcoLC+(mcoPartFrag*2))*mcoUnit mcoEntity <mcoB1+(90*mcoSIDE),.5
gbrng
mcoB1 % (mcoLC+(mcoPartFrag*3))*mcoUnit mcoEntity %
((mcoLC+(mcoPartFrag*3))*mcoUnit)+.01 mcoEntity
gp mcoP4 ref %
(mcoLC+(mcoPartFrag*3))*mcoUnit mcoEntity <mcoB1+(90*mcoSIDE),.5
gbrng
mcoB1 % (mcoLC+(mcoPartFrag*4))*mcoUnit mcoEntity %
((mcoLC+(mcoPartFrag*4))*mcoUnit)+.01 mcoEntity
gp mcoP5 ref %
(mcoLC+(mcoPartFrag*4))*mcoUnit mcoEntity <mcoB1+(90*mcoSIDE),.5
gbrng
mcoB1 % 99.99 mcoEntity % 100 mcoEntity
gp mcoP6 ref % 100 mcoEntity
<mcoB1+(90*mcoSIDE),.5
path mcoP1 mcoP2 mcoP3 mcoP4 mcoP5
mcoP6;
changec2 mcoColDS
:mcodone
selbyl
changel
MacroConstruction
like
10001,10001
selbyp
group
front
:mcoabort
selby1
keep
10001,10001
erase
10001,10001
selrest
rdon
econ
endm
Название | Парапет 3 |
Автор | Morgan Olden |
Команда | parapet3 |
Описание | Изображает парапет зубчатой стены как линию. Включает удачные построения углов и возможность закрытия парапета.
|
Инструкции | Версия 1.1 Исправлены ошибки и добавлена возможность выбора цвета. В макрос включен файл скрипта с кодом (смотри
вложение). Для работы скрипта просто запустите его из СС2.
|
Код
parapet3
ecoff
rdoff
point 10001,10001;
golayer
MacroConstruction
:mcoStart
gv mcoBLeg 0
gv mcoFirstTime 0
gv
mcoColDS 14
gv mcoColLS 251
gcol mcoColDS ^DDark stone colour?
(14)
gcol mcoColLS ^DLight stone colour? (251)
color 0
lwidth
0
lstyle solid
fstyle solid
selbyp
gp mcoP1 ^DPoint 1:
iferr
mcoabort
gp mcoP2 ^DPoint 2:
line mcoP1 mcoP2;
gdist mcoD12 mcoP1
mcoP2
ifz mcoD12 mcoabort
GBRNG mcoB12 mcoP1 mcoP2
gp mcoP1L ref mcoP1
<mcoB12+90,1.5
gp mcoP1LC ref mcoP1 <mcoB12+90,1.25
gp mcoFirstPoint
mcoP1
gp mcoFirstPointL mcoP1L
gp mcoFirstPointLC mcoP1LC
gv
mcoFirstBrng mcoB12
gp mcoP3 mcoP2
gp mcoP3 ^DNext Point:
line mcoP2
mcoP3;
gdist mcoD23 mcoP2 mcoP3
ifz mcoD23
mco2PointCrenelation
:mcoloop
GBRNG mcoB12 mcoP1 mcoP2
GBRNG mcoB23
mcoP2 mcoP3
gcos mcowcs 90-((mcoB12-mcoB23-180)/2)
gv mcoaw
1/mcowcs*(1.5)
gv mcoawCren 1/mcowcs*(1.25)
gp mcoP2L ref mcoP2
<(mcoB12+mcoB23)/2-90,mcoaw
gp mcoP2LC ref mcoP2
<(mcoB12+mcoB23)/2-90,mcoawCren
lwidth 0
poly mcoP1L mcoP2L mcoP2
mcoP1;
changec2 mcoColDS
lwidth 2.5
gdist mcoD12LC mcoP1LC
mcoP2LC
ifz mcoD12LC-7.5 mcoDoneCrenLoop
gn mcoLoopCount
(mcoD12LC-11.25)/7.5
ifz mcoFirstTime mcoControl1
gn mcoLoopCount
(mcoD12LC-12.5)/7.5
path ref mcoP1LC <mcoBLeg-180,5 mcoP1LC ref mcoP1LC
<mcoB12,5;
:mcoControl1
changec2 mcoColDS
ifz mcoLoopCount
mcoDoneCrenLoop
ifn mcoLoopCount mcoDoneCrenLoop
gv mcoCrenDist
(mcoD12LC-11.25)/mcoLoopCount
gv mcoCurLen 6.25
ifz mcoFirstTime
mcoCrenLoop
gv mcoCrenDist (mcoD12LC-12.5)/mcoLoopCount
gv mcoCurLen
7.5
:mcoCrenLoop
line ref mcoP1LC <mcoB12,mcoCurLen ref mcoP1LC
<mcoB12,(mcoCurLen+mcoCrenDist-2.5);
changec2 mcoColDS
gv mcoCurLen
mcoCurLen+mcoCrenDist
gv mcoLoopCount mcoLoopCount-1
ifp mcoLoopCount
mcoCrenLoop
:mcoDoneCrenLoop
lwidth 0
gp mcoP4 mcoP3
gp mcoP4 ^DNext
Point
line mcoP3 mcoP4;
gdist mcoD34 mcoP3 mcoP4
ifz mcoD34
mcodone
gp mcoP1 mcoP2
gp mcoP2 mcoP3
gp mcoP3 mcoP4
gp mcoP1L
mcoP2L
gp mcoP2L mcoP3L
gp mcoP1LC mcoP2LC
gp mcoP2LC mcoP3LC
gv
mcoBLeg mcoB12
gv mcoFirstTime 1
goto
mcoloop
:mcoDone
askbox
Closed Loop
Do you want to create
a
closed crenelation loop?
iferr mcoEndCrenelation
gp mcoP1
mcoP2
gp mcoP2 mcoP3
gp mcoP3 mcoFirstPoint
gp mcoP1L mcoP2L
gp
mcoP2L mcoP3L
gp mcoP1LC mcoP2LC
gp mcoP2LC mcoP3LC
gv mcoBLeg
mcoB12
GBRNG mcoB12 mcoP1 mcoP2
GBRNG mcoB23 mcoP2 mcoP3
gcos mcowcs
90-((mcoB12-mcoB23-180)/2)
gv mcoaw 1/mcowcs*(1.5)
gv mcoawCren
1/mcowcs*(1.25)
gp mcoP2L ref mcoP2 <(mcoB12+mcoB23)/2-90,mcoaw
gp
mcoP2LC ref mcoP2 <(mcoB12+mcoB23)/2-90,mcoawCren
lwidth 0
poly mcoP1L
mcoP2L mcoP2 mcoP1;
changec2 mcoColDS
lwidth 2.5
gdist mcoD12LC mcoP1LC
mcoP2LC
ifz mcoD12LC-7.5 mcoDoneCrenLoop3
gn mcoLoopCount
(mcoD12LC-12.5)/7.5
path ref mcoP1LC <mcoBLeg-180,5 mcoP1LC ref mcoP1LC
<mcoB12,5;
changec2 mcoColDS
ifz mcoLoopCount mcoDoneCrenLoop3
ifn
mcoLoopCount mcoDoneCrenLoop3
gv mcoCrenDist
(mcoD12LC-12.5)/mcoLoopCount
gv mcoCurLen 7.5
:mcoCrenLoop3
line ref
mcoP1LC <mcoB12,mcoCurLen ref mcoP1LC
<mcoB12,(mcoCurLen+mcoCrenDist-2.5);
changec2 mcoColDS
gv mcoCurLen
mcoCurLen+mcoCrenDist
gv mcoLoopCount mcoLoopCount-1
ifp mcoLoopCount
mcoCrenLoop3
:mcoDoneCrenLoop3
gp mcoP1 mcoP2
gp mcoP2 mcoP3
gp
mcoP3 mcoP4
gp mcoP1L mcoP2L
gp mcoP2L mcoP3L
gp mcoP1LC mcoP2LC
gp
mcoP2LC mcoP3LC
gv mcoBLeg mcoB12
GBRNG mcoB12 mcoP1 mcoP2
GBRNG mcoB23
mcoFirstBrng
gcos mcowcs 90-((mcoB12-mcoB23-180)/2)
gv mcoaw
1/mcowcs*(1.5)
gv mcoawCren 1/mcowcs*(1.25)
gp mcoP2L ref mcoP2
<(mcoB12+mcoB23)/2-90,mcoaw
gp mcoP2LC ref mcoP2
<(mcoB12+mcoB23)/2-90,mcoawCren
lwidth 0
poly mcoP1L mcoP2L mcoP2
mcoP1;
changec2 mcoColDS
lwidth 2.5
gdist mcoD12LC mcoP1LC
mcoP2LC
ifz mcoD12LC-7.5 mcoDoneCrenLoop4
gn mcoLoopCount
(mcoD12LC-12.5)/7.5
path ref mcoP1LC <mcoBLeg-180,5 mcoP1LC ref mcoP1LC
<mcoB12,5;
changec2 mcoColDS
ifz mcoLoopCount mcoDoneCrenLoop4
ifn
mcoLoopCount mcoDoneCrenLoop4
gv mcoCrenDist
(mcoD12LC-12.5)/mcoLoopCount
gv mcoCurLen 7.5
:mcoCrenLoop4
line ref
mcoP1LC <mcoB12,mcoCurLen ref mcoP1LC
<mcoB12,(mcoCurLen+mcoCrenDist-2.5);
changec2 mcoColDS
gv mcoCurLen
mcoCurLen+mcoCrenDist
gv mcoLoopCount mcoLoopCount-1
ifp mcoLoopCount
mcoCrenLoop4
:mcoDoneCrenLoop4
lwidth 2.5
path ref mcoP2LC
<mcoB12-180,5 mcoP2LC ref mcoP2LC <mcoB23,5;
changec2 mcoColDS
go
mcoDoneCrenLoop2
:mcoEndCrenelation
gp mcoP3L ref mcoP3
<mcoB23+90,1.5
gp mcoP3LC ref mcoP3 <mcoB23+90,1.25
poly mcoP2L
mcoP3L mcoP3 mcoP2;
changec2 mcoColDS
lwidth 2.5
gdist mcoD23LC mcoP2LC
mcoP3LC
ifz mcoD23LC-7.5 mcoDoneCrenLoop2
gn mcoLoopCount
(mcoD23LC-11.25)/7.5
path ref mcoP2LC <mcoB12-180,5 mcoP2LC ref mcoP2LC
<mcoB23,5;
changec2 mcoColDS
ifz mcoLoopCount mcoCrenEndcap
ifn
mcoLoopCount mcoCrenEndcap
gv mcoCrenDist (mcoD23LC-11.25)/mcoLoopCount
gv
mcoCurLen 7.5
:mcoCrenLoop2
line ref mcoP2LC <mcoB23,mcoCurLen ref
mcoP2LC <mcoB23,(mcoCurLen+mcoCrenDist-2.5);
changec2 mcoColDS
gv
mcoCurLen mcoCurLen+mcoCrenDist
gv mcoLoopCount mcoLoopCount-1
ifp
mcoLoopCount mcoCrenLoop2
:mcoCrenEndcap
line mcoP3LC ref mcoP3LC
<mcoB23-180,3.75;
changec2 mcoColDS
line mcoFirstPointLC ref
mcoFirstPointLC <mcoFirstBrng,3.75;
changec2
mcoColDS
:mcoDoneCrenLoop2
go
mcoParapet3Cleanup
:mco2PointCrenelation
GBRNG mcoB12 mcoP1 mcoP2
gp
mcoP1L ref mcoP1 <mcoB12+90,1.5
gp mcoP1LC ref mcoP1
<mcoB12+90,1.25
gp mcoP2L ref mcoP2 <mcoB12+90,1.5
gp mcoP2LC ref
mcoP2 <mcoB12+90,1.25
gdist mcoD12LC mcoP1LC mcoP2LC
lwidth 0
poly
mcoP1L mcoP2L mcoP2 mcoP1;
changec2 mcoColDS
lwidth 2.5
ifz
mcoD12LC-7.5 mcoDoneCrenLoop5
gn mcoLoopCount (mcoD12LC+2.5)/7.5
ifz
mcoLoopCount mcoDoneCrenLoop5
ifn mcoLoopCount mcoDoneCrenLoop5
gv
mcoCrenDist (mcoD12LC+2.5)/mcoLoopCount
gv mcoCurLen
0
:mcoCrenLoop5
line ref mcoP1LC <mcoB12,mcoCurLen ref mcoP1LC
<mcoB12,(mcoCurLen+mcoCrenDist-2.5);
changec2 mcoColDS
gv mcoCurLen
mcoCurLen+mcoCrenDist
gv mcoLoopCount mcoLoopCount-1
ifp mcoLoopCount
mcoCrenLoop5
:mcoDoneCrenLoop5
gl spacer
line
:mcoParapet3Cleanup
lwidth 0
selbyl
changel
MacroConstruction
like
10001,10001
selbyp
group
:mcoabort
selby1
keep
10001,10001
erase
10001,10001
selrest
rdon
econ
endm
Morgan Olden
Copyright © AD&Den`s Lair Все права защищены.