⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 piegraph_g.class

📁 是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到
💻 CLASS
📖 第 1 页 / 共 2 页
字号:
	}

	gettoken unused : what , qed(quoted)		// what to show
	if (`quoted')	local labtype text		
	else		local labtype `what'

	if `"`tstyle'"' == `""' {			// style info
		local tstyle `.style.pielabel_style.stylename'
	}
	if `"`position'"' == `""' {
		local position `.style.pielabel_pos.stylename'
	}
	if `"`format'"' == `""' {
		local format `.style.pielabel_format'
	}
	if `"`gap'"' == `""' {
		local gap `.style.pielabel_gap.val'
	}
	else {
		tempname gapstyle
		.`gapstyle' = .gsize.new, style(`.style.pielabel_gap.val')
		.`gapstyle'.setstyle , style(`gap')
		local gap `.`gapstyle'.val'
	}

							// create textbox(s)
	if `all' {
	    .sersets[1].set
	    forvalues dex = 1/0`:serset N' {
		.MakePlabel "`dex'" "`labtype'" `"`format'"' `"`position'"' ///
			   `"`gap'"' `"`what'"' `"`tstyle'"' `"`options'"'
	    }
	}
	else {
		.MakePlabel "`dex'" "`labtype'" `"`format'"' `"`position'"' ///
			   `"`gap'"' `"`what'"' `"`tstyle'"' `"`options'"'
	}

end

/*
program _parse_pie_full

 	syntax anything(name=wedges id=pie) [ , Color(string) 		///
		EXPLODE EXPLODE1(string) Label(string asis) ]

							// which wedges
	if `"`wedges'"' == "_all" {
		.sersets[1].set
		local wedges "1/`:serset N'"
	}
	capture numlist `"`wedges'"' , integer range(>0)
	if _rc {
		di as error `"invalid wedge numbers in pie(), `wedges'"'
		exit 198
	}
	local wedges "`r(numlist)'"

							// label() subotion
	if `"`label'"' != `""' {
		local 0 `"`label'"'
		syntax anything(name=lbl id=label) [ , POSition(string)	///
			GAP(string) FORmat(string) TSTYle(string) * ]

		gettoken unused : lbl , qed(quoted)		// what to show
		if (`quoted')	local labtype text		
		else		local labtype `lbl'

		if `"`tstyle'"' == `""' {			// style info
			local tstyle `.style.pielabel_style.stylename'
		}
		if `"`position'"' == `""' {
			local position `.style.pielabel_pos.stylename'
		}
		if `"`format'"' == `""' {
			local format `.style.pielabel_format'
		}
		if `"`gap'"' == `""' {
			local gap `.style.pielabel_gap.val'
		}
		else {
			tempname gapstyle
			.`gapstyle' = .gsize.new,			///
				      style(`.style.pielabel_gap.val')
			.`gapstyle'.setstyle , style(`gap')
			local gap `.`gapstyle'.val'
		}
	}

							// create and apply
	foreach dex of local wedges {
	    if `dex' > `:serset N' {
	    	di in green "(`dex' exceeds number of pie wedges, ignored)"
		continue
	    }

	    if "`.piestyles[`dex'].isa'" == "" {		// safety
		.piestyles[`dex'] = .areastyle.new, style(scheme p`dex')
		.SetIntensity `dex'
	    }

	    if `"`color'"' != `""' {				// color
		.piestyles[`dex'].editstyle shadestyle(color(`color')) editcopy
	    }

	    if "`explode'`explode1'" != "" {			// explosion
		if ("`.style.explode_gap.stylename'" == "") {
			local expstyle `.style.explode_gap.stylename'
		}
		else {
			local expstyle `.style.explode_gap.val'
		}
		.explodes[`dex'].ref = .gsize.new , style(`expstyle')

		if `"`explode1'"' != `""' {				
			.explodes[`dex'].setstyle , style(`explode1')
		}
	    }

	    if `"`label'"' != `""' {				// label
		.MakePlabel "`dex'" "`labtype'" `"`format'"' `"`position'"' ///
			   `"`gap'"' `"`what'"' `"`tstyle'"' `"`options'"'
	    }
	}
end
*/

program MakePlabel
	gettoken dex     0 : 0
	gettoken labtype 0 : 0
	gettoken format  0 : 0
	gettoken pos     0 : 0
	gettoken gap     0 : 0
	gettoken mtext   0 : 0
	gettoken tstyle  0 : 0
	gettoken txt_opts 0 : 0

	.sersets[1].set
	if `dex' > `:serset N' {
		di in green "`dex' larger than number of pie wedges, ignored"
		exit
	}

	if (serset(2,`dex') == 0)  exit


	local il = 0`.plabel.arrnels' + 1		// new label index

	if "`labtype'" != "text" {			// label text
		local 0 , `labtype'
		syntax [ , SUM PERcent NAme None * ]
		local labtype `sum' `percent' `name' `none' `options'
		if "`labtype'" == "name"         {
			local idex = serset(3,`dex')
			local mtext `"`.sersets[1].sers[3].value_label `idex''"'
		}
		else if "`labtype'" == "sum"     {
			local mtext = string(serset(1,`dex') , "`format'")
		}
		else if "`labtype'" == "percent" {
			local mtext = string(100 * serset(2, `dex') / 360,  ///
				"`format'") + "%"
		}
		else if "`labtype'" == "none"    {
			exit
		}
		else {
			di as error `"not a plabel() type , `labtype'"'
			exit 198
		}
	}
							// radius and gap
	.plab_gap[`il'] = `gap'
	if "`pos'" == "inside" {
		.plab_radius[`il'] = 2 / 3
	}
	else if "`pos'" == "outside" {
		.plab_radius[`il'] = 1
	}
	else {
		di as error `"invalid position(), `pos'"'
		exit 198
	}
							// create textbox

	.plabel[`il']   = .pos_textbox.new , mtext(`mtext')		///
			   forcesized style(`tstyle')
	.plab_dex[`il'] = `dex'

	tempname log
	.`log' = {}
	local 0 `", `options'"'
	_fr_sztextbox_parse_and_log `log' plabel[`il'] , `txt_opts'
	local 0 `", `r(rest)'"'
	syntax [, FAKE_OPT_FOR_BETTER_MSG ]

	_fr_runlog `log' , nologging
end


program ParsePtext , rclass
	
	syntax [ , PText(string asis) * ]

	while `"`ptext'"' != `""' {
		._parse_ptext `ptext'

		local 0 `", `options'"'
		syntax [ , PText(string asis) * ]
	}

	return local rest `"`options'"'
end

program _parse_ptext

	syntax [ anything(name=triplets) ] [ , TSTYle(string) * ]

	if `"`tstyle'"' == `""' {
		local tstyle "scheme text_option"
	}

							// create the textboxes
	tempname log
	gettoken angle  triplets : triplets
	gettoken radius triplets : triplets

	while `"`radius'"' != `""' {
		capture numlist "`angle' `radius'" , max(2) min(2)
		if _rc {
			di as error `"invalid point, `angle' `radius'"'
			exit 198
		}

		gettoken txtq triplets : triplets , quotes	// text
		gettoken txt           : txtq
		while `"`txtq'"' != `""' & `"`txtq'"' != `"`txt'"' {
			local mtext `"`mtext' `txtq'"'
			gettoken txtq triplets : triplets , quotes
			gettoken txt           : txtq
		}

		local i_b = 0`.ptext.arrnels' + 1
		.ptext[`i_b'] = .pos_textbox.new , mtext(`mtext')	///
				     forcesized style(`tstyle')
		.boxpos[`i_b'] = "`angle' `radius'"
		local mtext

		.`log' = {}
		_fr_sztextbox_parse_and_log `log' ptext[`i_b'] , `options'
		local 0 `", `r(rest)'"'
		syntax [, FAKE_OPT_FOR_BETTER_MSG ]

		_fr_runlog `log' , nologging

		local    angle `txt'
		gettoken radius triplets : triplets
	}
end


// ----------------------------------------------------------------------------
// Returns the mid-point (in radians) of the supplied wedge index.

program MidAngle
	args dex

	local angle0 `.style.angle0.val'
	local op = cond(`.style.clockwise.istrue' , "-" , "+")
	forvalues i=1/0`=`dex'-1' {
		local angle0 = `angle0' `op' serset(2, `i')
	}

	class exit = 2 * _pi * (`angle0' `op' serset(2, `dex') / 2) / 360
end
  
// ----------------------------------------------------------------------------
// Draws a pie

program drawpie
	syntax [ , XSize(real 1) YSize(real 1) * ]

	local radius0 = min(`xsize' , `ysize') / 2
	.radius = .Radius `radius0'

	.sersets[1].set

	local x0 = `xsize' / 2
	local y0 = `ysize' / 2

	local angle0 `.style.angle0.val'
	local op = cond(`.style.clockwise.istrue' , "-" , "+")
	forvalues i=1/0`:serset N' {

		if (`=serset(2 , `i')' <= 0) continue
		local angle = `angle0' `op' serset(2 , `i')

		if 0`.explodes[`i'].val' {
			local mid = _pi * (`angle' + `angle0') / 360
			local y = `y0' + sin(`mid') * `.explodes[`i'].gmval'
			local x = `x0' + cos(`mid') * `.explodes[`i'].gmval'
		}
		else {
			local x `x0'
			local y `y0'
		}

		.piestyles[`i'].setgdifull
		if "`.style.linestyle.color.stylename'" == "none" {
			.piestyles[`i'].shadestyle.setgdipenfull ,	///
				linewidth(.000001) nointensity
		}
		else	.style.linestyle.setgdifull

		if `angle0'+`angle' < . {
			if (`.style.clockwise.istrue') {
				gdi pieslice `x' `y' `.radius' `angle' `angle0'
			}
			else {
				gdi pieslice `x' `y' `.radius' `angle0' `angle'
			}
		}

		local angle0 `angle'
	}

	.DrawPtext   `x0' `y0'
	.DrawPlabels `x0' `y0'

end

program Radius
	args base

	class exit `base' - 0`.MaxExplode'
end

program MaxExplode

	forvalues i = 1/0`.explodes.arrnels' {
		local max = max(0`max' , 0`.explodes[`i'].gmval')
	}

	class exit = `max'
end

program DrawPtext
	args x0 y0

	forvalues i = 1/0`.ptext.arrnels' {
		tokenize `.boxpos[`i']'
		local angle = 2 * _pi * `1' / 360
		local y = `y0' + sin(`angle') * `2'
		local x = `x0' + cos(`angle') * `2'

		.ptext[`i'].setpos , xpos(`x') ypos(`y')
		.ptext[`i'].draw
	}
end


program DrawPlabels
	args x0 y0

	forvalues i = 1/0`.plabel.arrnels' {
		local dex `.plab_dex[`i']'
		local radius = `.radius'*`.plab_radius[`i']' +		///
			0`.plab_gap[`i']' + 0`.explodes[`dex'].gmval'
		local angle `.MidAngle `dex''

		local y = `y0' + sin(`angle') * `radius'
		local x = `x0' + cos(`angle') * `radius'

		.plabel[`i'].setpos , xpos(`x') ypos(`y')
		.plabel[`i'].draw
	}
end


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -