ก้าวต่อไปของโปรแกรมเขียนรูปตัดตามขวาง XSection Plot ในร่างใหม่พัฒนาด้วย Python + Qt

ลาก่อน XSection Plot รุ่น 3.25

  • โปรแกรมพล็อทรูปตัดตามขวาง XSection Plot เดิมๆนั้นผมเขียนด้วย Visual Basic 6 ใช้มาเป็นสิบๆปีแล้ว บัดนี้ถึงกาลเวลาที่จะต้องฝังในความทรงจำแล้ว เพราะฟอนต์ที่เคยแสดงผลได้ในวินโดส์ XP กลับกลายเป็นตัวประหลาดในวินโดส์ 7/8 ผมเข้าใจว่าฟอนต์ระบบที่เคยอยู่ในวินโดส์ XP น่าจะเป็นระบบแบบด็อทเมทริก น่าจะถูกถอดออกไปแล้วในวินโดส์ 7/8 จึงแสดงผลแบบอักขระประหลาดอย่างที่เห็นxsectionplot_old1
  • กลับมารื้อโค๊ดเดิมๆดูคร่าวๆ จำนวนบรรทัดหลายหมื่นบรรทัดทีเดียว ประกอบด้วยโมดูลและคลาสจำนวนมาก ออกอาการงงๆเหมือนกัน เพราะเขียนไว้นานแล้วภาษานี้ก็ไม่ได้เขียนนานแล้ว แต่ด้วยความง่ายของภาษา VB ใช้เวลาไม่นานก็รื้อฟื้น

แรงจูงใจในการนำมาพัฒนาใหม่

  • บอกตรงๆว่าทนเห็นโปรแกรมที่เคยใช้ได้ดีตอนอยู่วินโดส์ XP แต่มาล้มหายตายจากพอมาอยู่บนวินโดส์ 7/8 ไม่ได้ และความรู้สีกอยากช่วยผู้ที่ใช้งานโปรแกรมนี้ ในรุ่นเก่าแล้วต้องการย้ายงานมาบนวินโดส์ 7/8

เครื่องมือและสภาพแวดล้อมในการพัฒนา

  • ในตอนนี้ผมศึกษา Python อยู่ วิธีเดียวที่จะให้โปรแกรมมิงแตกฉาน คือลงมือเขียนโปรแกรม ก่อนหน้านี้ผมเริ่มเขียนด้วย Python เป็นเวอร์ชัน 2.7.5 แบบ 32 บิต ใช้ graphic user interface (GUI) ของ wxWidgets รวมๆเรียกว่า wxPython ตัวโปรแกรมที่ผมเขียนเป็นโปรแกรมด้าน GIS ใช้ Mapnik เป็นตัว  GIS Map Engine เขียนจนจบโปรแกรมนำมาใช้งานได้ดีพอสมควร  สำหรับผมแล้ว wxPython ก็โอเคในระดับหนึ่ง แต่ความรู้สึกส่วนตัวว่าค่อนข้างติดๆขัดๆไม่ลื่นไหล (ทัศนส่วนตัว)
  • ตอนหลังๆมาลองติดตั้ง Python 3.4 แล้วก็ลง Qt5 เรียกว่า PyQt5 แบบ 64 บิต ลองศึกษา Qt5 ควบคู่ไปด้วย ปรากฎว่าอันนี้ใช่เลย ตามสไตล์ของไพธ่อนครับ สั้น กระชับ ฉับไว ทรงพลัง ผมลงทุนไม่ดูโค๊ดเก่าที่เป็นวิชวลเบสิคเก่า ใช้เวลายามว่างๆ ลงมือเขียนใหม่ เกือบทั้งหมด
  • สภาพแวดล้อมในการพัฒนาใช้ Eclipse (ดั้งเดิมเป็น platform สำหรับพัฒนา Java) ในขณะที่เขียนอยู่เป็นรุน Luna ในส่วน Eclipse ติดตั้ง Plug-ins เพิ่มเติมคือตัว PyDev เพื่อให้สามารถใช้ Python บน Eclipse ได้ ทุกอย่างที่กล่าวมาฟรีหมดครับ

pydev_eclipse

XSection Plot โฉมใหม่ ไฉไลกว่าเดิม

  • มาดูหน้าตาโฉมใหม่ก็เรียบง่ายดังที่เห็น

xsectionplot_new1

xsectionplot_new2

ออกแบบไฟล์ข้อมูลใหม่ เป็น XML

  • ไฟล์ข้อมูลเดิมของ XSection Plot  รุ่นเก่าเป็นไฟล์ไบนารี ข้อเสีย คือมนุษย์อ่านไม่ออก ผู้ใช้ไม่สามารถเปิดไฟล์มาดูได้โดยตรง  ข้อเสียในแง่คนพัฒนาโปรแกรมคือ ขยายเพิ่มเติมข้อมูลลำบาก ก็เลยหันมามอง XML ที่เกิดมานมนานเป็นสิบๆปีแล้ว สนใจลองกดปุ่มบวกข้างล่างดูลักษณะไฟล์ข้อมูล แต่รุ่นจริงอาจจะมีการเปลี่ยนแปลง

[code language=”xml” collapse=”true”]
<root version=”1.0″>
<!–Generated by XSection Plot–>
<!–This data file is Existing ground section–>
<Header>
<AppName>XSection Plot</AppName>
<Developer>Prajuab Riabroy</Developer>
<Version>4.0.512</Version>
<SectionType>Ground</SectionType>
<DateCreated>2014-08-07 16:45:56.517701</DateCreated>
</Header>
<ProjectInfo>
<ProjectName>KohKong Coal-Fired Power Plant</ProjectName>
<ClientName>Harbour Department</ClientName>
<ContractorName>Universal Construction Development PCL.</ContractorName>
<DrawingTitle>Cross Section of Access Channel</DrawingTitle>
<DrawnName>DRS</DrawnName>
<ApprovedName>AS</ApprovedName>
<ClientApprovedName>AD</ClientApprovedName>
<CheckedName>PJ</CheckedName>
<SurveyorName>SK</SurveyorName>
<SurveyedDate>1-7/03/2010</SurveyedDate>
<DrawingNo></DrawingNo>
<SheetNo>1/</SheetNo>
<DrawingDate>1-7/03/2010</DrawingDate>
<Revision></Revision>
<UseLocaleLanguage>False</UseLocaleLanguage>
<MapTexts>
<MapText Label=”Client” Locale=”เจ้าของโครงการ”/>
<MapText Label=”Contractor” Locale=”ผู้รับเหมา”/>
<MapText Label=”Drawn” Locale=”เขียน”/>
<MapText Label=”Design” Locale=”ออกแบบ”/>
<MapText Label=”Surveyor” Locale=”สำรวจ”/>
<MapText Label=”Surveyed date” Locale=”วันที่สำรวจ”/>
<MapText Label=”Checked” Locale=”ตรวจสอบ”/>
<MapText Label=”Approved” Locale=”อนุมัติ”/>
<MapText Label=”Client approved” Locale=”ผู้คุมงานอนุมัติ”/>
<MapText Label=”Drawing No.” Locale=”แบบเลขที่”/>
<MapText Label=”Drawing date” Locale=”แบบวันที่”/>
<MapText Label=”Project title” Locale=”โครงการ”/>
<MapText Label=”Drawing title” Locale=”แผนที่แสดง”/>
<MapText Label=”Sheet No.” Locale=”แบบเลขที่”/>
<MapText Label=”Scale” Locale=”มาตราส่วน”/>
<MapText Label=”Vertical” Locale=”ทางดิ่ง”/>
<MapText Label=”Horizontal” Locale=”ทางราบ”/>
<MapText Label=”Vertical scale” Locale=”มาตราส่วนทางดิ่ง”/>
<MapText Label=”Horizontal scale” Locale=”มาตราส่วนทางราบ”/>
<MapText Label=”Legend” Locale=”สัญลักษณ์”/>
<MapText Label=”Notes” Locale=”หมายเหตุ”/>
<MapText Label=”Geodetic Information” Locale=”ข้อมูลทางยีออเดซี”/>
<MapText Label=”No” Locale=”ครั้งที่”/>
<MapText Label=”Amendments” Locale=”ความเห็น”/>
<MapText Label=”By” Locale=”โดย”/>
<MapText Label=”Date” Locale=”วันที่”/>
<MapText Label=”Revision” Locale=”ครั้งที่แก้ไข”/>
</MapTexts>
</ProjectInfo>
<SectionOptions>
<VerticalScale>250.0</VerticalScale>
<HorizontalScale>2500.0</HorizontalScale>
<HozGridSpace>25.0</HozGridSpace>
<VertGridSpace>2.0</VertGridSpace>
<GridLineType>1</GridLineType>
<CalcIntersection>-1</CalcIntersection>
<CalcArea>-1</CalcArea>
<TrimTypical>0</TrimTypical>
<NumDecimalElev>3</NumDecimalElev>
<NumDecimalDist>3</NumDecimalDist>
<UseIntervalText>-1</UseIntervalText>
<IntervalDist>25.0</IntervalDist>
<PrefixText></PrefixText>
<PostfixText></PostfixText>
<UsePostPrefix>0</UsePostPrefix>
<UseOffsetElevFormat>2</UseOffsetElevFormat>
<CalcPlotAreaCut>0</CalcPlotAreaCut>
<CalcPlotAreaFill>0</CalcPlotAreaFill>
<NumVertCLLeft>18</NumVertCLLeft>
<NumVertCLRight>18</NumVertCLRight>
<NumHozTopBottom>8</NumHozTopBottom>
<LeftSideText>LT.</LeftSideText>
<RightSideText>RT.</RightSideText>
<StationText>Km.</StationText>
<SelectedTBlock>3</SelectedTBlock>
<NumSectionRows>6</NumSectionRows>
<NumSectionColumns>2</NumSectionColumns>
<SurveyType>0</SurveyType>
<PlotTBlock>-1</PlotTBlock>
<SwapLeftAndRight>0</SwapLeftAndRight>
</SectionOptions>
<PageSetup>
<PaperSize>A1</PaperSize>
<PageWidth>-999</PageWidth>
<PaperHeight>-999</PaperHeight>
</PageSetup>
<Sections>
<NumSections>12</NumSections>
<Section Name=”2 + 000″>
<XPositionOnPaper>51.66</XPositionOnPaper>
<YPositionOnPaper>21.18</YPositionOnPaper>
<TopGridElev>0.0</TopGridElev>
<NumPoints>37</NumPoints>
<Points>
<Point Elevation=”-13.75″ Offset=”-450.0″/>
<Point Elevation=”-13.724″ Offset=”-444.229″/>
<Point Elevation=”-13.453″ Offset=”-394.64″/>
<Point Elevation=”-13.708″ Offset=”-357.293″/>
<Point Elevation=”-13.832″ Offset=”-340.678″/>
<Point Elevation=”-13.815″ Offset=”-321.128″/>
<Point Elevation=”-13.812″ Offset=”-303.689″/>
<Point Elevation=”-13.817″ Offset=”-263.4″/>
<Point Elevation=”-13.795″ Offset=”-256.48″/>
<Point Elevation=”-13.774″ Offset=”-237.844″/>
<Point Elevation=”-13.725″ Offset=”-215.868″/>
<Point Elevation=”-13.694″ Offset=”-179.238″/>
<Point Elevation=”-13.694″ Offset=”-146.471″/>
<Point Elevation=”-13.641″ Offset=”-126.792″/>
<Point Elevation=”-13.651″ Offset=”-77.938″/>
<Point Elevation=”-13.577″ Offset=”-68.628″/>
<Point Elevation=”-13.573″ Offset=”-67.035″/>
<Point Elevation=”-13.578″ Offset=”-57.508″/>
<Point Elevation=”-13.545″ Offset=”-14.98″/>
<Point Elevation=”-13.551″ Offset=”-2.388″/>
<Point Elevation=”-13.569″ Offset=”19.95″/>
<Point Elevation=”-13.553″ Offset=”64.032″/>
<Point Elevation=”-13.541″ Offset=”72.772″/>
<Point Elevation=”-13.516″ Offset=”81.096″/>
<Point Elevation=”-13.614″ Offset=”138.343″/>
<Point Elevation=”-13.629″ Offset=”150.271″/>
<Point Elevation=”-13.556″ Offset=”198.013″/>
<Point Elevation=”-13.557″ Offset=”211.934″/>
<Point Elevation=”-13.577″ Offset=”254.983″/>
<Point Elevation=”-13.624″ Offset=”269.121″/>
<Point Elevation=”-13.736″ Offset=”298.975″/>
<Point Elevation=”-13.717″ Offset=”339.278″/>
<Point Elevation=”-13.679″ Offset=”356.86″/>
<Point Elevation=”-13.497″ Offset=”383.249″/>
<Point Elevation=”-13.423″ Offset=”405.804″/>
<Point Elevation=”-13.548″ Offset=”442.413″/>
<Point Elevation=”-13.59″ Offset=”450.0″/>
</Points>
</Section>
<Section Name=”2 + 050″>
<XPositionOnPaper>42.78</XPositionOnPaper>
<YPositionOnPaper>21.18</YPositionOnPaper>
<TopGridElev>0.0</TopGridElev>
<NumPoints>37</NumPoints>
<Points>
<Point Elevation=”-13.587″ Offset=”-450.0″/>
<Point Elevation=”-13.564″ Offset=”-431.93″/>
<Point Elevation=”-13.389″ Offset=”-392.416″/>
<Point Elevation=”-13.59″ Offset=”-363.705″/>
<Point Elevation=”-13.714″ Offset=”-349.243″/>
<Point Elevation=”-13.648″ Offset=”-319.939″/>
<Point Elevation=”-13.613″ Offset=”-305.319″/>
<Point Elevation=”-13.836″ Offset=”-245.696″/>
<Point Elevation=”-13.833″ Offset=”-244.203″/>
<Point Elevation=”-13.656″ Offset=”-200.692″/>
<Point Elevation=”-13.608″ Offset=”-176.25″/>
<Point Elevation=”-13.525″ Offset=”-143.894″/>
<Point Elevation=”-13.552″ Offset=”-129.046″/>
<Point Elevation=”-13.527″ Offset=”-96.253″/>
<Point Elevation=”-13.656″ Offset=”-54.905″/>
<Point Elevation=”-13.654″ Offset=”-53.835″/>
<Point Elevation=”-13.566″ Offset=”-45.158″/>
<Point Elevation=”-13.591″ Offset=”-20.343″/>
<Point Elevation=”-13.567″ Offset=”-0.305″/>
<Point Elevation=”-13.438″ Offset=”26.667″/>
<Point Elevation=”-13.397″ Offset=”59.524″/>
<Point Elevation=”-13.375″ Offset=”70.237″/>
<Point Elevation=”-13.38″ Offset=”77.772″/>
<Point Elevation=”-13.49″ Offset=”115.256″/>
<Point Elevation=”-13.6″ Offset=”156.486″/>
<Point Elevation=”-13.475″ Offset=”180.904″/>
<Point Elevation=”-13.453″ Offset=”188.472″/>
<Point Elevation=”-13.454″ Offset=”203.878″/>
<Point Elevation=”-13.471″ Offset=”256.873″/>
<Point Elevation=”-13.554″ Offset=”276.218″/>
<Point Elevation=”-13.604″ Offset=”294.693″/>
<Point Elevation=”-13.63″ Offset=”328.866″/>
<Point Elevation=”-13.63″ Offset=”355.449″/>
<Point Elevation=”-13.502″ Offset=”374.332″/>
<Point Elevation=”-13.316″ Offset=”406.895″/>
<Point Elevation=”-13.486″ Offset=”441.986″/>
<Point Elevation=”-13.52″ Offset=”450.0″/>
</Points>
</Section>
<Section Name=”2 + 100″>
<XPositionOnPaper>33.89</XPositionOnPaper>
<YPositionOnPaper>21.18</YPositionOnPaper>
<TopGridElev>0.0</TopGridElev>
<NumPoints>38</NumPoints>
<Points>
<Point Elevation=”-13.478″ Offset=”-450.0″/>
<Point Elevation=”-13.468″ Offset=”-424.977″/>
<Point Elevation=”-13.401″ Offset=”-404.422″/>
<Point Elevation=”-13.463″ Offset=”-387.405″/>
<Point Elevation=”-13.633″ Offset=”-344.262″/>
<Point Elevation=”-13.608″ Offset=”-339.036″/>
<Point Elevation=”-13.494″ Offset=”-305.986″/>
<Point Elevation=”-13.552″ Offset=”-274.196″/>
<Point Elevation=”-13.555″ Offset=”-259.655″/>
<Point Elevation=”-13.555″ Offset=”-237.91″/>
<Point Elevation=”-13.486″ Offset=”-192.39″/>
<Point Elevation=”-13.35″ Offset=”-155.4″/>
<Point Elevation=”-13.323″ Offset=”-145.491″/>
<Point Elevation=”-13.288″ Offset=”-86.808″/>
<Point Elevation=”-13.275″ Offset=”-58.314″/>
<Point Elevation=”-13.286″ Offset=”-56.712″/>
<Point Elevation=”-13.511″ Offset=”-44.626″/>
<Point Elevation=”-13.477″ Offset=”-19.724″/>
<Point Elevation=”-13.435″ Offset=”-1.021″/>
<Point Elevation=”-13.385″ Offset=”20.078″/>
<Point Elevation=”-13.354″ Offset=”48.949″/>
<Point Elevation=”-13.322″ Offset=”58.859″/>
<Point Elevation=”-13.309″ Offset=”73.917″/>
<Point Elevation=”-13.431″ Offset=”135.063″/>
<Point Elevation=”-13.512″ Offset=”161.041″/>
<Point Elevation=”-13.36″ Offset=”170.629″/>
<Point Elevation=”-13.285″ Offset=”176.557″/>
<Point Elevation=”-13.303″ Offset=”252.984″/>
<Point Elevation=”-13.309″ Offset=”261.078″/>
<Point Elevation=”-13.349″ Offset=”269.352″/>
<Point Elevation=”-13.442″ Offset=”286.219″/>
<Point Elevation=”-13.451″ Offset=”289.018″/>
<Point Elevation=”-13.454″ Offset=”295.508″/>
<Point Elevation=”-13.381″ Offset=”357.63″/>
<Point Elevation=”-13.291″ Offset=”397.562″/>
<Point Elevation=”-13.265″ Offset=”410.885″/>
<Point Elevation=”-13.291″ Offset=”415.854″/>
<Point Elevation=”-13.436″ Offset=”450.0″/>
</Points>
</Section>
<Section Name=”2 + 150″>
<XPositionOnPaper>25.01</XPositionOnPaper>
<YPositionOnPaper>21.18</YPositionOnPaper>
<TopGridElev>0.0</TopGridElev>
<NumPoints>36</NumPoints>
<Points>
<Point Elevation=”-13.42″ Offset=”-450.0″/>
<Point Elevation=”-13.422″ Offset=”-448.815″/>
<Point Elevation=”-13.36″ Offset=”-407.76″/>
<Point Elevation=”-13.421″ Offset=”-383.018″/>
<Point Elevation=”-13.466″ Offset=”-343.431″/>
<Point Elevation=”-13.477″ Offset=”-330.434″/>
<Point Elevation=”-13.426″ Offset=”-308.725″/>
<Point Elevation=”-13.339″ Offset=”-248.217″/>
<Point Elevation=”-13.318″ Offset=”-227.42″/>
<Point Elevation=”-13.346″ Offset=”-185.203″/>
<Point Elevation=”-13.22″ Offset=”-153.307″/>
<Point Elevation=”-13.204″ Offset=”-149.805″/>
<Point Elevation=”-13.299″ Offset=”-109.743″/>
<Point Elevation=”-13.355″ Offset=”-76.976″/>
<Point Elevation=”-13.291″ Offset=”-70.628″/>
<Point Elevation=”-13.2″ Offset=”-57.454″/>
<Point Elevation=”-13.217″ Offset=”-40.497″/>
<Point Elevation=”-13.27″ Offset=”-5.497″/>
<Point Elevation=”-13.298″ Offset=”42.337″/>
<Point Elevation=”-13.313″ Offset=”57.83″/>
<Point Elevation=”-13.306″ Offset=”58.86″/>
<Point Elevation=”-13.119″ Offset=”66.396″/>
<Point Elevation=”-13.147″ Offset=”99.813″/>
<Point Elevation=”-13.307″ Offset=”160.186″/>
<Point Elevation=”-13.248″ Offset=”169.925″/>
<Point Elevation=”-13.135″ Offset=”176.817″/>
<Point Elevation=”-13.233″ Offset=”220.607″/>
<Point Elevation=”-13.302″ Offset=”256.981″/>
<Point Elevation=”-13.362″ Offset=”268.584″/>
<Point Elevation=”-13.398″ Offset=”285.574″/>
<Point Elevation=”-13.254″ Offset=”344.07″/>
<Point Elevation=”-13.228″ Offset=”357.109″/>
<Point Elevation=”-13.214″ Offset=”363.701″/>
<Point Elevation=”-13.071″ Offset=”408.839″/>
<Point Elevation=”-13.195″ Offset=”427.653″/>
<Point Elevation=”-13.336″ Offset=”450.0″/>
</Points>
</Section>
<Section Name=”2 + 200″>
<XPositionOnPaper>16.13</XPositionOnPaper>
<YPositionOnPaper>21.18</YPositionOnPaper>
<TopGridElev>0.0</TopGridElev>
<NumPoints>34</NumPoints>
<Points>
<Point Elevation=”-13.299″ Offset=”-450.0″/>
<Point Elevation=”-13.244″ Offset=”-436.225″/>
<Point Elevation=”-13.11″ Offset=”-404.037″/>
<Point Elevation=”-13.219″ Offset=”-363.07″/>
<Point Elevation=”-13.268″ Offset=”-346.98″/>
<Point Elevation=”-13.241″ Offset=”-317.712″/>
<Point Elevation=”-13.227″ Offset=”-310.438″/>
<Point Elevation=”-13.238″ Offset=”-280.224″/>
<Point Elevation=”-13.258″ Offset=”-255.553″/>
<Point Elevation=”-13.299″ Offset=”-211.447″/>
<Point Elevation=”-13.297″ Offset=”-203.957″/>
<Point Elevation=”-13.325″ Offset=”-143.444″/>
<Point Elevation=”-13.182″ Offset=”-96.867″/>
<Point Elevation=”-13.167″ Offset=”-71.842″/>
<Point Elevation=”-13.173″ Offset=”-66.961″/>
<Point Elevation=”-13.161″ Offset=”-63.511″/>
<Point Elevation=”-13.105″ Offset=”-25.008″/>
<Point Elevation=”-13.095″ Offset=”-1.821″/>
<Point Elevation=”-13.263″ Offset=”45.687″/>
<Point Elevation=”-13.267″ Offset=”49.066″/>
<Point Elevation=”-13.264″ Offset=”49.467″/>
<Point Elevation=”-13.074″ Offset=”66.884″/>
<Point Elevation=”-13.11″ Offset=”161.015″/>
<Point Elevation=”-13.061″ Offset=”165.896″/>
<Point Elevation=”-13.022″ Offset=”174.39″/>
<Point Elevation=”-13.136″ Offset=”236.021″/>
<Point Elevation=”-13.157″ Offset=”249.355″/>
<Point Elevation=”-13.194″ Offset=”259.713″/>
<Point Elevation=”-13.265″ Offset=”285.85″/>
<Point Elevation=”-13.251″ Offset=”296.83″/>
<Point Elevation=”-13.145″ Offset=”348.582″/>
<Point Elevation=”-13.023″ Offset=”386.699″/>
<Point Elevation=”-12.918″ Offset=”410.555″/>
<Point Elevation=”-13.122″ Offset=”450.0″/>
</Points>
</Section>
<Section Name=”2 + 250″>
<XPositionOnPaper>7.24</XPositionOnPaper>
<YPositionOnPaper>21.18</YPositionOnPaper>
<TopGridElev>0.0</TopGridElev>
<NumPoints>35</NumPoints>
<Points>
<Point Elevation=”-13.141″ Offset=”-450.0″/>
<Point Elevation=”-13.135″ Offset=”-427.089″/>
<Point Elevation=”-13.116″ Offset=”-408.612″/>
<Point Elevation=”-13.158″ Offset=”-378.649″/>
<Point Elevation=”-13.208″ Offset=”-347.778″/>
<Point Elevation=”-13.103″ Offset=”-300.077″/>
<Point Elevation=”-13.082″ Offset=”-258.336″/>
<Point Elevation=”-13.043″ Offset=”-232.005″/>
<Point Elevation=”-13.019″ Offset=”-212.37″/>
<Point Elevation=”-13.039″ Offset=”-193.983″/>
<Point Elevation=”-13.092″ Offset=”-151.651″/>
<Point Elevation=”-13.105″ Offset=”-143.345″/>
<Point Elevation=”-13.093″ Offset=”-121.002″/>
<Point Elevation=”-13.082″ Offset=”-74.012″/>
<Point Elevation=”-13.072″ Offset=”-70.704″/>
<Point Elevation=”-12.939″ Offset=”-61.159″/>
<Point Elevation=”-12.878″ Offset=”-54.908″/>
<Point Elevation=”-13.036″ Offset=”-16.297″/>
<Point Elevation=”-12.959″ Offset=”13.485″/>
<Point Elevation=”-13.014″ Offset=”34.515″/>
<Point Elevation=”-13.016″ Offset=”41.274″/>
<Point Elevation=”-12.881″ Offset=”73.456″/>
<Point Elevation=”-12.997″ Offset=”132.919″/>
<Point Elevation=”-13.083″ Offset=”160.722″/>
<Point Elevation=”-12.971″ Offset=”167.25″/>
<Point Elevation=”-12.897″ Offset=”174.705″/>
<Point Elevation=”-12.973″ Offset=”224.215″/>
<Point Elevation=”-13.039″ Offset=”247.5″/>
<Point Elevation=”-12.997″ Offset=”275.574″/>
<Point Elevation=”-12.965″ Offset=”306.485″/>
<Point Elevation=”-12.954″ Offset=”335.878″/>
<Point Elevation=”-12.932″ Offset=”347.275″/>
<Point Elevation=”-12.763″ Offset=”408.665″/>
<Point Elevation=”-12.844″ Offset=”430.348″/>
<Point Elevation=”-12.93″ Offset=”450.0″/>
</Points>
</Section>
<Section Name=”2 + 300″>
<XPositionOnPaper>51.66</XPositionOnPaper>
<YPositionOnPaper>62.03</YPositionOnPaper>
<TopGridElev>0.0</TopGridElev>
<NumPoints>34</NumPoints>
<Points>
<Point Elevation=”-13.074″ Offset=”-450.0″/>
<Point Elevation=”-12.945″ Offset=”-417.015″/>
<Point Elevation=”-12.941″ Offset=”-415.185″/>
<Point Elevation=”-13.024″ Offset=”-341.605″/>
<Point Elevation=”-13.123″ Offset=”-294.567″/>
<Point Elevation=”-13.107″ Offset=”-279.439″/>
<Point Elevation=”-13.068″ Offset=”-253.199″/>
<Point Elevation=”-13.027″ Offset=”-222.165″/>
<Point Elevation=”-13.007″ Offset=”-210.839″/>
<Point Elevation=”-12.978″ Offset=”-193.209″/>
<Point Elevation=”-12.874″ Offset=”-146.031″/>
<Point Elevation=”-12.947″ Offset=”-112.293″/>
<Point Elevation=”-12.994″ Offset=”-74.731″/>
<Point Elevation=”-12.951″ Offset=”-56.842″/>
<Point Elevation=”-12.941″ Offset=”-51.044″/>
<Point Elevation=”-12.928″ Offset=”-49.349″/>
<Point Elevation=”-12.919″ Offset=”-41.744″/>
<Point Elevation=”-12.857″ Offset=”-17.072″/>
<Point Elevation=”-12.849″ Offset=”-1.213″/>
<Point Elevation=”-12.937″ Offset=”29.996″/>
<Point Elevation=”-12.943″ Offset=”43.79″/>
<Point Elevation=”-12.822″ Offset=”75.413″/>
<Point Elevation=”-12.792″ Offset=”80.941″/>
<Point Elevation=”-12.826″ Offset=”90.04″/>
<Point Elevation=”-13.069″ Offset=”164.519″/>
<Point Elevation=”-12.837″ Offset=”183.079″/>
<Point Elevation=”-12.873″ Offset=”222.341″/>
<Point Elevation=”-12.893″ Offset=”250.522″/>
<Point Elevation=”-12.863″ Offset=”272.959″/>
<Point Elevation=”-12.84″ Offset=”289.627″/>
<Point Elevation=”-12.791″ Offset=”341.037″/>
<Point Elevation=”-12.791″ Offset=”375.553″/>
<Point Elevation=”-12.778″ Offset=”402.959″/>
<Point Elevation=”-12.782″ Offset=”450.0″/>
</Points>
</Section>
<Section Name=”2 + 350″>
<XPositionOnPaper>42.78</XPositionOnPaper>
<YPositionOnPaper>62.03</YPositionOnPaper>
<TopGridElev>0.0</TopGridElev>
<NumPoints>35</NumPoints>
<Points>
<Point Elevation=”-12.783″ Offset=”-450.0″/>
<Point Elevation=”-12.807″ Offset=”-423.664″/>
<Point Elevation=”-12.842″ Offset=”-402.422″/>
<Point Elevation=”-12.834″ Offset=”-393.811″/>
<Point Elevation=”-12.879″ Offset=”-350.323″/>
<Point Elevation=”-12.966″ Offset=”-318.938″/>
<Point Elevation=”-13.011″ Offset=”-304.688″/>
<Point Elevation=”-12.898″ Offset=”-262.751″/>
<Point Elevation=”-12.866″ Offset=”-244.765″/>
<Point Elevation=”-12.876″ Offset=”-206.942″/>
<Point Elevation=”-12.88″ Offset=”-204.564″/>
<Point Elevation=”-12.856″ Offset=”-158.672″/>
<Point Elevation=”-12.786″ Offset=”-141.587″/>
<Point Elevation=”-12.787″ Offset=”-103.149″/>
<Point Elevation=”-12.766″ Offset=”-91.41″/>
<Point Elevation=”-12.779″ Offset=”-82.894″/>
<Point Elevation=”-12.781″ Offset=”-78.804″/>
<Point Elevation=”-12.767″ Offset=”-58.384″/>
<Point Elevation=”-12.765″ Offset=”-39.14″/>
<Point Elevation=”-12.676″ Offset=”-10.552″/>
<Point Elevation=”-12.786″ Offset=”13.725″/>
<Point Elevation=”-12.924″ Offset=”42.861″/>
<Point Elevation=”-12.794″ Offset=”60.497″/>
<Point Elevation=”-12.654″ Offset=”81.948″/>
<Point Elevation=”-12.833″ Offset=”123.769″/>
<Point Elevation=”-12.916″ Offset=”163.182″/>
<Point Elevation=”-12.784″ Offset=”181.207″/>
<Point Elevation=”-12.765″ Offset=”188.92″/>
<Point Elevation=”-12.792″ Offset=”255.693″/>
<Point Elevation=”-12.815″ Offset=”295.177″/>
<Point Elevation=”-12.79″ Offset=”315.292″/>
<Point Elevation=”-12.749″ Offset=”345.204″/>
<Point Elevation=”-12.744″ Offset=”364.207″/>
<Point Elevation=”-12.753″ Offset=”396.564″/>
<Point Elevation=”-12.68″ Offset=”450.0″/>
</Points>
</Section>
<Section Name=”2 + 400″>
<XPositionOnPaper>33.89</XPositionOnPaper>
<YPositionOnPaper>62.03</YPositionOnPaper>
<TopGridElev>0.0</TopGridElev>
<NumPoints>36</NumPoints>
<Points>
<Point Elevation=”-12.776″ Offset=”-450.0″/>
<Point Elevation=”-12.779″ Offset=”-447.698″/>
<Point Elevation=”-12.774″ Offset=”-434.746″/>
<Point Elevation=”-12.716″ Offset=”-414.286″/>
<Point Elevation=”-12.81″ Offset=”-359.948″/>
<Point Elevation=”-12.835″ Offset=”-352.389″/>
<Point Elevation=”-12.834″ Offset=”-346.592″/>
<Point Elevation=”-12.907″ Offset=”-315.681″/>
<Point Elevation=”-12.863″ Offset=”-285.783″/>
<Point Elevation=”-12.746″ Offset=”-240.545″/>
<Point Elevation=”-12.748″ Offset=”-212.21″/>
<Point Elevation=”-12.82″ Offset=”-189.251″/>
<Point Elevation=”-12.715″ Offset=”-173.517″/>
<Point Elevation=”-12.632″ Offset=”-145.846″/>
<Point Elevation=”-12.591″ Offset=”-106.965″/>
<Point Elevation=”-12.571″ Offset=”-91.109″/>
<Point Elevation=”-12.571″ Offset=”-48.284″/>
<Point Elevation=”-12.577″ Offset=”-45.561″/>
<Point Elevation=”-12.599″ Offset=”-14.411″/>
<Point Elevation=”-12.787″ Offset=”15.841″/>
<Point Elevation=”-12.859″ Offset=”44.469″/>
<Point Elevation=”-12.629″ Offset=”73.752″/>
<Point Elevation=”-12.541″ Offset=”85.843″/>
<Point Elevation=”-12.606″ Offset=”127.261″/>
<Point Elevation=”-12.689″ Offset=”164.56″/>
<Point Elevation=”-12.777″ Offset=”188.004″/>
<Point Elevation=”-12.794″ Offset=”194.282″/>
<Point Elevation=”-12.765″ Offset=”220.036″/>
<Point Elevation=”-12.697″ Offset=”257.027″/>
<Point Elevation=”-12.742″ Offset=”298.261″/>
<Point Elevation=”-12.761″ Offset=”308.727″/>
<Point Elevation=”-12.739″ Offset=”317.584″/>
<Point Elevation=”-12.692″ Offset=”346.633″/>
<Point Elevation=”-12.663″ Offset=”389.2″/>
<Point Elevation=”-12.662″ Offset=”396.811″/>
<Point Elevation=”-12.622″ Offset=”450.0″/>
</Points>
</Section>
<Section Name=”2 + 450″>
<XPositionOnPaper>25.01</XPositionOnPaper>
<YPositionOnPaper>62.03</YPositionOnPaper>
<TopGridElev>0.0</TopGridElev>
<NumPoints>35</NumPoints>
<Points>
<Point Elevation=”-12.772″ Offset=”-450.0″/>
<Point Elevation=”-12.779″ Offset=”-447.895″/>
<Point Elevation=”-12.728″ Offset=”-435.359″/>
<Point Elevation=”-12.625″ Offset=”-419.964″/>
<Point Elevation=”-12.671″ Offset=”-361.947″/>
<Point Elevation=”-12.65″ Offset=”-349.652″/>
<Point Elevation=”-12.745″ Offset=”-323.285″/>
<Point Elevation=”-12.881″ Offset=”-302.461″/>
<Point Elevation=”-12.774″ Offset=”-273.658″/>
<Point Elevation=”-12.614″ Offset=”-241.564″/>
<Point Elevation=”-12.923″ Offset=”-198.167″/>
<Point Elevation=”-12.751″ Offset=”-169.044″/>
<Point Elevation=”-12.581″ Offset=”-144.88″/>
<Point Elevation=”-12.616″ Offset=”-115.712″/>
<Point Elevation=”-12.607″ Offset=”-103.85″/>
<Point Elevation=”-12.527″ Offset=”-58.007″/>
<Point Elevation=”-12.522″ Offset=”-49.404″/>
<Point Elevation=”-12.511″ Offset=”-40.605″/>
<Point Elevation=”-12.526″ Offset=”-7.582″/>
<Point Elevation=”-12.637″ Offset=”44.494″/>
<Point Elevation=”-12.638″ Offset=”46.028″/>
<Point Elevation=”-12.336″ Offset=”98.718″/>
<Point Elevation=”-12.345″ Offset=”101.193″/>
<Point Elevation=”-12.764″ Offset=”162.39″/>
<Point Elevation=”-12.66″ Offset=”204.444″/>
<Point Elevation=”-12.627″ Offset=”229.054″/>
<Point Elevation=”-12.548″ Offset=”258.494″/>
<Point Elevation=”-12.644″ Offset=”293.019″/>
<Point Elevation=”-12.669″ Offset=”307.749″/>
<Point Elevation=”-12.618″ Offset=”321.733″/>
<Point Elevation=”-12.477″ Offset=”351.792″/>
<Point Elevation=”-12.529″ Offset=”375.735″/>
<Point Elevation=”-12.545″ Offset=”385.798″/>
<Point Elevation=”-12.574″ Offset=”415.152″/>
<Point Elevation=”-12.621″ Offset=”450.0″/>
</Points>
</Section>
<Section Name=”2 + 500″>
<XPositionOnPaper>16.13</XPositionOnPaper>
<YPositionOnPaper>62.03</YPositionOnPaper>
<TopGridElev>0.0</TopGridElev>
<NumPoints>37</NumPoints>
<Points>
<Point Elevation=”-12.675″ Offset=”-450.0″/>
<Point Elevation=”-12.682″ Offset=”-448.083″/>
<Point Elevation=”-12.672″ Offset=”-428.342″/>
<Point Elevation=”-12.68″ Offset=”-425.205″/>
<Point Elevation=”-12.649″ Offset=”-408.657″/>
<Point Elevation=”-12.507″ Offset=”-340.077″/>
<Point Elevation=”-12.62″ Offset=”-320.546″/>
<Point Elevation=”-12.737″ Offset=”-293.581″/>
<Point Elevation=”-12.521″ Offset=”-251.753″/>
<Point Elevation=”-12.513″ Offset=”-249.937″/>
<Point Elevation=”-12.801″ Offset=”-216.359″/>
<Point Elevation=”-12.653″ Offset=”-174.972″/>
<Point Elevation=”-12.591″ Offset=”-158.425″/>
<Point Elevation=”-12.541″ Offset=”-144.303″/>
<Point Elevation=”-12.614″ Offset=”-115.444″/>
<Point Elevation=”-12.615″ Offset=”-111.726″/>
<Point Elevation=”-12.6″ Offset=”-104.058″/>
<Point Elevation=”-12.415″ Offset=”-42.364″/>
<Point Elevation=”-12.406″ Offset=”-28.724″/>
<Point Elevation=”-12.416″ Offset=”-1.475″/>
<Point Elevation=”-12.36″ Offset=”38.494″/>
<Point Elevation=”-12.353″ Offset=”52.28″/>
<Point Elevation=”-12.321″ Offset=”63.68″/>
<Point Elevation=”-12.198″ Offset=”112.168″/>
<Point Elevation=”-12.383″ Offset=”139.067″/>
<Point Elevation=”-12.577″ Offset=”161.059″/>
<Point Elevation=”-12.541″ Offset=”188.84″/>
<Point Elevation=”-12.454″ Offset=”213.082″/>
<Point Elevation=”-12.385″ Offset=”256.777″/>
<Point Elevation=”-12.375″ Offset=”261.779″/>
<Point Elevation=”-12.415″ Offset=”269.668″/>
<Point Elevation=”-12.639″ Offset=”309.342″/>
<Point Elevation=”-12.483″ Offset=”329.784″/>
<Point Elevation=”-12.337″ Offset=”352.33″/>
<Point Elevation=”-12.37″ Offset=”365.049″/>
<Point Elevation=”-12.507″ Offset=”423.352″/>
<Point Elevation=”-12.597″ Offset=”450.0″/>
</Points>
</Section>
<Section Name=”2 + 550″>
<XPositionOnPaper>7.24</XPositionOnPaper>
<YPositionOnPaper>62.03</YPositionOnPaper>
<TopGridElev>0.0</TopGridElev>
<NumPoints>40</NumPoints>
<Points>
<Point Elevation=”-12.351″ Offset=”-450.0″/>
<Point Elevation=”-12.346″ Offset=”-440.604″/>
<Point Elevation=”-12.456″ Offset=”-420.924″/>
<Point Elevation=”-12.422″ Offset=”-356.665″/>
<Point Elevation=”-12.436″ Offset=”-351.476″/>
<Point Elevation=”-12.433″ Offset=”-348.926″/>
<Point Elevation=”-12.599″ Offset=”-305.043″/>
<Point Elevation=”-12.617″ Offset=”-296.42″/>
<Point Elevation=”-12.516″ Offset=”-254.712″/>
<Point Elevation=”-12.489″ Offset=”-238.476″/>
<Point Elevation=”-12.648″ Offset=”-206.205″/>
<Point Elevation=”-12.563″ Offset=”-187.983″/>
<Point Elevation=”-12.407″ Offset=”-147.195″/>
<Point Elevation=”-12.453″ Offset=”-122.034″/>
<Point Elevation=”-12.46″ Offset=”-116.462″/>
<Point Elevation=”-12.465″ Offset=”-115.775″/>
<Point Elevation=”-12.453″ Offset=”-110.426″/>
<Point Elevation=”-12.39″ Offset=”-62.05″/>
<Point Elevation=”-12.294″ Offset=”-40.738″/>
<Point Elevation=”-12.318″ Offset=”-24.44″/>
<Point Elevation=”-12.277″ Offset=”-5.967″/>
<Point Elevation=”-12.467″ Offset=”31.391″/>
<Point Elevation=”-12.537″ Offset=”53.35″/>
<Point Elevation=”-12.432″ Offset=”77.607″/>
<Point Elevation=”-12.187″ Offset=”125.999″/>
<Point Elevation=”-12.356″ Offset=”151.552″/>
<Point Elevation=”-12.421″ Offset=”160.797″/>
<Point Elevation=”-12.325″ Offset=”199.432″/>
<Point Elevation=”-12.286″ Offset=”218.382″/>
<Point Elevation=”-12.281″ Offset=”225.988″/>
<Point Elevation=”-12.28″ Offset=”255.015″/>
<Point Elevation=”-12.398″ Offset=”283.83″/>
<Point Elevation=”-12.476″ Offset=”305.13″/>
<Point Elevation=”-12.396″ Offset=”329.028″/>
<Point Elevation=”-12.277″ Offset=”354.738″/>
<Point Elevation=”-12.291″ Offset=”372.85″/>
<Point Elevation=”-12.291″ Offset=”400.408″/>
<Point Elevation=”-12.334″ Offset=”421.647″/>
<Point Elevation=”-12.426″ Offset=”448.515″/>
<Point Elevation=”-12.419″ Offset=”450.0″/>
</Points>
</Section>
</Sections>
</root>

[/code]

ระยะเวลาในการพัฒนา

  • เนื่องจากโปรแกรมไม่ได้ถูกพัฒนาในเชิงพานิชย์ และผมใช้เวลาว่างเป็นงานอดิเรก จึงไม่สามารถกำหนดเวลาที่แน่นอนได้ แต่คาดว่าอย่างน้อยอีกสักครึ่งปี ถึงจะได้ยลโฉมกัน ลองไปรันในลีนุกซ์ก็ไม่มีปัญหา ใช้ดีเหมือนบนวินโดส์ แต่ไปลองบนแมค ภาษาไทยกลับเกิดอาการสระลอย ยังหาวิธีแก้ไขไม่ได้ แต่ยังมีเวลาอีกนานครับ

2 thoughts on “ก้าวต่อไปของโปรแกรมเขียนรูปตัดตามขวาง XSection Plot ในร่างใหม่พัฒนาด้วย Python + Qt”

  1. “จึงแสดงผลแบบอักขระประหลาดอย่างที่เห็น” นี่เกิดจากโปรแกรมเดิมถูกพัฒนาบน OS สมัยที่ยังไม่รองรับ Unicode ครับ พอมา Run บน OS ที่ฐานสายอักขระเป็น Unicode แล้ว จึงเกิดอาการแบบที่เห็นครับ

    “แต่ไปลองบนแมค ภาษาไทยกลับเกิดอาการสระลอย ยังหาวิธีแก้ไขไม่ได้” แนะนำว่า ไม่ต้องไปพยายามแก้ครับ ปล่อยให้เป็นงานของวิวัฒนาการของ Qt เถอะครับ (มันจะถูกแก้ไขไปตามเวลาเอง ต้องเข้าใจหน่อยว่าสำหรับ Qt แล้ว Mac เป็นลูกเมียน้อยครับ) ไม่งั้นต้อง Force font เอาครับ

    1. ขอบคุุณมากๆครับ อ.จักรนันท์ คงต้องปล่อยเหมือนที่ว่าละครับ พยายามบังคับด้วยฟอนต์ไทยหลายๆฟอนต์ อาการยังเหมือนเดิมครับ

Leave a Reply

Your email address will not be published. Required fields are marked *