锘??xml version="1.0" encoding="utf-8" standalone="yes"?> Licensecc: a C++ software license manager銆備嬌鐢↙icensecc鍙互緇欏紑鍙戠殑杞歡鍔犱笂淇濇姢錛岄檺鍒惰蔣浠剁殑浣跨敤銆傞氳繃鎺堟潈鎺у埗鏉ラ檺鍒惰蔣浠剁殑浣跨敤錛屼篃鍙互闄愬埗杞歡鐨勪嬌鐢ㄦ椂闂達紝鍙婇檺鍒惰蔣浠跺湪鎸囧畾鏈哄櫒涓婅繍琛屻侺icensecc鏄熀浜嶣SD鍗忚寮婧愮殑杞歡鎺堟潈緋葷粺鐢ㄦ潵甯姪浣犵殑杞歡闂簮銆侺icensecc浣跨敤C++ 11寮鍙戯紝鏀寔璺ㄥ鉤鍙頒嬌鐢ㄣ?/p>
Licensecc涓昏鍔熻兘鍒楄〃錛?/p>
鏀寔璇曠敤璁稿彲鍔熻兘錛氫笉緇戝畾鍏蜂綋鐨勬満鍣紝浣嗘槸闄愬埗浣跨敤鏃墮棿鎴栬呭叾浠栭檺鍒躲?/p>
緇戝畾鏈哄櫒鐨勮鍙姛鑳斤細璁╄蔣浠剁粦瀹氭満鍣ㄧ‖浠訛紝鍙兘鍦ㄦ巿鏉冪殑鏈哄櫒涓婅繍琛屻?/p>
鏃墮棿闄愬埗 紜洏ID闄愬埗 IP鍦板潃闄愬埗 CPU闄愬埗 瀵逛簬涓浜涘皬鐨勮蔣浠訛紝鍙互浣跨敤licensecc鏉ュ姞涓妉icense瀵硅蔣浠惰繘琛屼繚鎶ゃ?/p>
Intergraph楣板浘鍏徃鐨凷martPlant3D鍙互瀵煎嚭VUE鏂囦歡鐢ㄤ簬妯″瀷瀹℃煡Reivew錛屽拰AVEVA鍏徃鐨凱DMS鍙互瀵煎嚭RVM鏂囦歡涓鏍楓傝繖浜涙枃浠朵腑鍖呭惈浜嗘ā鍨嬬殑鍑犱綍淇℃伅鍙婇儴鍒嗗睘鎬т俊鎭紝鏂逛究妯″瀷瀹℃煡錛屾彁楂樿璁℃晥鐜囥傚湪鏁板瓧鍖栧伐鍘傘佹櫤鑳藉伐鍘傘佹暟瀛楀寲浜や粯鐨勮秼鍔夸笅錛岄氳繃瑙f瀽榪欎簺鏁版嵁鏂囦歡錛岃幏鍙栧叾涓殑妯″瀷淇℃伅錛岃兘涓烘暟瀛楀寲浜や粯騫沖彴鎻愪緵鏁版嵁鍩虹銆?/p>
AVEVA鍏徃鐨凱DMS瀵煎嚭鐨凴VM鏂囦歡錛屽叾緇撴瀯綆鍗曪紝瑙f瀽鐩稿瀹規槗銆傛棭鍦ㄥ嚑騫翠箣鍓嶏紝宸茬粡瀹炵幇RVM鏂囦歡鏁版嵁鐨勫畬鍏ㄨВ鏋愶紝騫跺疄鐜頒駭鍝丷vmTranslator銆?/p>
涓婂浘鎵紺轟負鑸硅埗Marine妯″潡瀵煎嚭鐨勮埞鑸惰璁℃ā鍨嬨?/p>
涓婂浘鎵紺轟負宸ュ巶Plant妯″潡瀵煎嚭鐨勫伐鍘傝璁℃ā鍨嬨?/p>
Intergraph鍏徃鐨刅UE鏂囦歡鐩稿澶嶆潅錛屽彲浠ユ祻瑙圴UE鏂囦歡鐨勮蔣浠訛紝闄や簡鑷浜у搧Intergraph Reivew鍜孖ntergraph FreeView絳変箣澶栵紝榪樻湁Autodesk鍏徃鐨凬avisworks Manage鏈夊鍏UE鐨勬彃浠躲傚鏋滆兘鐩存帴鏀寔瀵筕UE鏂囦歡鐨勮В鏋愶紝瀵瑰畬鍠勬暟瀛楀寲浜や粯浜у搧綰挎湁閲嶈鎰忎箟錛屽嵆鑳藉悓鏃舵敮鎸佸浗闄呬袱涓富嫻佸伐紼嬭璁¤蔣浠剁殑鏁版嵁銆備負浜嗗湪鏁板瓧鍖栦氦浠樸佹暟瀛楀寲宸ュ巶涓礎鐚垜浠殑鍔涢噺錛屾垜浠紑濮嬩簡瀵筕UE鏂囦歡鐨勮В鏋愬伐浣滐紝騫跺彇寰椾簡閲嶅ぇ榪涘睍銆傜幇灝咥VEVA鐨凴VM妯″瀷鏂囦歡嫻忚鍜孖ntergraph鐨刅UE鏂囦歡嫻忚闆嗘垚涓涓笁緇寸幆澧冿紝鍛藉悕涓篜muReviewer錛屽嵆宸ュ巶妯″瀷瀹℃煡紼嬪簭銆傜幇鍦ㄧ▼搴忓凡緇忚兘澶勭悊澶ч儴鍒嗘ā鍨嬪強妯″瀷棰滆壊淇℃伅銆?nbsp; 涓婂浘鎵紺轟負Intergraph FreeView涓樉紺虹殑VUE妯″瀷銆?nbsp; 涓婂浘鎵紺轟負PmuReviewer涓樉紺虹殑妯″瀷錛屾湁璁懼銆佺閬撱佺閬撶剨緙濄侀榾闂ㄣ佺粨鏋勩佹瀛愭ā鍨嬬瓑銆?/p>
紼嬪簭閲囩敤Ribbon椋庢牸鐣岄潰錛屾殏鏃跺彧鏀寔RVM鍜孷UE鐨勬祻瑙堬紝鍚庣畫浼氬姞鍏ュ叾浠栧姛鑳斤紝濡傚昂瀵告祴閲忥紝妯″瀷鍓栧垏絳夈?/p>
Issue a “demo” license with only expiry date.
Licenses linked to “physical” hardware id
]]>
涓轟簡鏂逛究澶у鍦ㄧЩ鍔ㄧ涔熻兘鐪嬪埌鎴戠殑鍗氭枃鍜岃璁轟氦嫻侊紝鐜板凡娉ㄥ唽寰俊鍏紬鍙鳳紝嬈㈣繋澶у鎵弿涓嬫柟浜岀淮鐮佸叧娉ㄣ?/h5>
]]>
Key Words. Qt, Python, Shiboken2, PySide2 闃呰鍏ㄦ枃
]]>
1. 鍦╪odejs瀹樼綉涓婁笅杞絃inux Binaries(宸茬粡鍖呭惈浜唍pm):
2. 瀹夎Node.js
涓嬭澆鍚庤В鍘嬶紝騫跺湪瑙e帇鐨勬枃浠跺す涓惎鍔═erminal鍚庯紝杈撳叆鍛戒護錛?br /> sudo cp * /usr/local/ -r
鍐嶈緭鍏ュ懡浠わ細
node -v
npm -v
鏌ョ湅紼嬪簭鐗堟湰錛屾潵媯嫻嬫槸鍚︽垚鍔熷畨瑁咃細
3. 瀹夎express
npm install -g express-generator
4. 嫻嬭瘯Node鍜孍xpress
鐢–esium鏉ユ祴璇曚竴涓嬪畨瑁呮槸鍚︽垚鍔燂紝榪涘叆鍒癈esium婧愮爜鏂囦歡澶癸紝杈撳叆鍛戒護錛?br />Node server.js
琛ㄧず鍚姩鎴愬姛錛屽湪嫻忚鍣ㄤ腑杈撳叆緗戝潃錛歨ttp://localhost:8080/
鐐瑰嚮閾炬帴Hello World鍑虹幇涓嬮潰鐨勮繖涓湴鐞冿細
鍦?span style="font-family: 'Times New Roman';">Visual Studio 2013涓嬌鐢?/span>boost鐨?/span>test妯″潡鏃朵細鎶ヨ嚧鍛介敊璇紝濡備笅鍥炬墍紺猴細
杈撳嚭鎶ラ敊淇℃伅濡備笅錛?/p>
1>------ Build started: Project: Test, Configuration: Debug Win32 ------
1> main.cpp
1>d:\boost_1_70_0\boost\type_traits\common_type.hpp(47): fatal error C1001: An internal error has occurred in the compiler.
1> (compiler file 'msc1.cpp', line 1325)
1> To work around this problem, try simplifying or changing the program near the locations listed above.
1> Please choose the Technical Support command on the Visual C++
1> Help menu, or open the Technical Support help file for more information
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
瀹氫綅鍒版姤閿欐枃浠舵槸common_type.hpp錛?/span>
鍙互鐪嬪嚭鏄洜涓篊XX11鐨勫師鍥狅紝鍥犱負VS2013涓嶆敮鎸?/span>C++11錛屾墍浠?/span>boost鎻愪緵浜嗕竴涓畯瀹氫箟鏉ヨ緗槸鍚︽敮鎸?/span>CXX11錛?/span>
BOOST_NO_CXX11_TEMPLATE_ALIASES
鍦≒roject->Properties->C/C++->Preprocessor涓緗嵆鍙細
void test(const QString& theFileName) { std::string aFileName = theFileName.toStdString(); std::ofstream aFile(aFileName); aFile << aFileName; }
鍦ㄥ嚱鏁拌繕娌℃墽琛屽畬灝卞穿婧冧簡錛岃窡韙彂鐜版槸std::string鐨勯棶棰樸傛渶鍚庡彂鐜版槸鍥犱負寮曠敤鐨勫簱鐨凴untime Library涓嶅悓瀵艱嚧鐨勶紝涓涓槸MDd錛屼竴涓槸MTd錛屽悗鏉ユ敼鎴愪竴鑷村嵆鍙?/p>
鏁翠釜Qt鍦╓indows涓兘鍙互閫氳繃鎵瑰鐞嗘潵緙栬瘧錛屽綋緙栬瘧濂絈t鍚庯紝浼氱敓鎴恞make.exe銆?/p>
鍦ㄦ病鏈夊畨瑁匭t-VS-Addin鐨勬儏鍐典笅錛屽浣曚嬌鐢ㄥ埆浜烘彁渚涚殑Qt *.pro欏圭洰鏂囦歡鍛紵
浣跨敤qmake鍙互鐩存帴鐢熸垚Visual Studio欏圭洰鏂囦歡錛屽懡浠ゅ涓嬶細
qmake -tp vc
濡傛灉涓嶆垚鍔燂紝鍙兘榪橀渶瑕侀厤緗甉MAKESPEC錛?/p>
set QMAKESPEC=win32-msvc2015
浠嶸isual Studio鐨勮彍鍗曞惎鍔╒S鍛戒護紿楀彛錛屽彲浠ユ妸qmake紼嬪簭鐨勮礬寰勮緗埌鐜鍙橀噺PATH涓紝鍐嶅垏鎹㈠埌*.pro鏂囦歡鎵鍦ㄧ洰褰曪紝浣跨敤qmake鍛戒護銆傚鏋滈渶瑕侀掑綊澶勭悊鎵鏈?.pro鏂囦歡錛屽彲浠ュ姞涓?recursive閫夐」銆傚畬鏁村唴瀹瑰涓嬶細
set PATH=%PATH%;D:/Qt5.8.0/bin; set QMAKESPEC=win32-msvc2015 qmake -tp vc -recursive nmake
CesiumJS is an open-source JavaScript library for world-class 3D globes and maps.
浠庡叾瀹樼綉涓婂彲浠ョ湅鍒拌繖涓簱鐨勬効鏅細鎴愪負涓栫晫綰х殑涓夌淮鍦板浘銆傜敱浜庡叾楂樻ц兘錛屽澶фā鍨嬬殑浼樺寲鎶鏈紝鍙互鐢ㄤ簬BIM銆傛敮鎸丆esium鐨勮儲鍥㈤噷闈㈠氨鏈塀entley銆侭entley涔熸湁宸ュ巶CAD杞歡銆?/p>
浠巒odejs瀹樼綉https://nodejs.org/en/download/涓婁笅杞藉畨瑁呭寘錛屽鏋滄病鏈夊畨瑁呮潈闄愶紝鍙互涓嬭澆鍏嶅畨瑁呯殑鎵撳寘鏂囦歡錛?/p>
鐩存帴瑙e帇鍒癲:/nodejs銆傚茍鍦ㄦ鏂囦歡澶逛腑鍒涘緩涓や釜鏂囦歡澶癸細node_global, node_cache錛屽涓嬪浘鎵紺猴細
鐒跺悗浣跨敤CMD紿楀彛錛屽垏鎹㈠埌d:/nodejs鐩綍錛岃緭鍏ュ涓嬪懡浠ゆ潵璁劇疆global鍜宑ache錛?/p>
npm config set prefix “d:/nodejs/node_global” npm config set cache “d:/nodejs/node_cache”
騫朵慨鏀筺odevars.bat涓殑鐜鍙橀噺錛?/p>
騫惰繍琛宯odevars.bat銆?/p>
瀹夎CesiumJS鎵闇瑕佺殑鎻掍歡錛?/p>
npm install compression -g
npm install request -g
npm install yargs -g
鍦–MD鍛戒護紿楀彛涓垏鎹㈠埌Cesium鏂囦歡澶癸紝騫惰緭鍏ュ懡浠わ細
Node server.js
鍑虹幇濡備笅鍥炬墍紺虹殑 Cesium development server running locally.
琛ㄧずCesium鍙互鍦ㄦ湰鍦拌繍琛屼簡銆?/p>
鍦ㄦ祻瑙堝櫒涓緭鍏ュ湴鍧錛歨ttp://localhost:8080錛屽嚭鐜板涓嬪浘鎵紺洪〉闈細
鐐瑰嚮HelloWorld閾炬帴錛屽嚭鐜板涓嬪浘鎵紺虹殑鐨勪竴涓笁緇村湴鐞冨氨琛ㄧずCesium瀹夎鎴愬姛浜嗐?/p>
鍦–esium鐨勫畼緗戜笂鏈塀entley鎻愪緵鐨勪竴涓伐鍘侭IM妯″瀷渚嬪瓙錛屽彲浠ヤ粠濡備笅鍦板潃鏌ョ湅錛?/p>
https://cesiumjs.org/Cesium/Build/Apps/Sandcastle/index.html?src=3D%20Tiles%20BIM.html
浠庡叾瀹樻柟鐨勪粙緇嶆潵鐪嬶紝Cesium浣跨敤鐨?D Tiles鎶鏈彲浠ュ涓夌淮妯″瀷鏁版嵁榪涜鍘嬬緝鍙婂叾浠栦紭鍖栨妧鏈紝浣垮叾鍙互鍔犺澆寰堝ぇ鐨勬ā鍨嬬殑鎯呭喌涓嬶紝嫻忚欏虹晠銆備笖3D Tiles鏍煎紡涔熸槸寮婧愮殑錛屽彲浠ュ涔犲熼壌銆?/p>
鏈枃浠嬬粛浜咰esiumJS榪欎釜JavaScript搴撶殑瀹夎鍜岄厤緗紝騫跺睍紺轟簡鍏跺湪BIM涓殑涓涓簲鐢ㄤ緥瀛愩傚彲浠ラ氳繃瀛︿範CesiumJS鏉ュ皢PDMS妯″瀷杞崲鎴?D Tiles鏍煎紡錛屾潵嫻嬭瘯鍏跺澶фā鍨嬬殑鏀寔鏁堟灉銆?/p>
Abstract. QCAD鏄熀浜嶨PL鍗忚鐨勫紑婧怌AD杞歡錛屾牳蹇冨姛鑳藉熀浜嶲t浣跨敤C++寮鍙戯紝鐣岄潰鍙婂叾浜や簰浣跨敤Javascript鑴氭湰榪涜寮鍙戙俀CAD瀹樻柟鎺ㄨ崘寮鍙戝叾Plugin鐨勬柟寮忎負浣跨敤Javascript鑴氭湰鐨勬柟寮忥紝鍥犱負QCAD鐨勮彍鍗曞強鍏跺搴旂殑鍔熻兘鍏ㄩ儴鐢盝avascript瀹炵幇銆傜▼搴忔湁鏃朵篃闇瑕佸拰C++鐩存帴閫氫俊錛屽鍦≦CAD涓嬌鐢∣penCASCADE銆傛湰鏂囦富瑕佷粙緇嶅浣曟潵寮鍙慟CAD鐨勬彃浠禤lugin錛屼粠鑰岃兘澶熷QCAD榪涜鎵╁睍錛屽仛涓浜涘畾鍒跺寲鐨勫姛鑳藉紑鍙戙?/p>
Key Words. QCAD Plugin, Javascript, C++, CAD, 3D
QCAD鏄疓PL鍗忚鐨勫紑婧怌AD杞歡錛屼富瑕佷嬌鐢↗avascript鑴氭湰榪涜寮鍙戯紝涔熷彲浣跨敤C++寮鍙戙備笌AutoCAD鐨勫縐嶅紑鍙戞柟寮忎竴鏍鳳紝鏀寔AutoLisp鑴氭湰錛屼篃鏀寔ObjectArx浣跨敤C++榪涜寮鍙戙備笉榪囧紑婧愮殑紼嬪簭鍙互榪涜婧愮爜Debug錛岄亣鍒伴棶棰樺彲浠ヨ嚜宸卞姩鎵嬭В鍐熾傝孉utoCAD鏄棴婧愮殑錛屽鏋滄槸姝g増鐢ㄦ埛鍙互鍜ㄨ寮鍙戝巶瀹訛紝涓嶈兘榪芥牴婧簮銆傚浜庢兂瀛︿範CAD鐨勪漢鏉ヨ錛屽緩璁彲浠ュ鐪嬭繖縐嶅紑婧愯蔣浠訛紝瀛︿範CAD鐨勫紑鍙戝師鐞嗐?/p>
鏈枃涓昏浠嬬粛寮婧愯蔣浠禥CAD鐨勬彃浠禤lugin鐨勫紑鍙戞柟娉曘?/p>
鐢變簬QCAD鐨勮彍鍗曘佷氦浜掗兘鎻愪緵浜咼avascript鐨勫皝瑁咃紝鎵浠CAD鐨勫ぇ閮ㄥ垎鍔熻兘閮芥槸鐢↗avascript鑴氭湰瀹炵幇銆備嬌Javascript鑴氭湰瀵筈CAD榪涜寮鍙戜篃鏄疩CAD浣滆呮帹鑽愮殑鏂瑰紡銆?/p>
https://www.qcad.org/doc/qcad/latest/developer/_script_scope.html
QCAD紼嬪簭妗嗘灦鎻愪緵浜嗕竴寰堝畬鏁寸殑寮哄ぇ鐨凟CMAScript鎺ュ彛錛孮CAD鍑犱箮鎵鏈夌殑鍔熻兘閮藉彲浠ラ氳繃鑴氭湰JavaScript鏉ヨ闂侲CMAScript錛圝avaScript錛夋槸寰堟祦琛屼笖鏄撲簬瀛︿範鐨勪竴縐嶈剼鏈璦銆傞氳繃浣跨敤JavaScript鑴氭湰鏉ユ墿灞昋CAD鏄竴縐嶇畝鍗曢珮鏁堢殑鏂瑰紡錛屾墿灞曠殑鍔熻兘鍖呮嫭浜や簰鍒涘緩銆佷慨鏀瑰伐鍏風瓑絳夈?/p>
鐢ㄦ埛鐢氳嚦鍙互鍩轟簬QCAD鐨勫簲鐢ㄦ鏋跺紑鍙戝嚭涓涓叏鏂扮殑紼嬪簭銆傚叏鏂扮殑紼嬪簭鍙兘鏄竴涓帶鍒跺彴宸ュ叿鎴栧寘鍚敤鎴蜂氦浜掔殑CAD紼嬪簭錛?/p>
濡備笅鍥炬墍紺轟負QCAD涓富瑕佹ā鍧楃殑鍔熻兘銆俀t涓昏娑夊強閫氱敤鐨勫姛鑳斤紝涓嶤AD娌℃湁鐩存帴鍏崇郴銆俀CAD紼嬪簭妗嗘灦QCAD Application Framework鎻愪緵CAD涓撶敤鍔熻兘錛屽CAD Core, DXF瀵煎叆瀵煎嚭銆佸己澶х殑鍥懼艦瑙嗗浘powerful graphics view絳夌瓑銆傝剼鏈珽CMAScript鍙互鐢ㄦ潵蹇熺殑鎵╁睍CAD涓撶敤鍔熻兘銆俀CAD鐢ㄦ埛鎺ュ彛鍙婃墍鏈夌殑浜や簰鍔熻兘銆佸嚑涔庢墍鏈夌殑紿楀彛閮芥槸閫氳繃鑴氭湰瀹炵幇鐨勩?/p>
QCAD鍖呬腑鐨剄cad.exe灝辨槸涓涓狤CMAScript瑙i噴鍣紝騫朵笖灝佽浜哘t鍜孮CAD鐨勬帴鍙c傚綋娌℃湁浠諱綍ECMAScript鑴氭湰鐨勬椂鍊欙紝榪愯qcad.exe灝嗕細浠涔堜篃涓嶅仛銆俀cad.exe榛樿浼氭煡鎵?#8220;scripts/autostart.js”騫舵墽琛屻傚湪QCAD涓紝autostart.js鑴氭湰鍒濆鍖栦簡鎵鏈夌殑ECMAScript宸ュ叿鍜岀敤鎴蜂氦浜掔殑鍔熻兘錛屽茍鍚姩涓葷▼搴忋?/p>
QCAD涓嚑涔庢墍鏈夌殑紿楀彛銆佽彍鍗曘佸伐鍏鋒爮閮芥槸閫氳繃ECMAScript鑴氭湰瀹炵幇銆傝繖浜涜剼鏈綅浜巗cripts鏂囦歡澶逛腑銆?/p>
鐢↗avaScript鑴氭湰寮鍙慟CAD鎻掍歡鏈濂藉姙娉曞氨鏄厛鍦≦CAD涓垱寤鴻彍鍗曞拰宸ュ叿鏍忋備笅闈㈠氨緇欏嚭鍦≦CAD涓垱寤鴻彍鍗曞拰宸ュ叿鏍忕殑姝ラ銆傞鍏堣鍒涘緩鏂囦歡緇撴瀯錛?/p>
l 瀵逛簬鏂扮殑欏跺眰鑿滃崟錛屽湪QCAD鐩綍涓殑scripts鏂囦歡澶逛腑鍒涘緩涓涓柊鐨勬枃浠跺す銆備緥濡傦細鍒涘緩涓涓?#8220;MyScripts”鐨勬枃浠跺す錛?/p>
l 鍦∕yScripts鏂囦歡澶逛腑鍒涘緩涓涓枃鏈枃浠?#8220;MyScripts.js”錛?/p>
l 鍦∕yScripts鏂囦歡澶逛腑鍒涘緩鍙﹀涓涓枃浠跺す鏉ユ彁渚涗竴涓懡浠ction錛屽鍛藉悕涓?#8220;MyAction”錛?/p>
l 鍦∕yAction鏂囦歡澶逛腑鍒涘緩涓涓枃鏈枃浠禡yAction.js錛屾枃浠跺悕蹇呴』鍜屾枃浠跺す鐨勫悕瀛椾竴鑷達紱
鏂囦歡緇勭粐緇撴瀯濡備笅鎵紺猴細
灝嗗涓婮avaScript鑴氭湰澶嶅埗鍒癕yScripts.js鏂囦歡涓細
/** * Copyright (c) 2011-2018 by Andrew Mustun. All rights reserved. * * This file is part of the QCAD project. * * QCAD is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * QCAD is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with QCAD. */ // MyScripts.js // All actions are derived from class EAction, so we need to // include this class definition here: include("../EAction.js"); // Constructor calls base class constructor: function MyScripts(guiAction) { EAction.call(this, guiAction); } // Derive class MyScripts from class EAction: MyScripts.prototype = new EAction(); // This static function returns a new or existing QMenu object. MyScripts.getMenu = function() { // EAction.getMenu is a helper function that returns an existing // or new QMenu object with the given title and object name. // The object name (here "MyScriptMenu") must be unique. return EAction.getMenu(MyScripts.getTitle(), "MyScriptsMenu"); }; // This static function returns a new or existing QToolBar object. MyScripts.getToolBar = function() { // EAction.getToolBar is a helper function that returns an existing // or new QToolBar object with the given title and object name. // The object name (here "MyScriptToolBar") must be unique. return EAction.getToolBar(MyScripts.getTitle(), "MyScriptToolBar"); }; // This static function defines and returns the title of the menu // and toolbar. // The qsTr function marks the title as a translatable string. MyScripts.getTitle = function() { return qsTr("My Scripts"); }; // Init creates the menu and toolbar on start. MyScripts.init = function() { MyScripts.getMenu(); MyScripts.getToolBar(); };
灝嗗涓嬭剼鏈唬鐮佸鍒跺埌MyAction.js鏂囦歡涓細
/** * Copyright (c) 2011-2018 by Andrew Mustun. All rights reserved. * * This file is part of the QCAD project. * * QCAD is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * QCAD is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with QCAD. */ // MyAction.js // Include base class definition: include("../MyScripts.js"); // Constructor calls base class constructor: function MyAction(guiAction) { MyScripts.call(this, guiAction); } // Derive class MyAction from class MyScripts: MyAction.prototype = new MyScripts(); // This function is called immediately after the constructor when the user // starts this action. For actions that don't require any user input (for // example auto zoom), beginEvent does everything and then terminates the // action. MyAction.prototype.beginEvent = function() { // call base class implementation of beginEvent: MyScripts.prototype.beginEvent.call(this); // get main application window: var appWin = EAction.getMainWindow(); // print a message in the console of QCAD: appWin.handleUserMessage("MyAction() is running..."); // terminate this action immediately: this.terminate(); }; // MyAction.init() is called by QCAD to initialize the action and create // the menu / toolbar for it. MyAction.init = function(basePath) { // Create a new RGuiAction (extended QAction): var action = new RGuiAction("&My Action", RMainWindowQt.getMainWindow()); // This action requires a document to be open. If no document is // open, the menu and tool button are grayed out: action.setRequiresDocument(true); // Define the script file that is executed when this action is // launched: action.setScriptFile(basePath + "/MyAction.js"); // Set the icon that is shown in the toolbar and on some platforms // also in the menu: action.setIcon(basePath + "/MyAction.svg"); // Set the command(s) that can be used on the command line to // launch this action: action.setDefaultCommands(["myaction"]); // Define the sort order of this action. Menus and tool buttons are // ordered by these values: action.setGroupSortOrder(80100); action.setSortOrder(200); // Set list of widgets this action is added to // (menus, tool bars, CAD tool bar panels): action.setWidgetNames(["MyScriptsMenu"]); };
鍚姩QCAD鍙互鍙戠幇鍦ㄨ彍鍗曚笂鏈変簡MyScripts錛屽涓嬪浘鎵紺猴細
鐐瑰嚮MyAction鑿滃崟錛屼細鍦ㄥ懡浠ょ獥鍙d腑杈撳嚭嫻嬭瘯鏂囧瓧銆?/p>
鏃㈢劧QCAD鐨勬槸鍩轟簬Qt寮鍙戠殑錛岀悊鎵褰撶劧鍦板簲璇ユ敮鎸丆++寮鍙戯紝鍙槸C++寮鍙戞柟寮忛渶瑕佷笌JavaScript鐩哥粨鍚堛傚洜涓篞CAD涓竴浜涗氦浜掑姛鑳藉皝瑁呭埌JavaScript鑴氭湰涓簡錛屾墍浠ュ彧鑳介氳繃鍦↗avaScript涓皟鐢–++銆傝繖縐嶆柟寮廞CAD涔熸彁渚涗簡涓涓緥瀛愶紝浣嶄簬婧愮爜鐨?/p>
support\examples\exampleplugin涓備富瑕佹槸灝咰++鐨勭被鏆撮湶緇橨avaScript錛屼嬌鍦↗avaScript涓彲浠ヨ皟鐢–++鐨勭被鍙婂叾鏂規硶銆傚彧灝嗗ご鏂囦歡婧愮爜鍒楀嚭濡備笅錛歊ExamplePlugin.h
#include <QDebug> #include <QObject> #include <QScriptEngine> #include <QStringList> #include "RActionAdapter.h" #include "RDocumentInterface.h" #include "RGuiAction.h" #include "RMainWindow.h" #include "RPluginInterface.h" class MyAction : public RActionAdapter { public: MyAction(RGuiAction* guiAction) : RActionAdapter(guiAction) {} static void factory(RGuiAction* guiAction) { qDebug() << "MyAction::factory"; if (guiAction==NULL) { qDebug("guiAction is NULL"); return; } RDocumentInterface* di = RMainWindow::getDocumentInterfaceStatic(); if (di==NULL) { qDebug("di is NULL"); return; } di->setCurrentAction(new MyAction(guiAction)); } virtual void beginEvent() { qDebug() << "MyAction::beginEvent"; } }; class MyClass : public QObject { Q_OBJECT public: MyClass() : QObject(), i(0), d(0.0) {} virtual int getInt() const { return i; } virtual double getDouble() const { return d; } virtual QString getString() const { return s; } virtual void setInt(int v) { i = v; } virtual void setDouble(int v) { d = v; } virtual void setString(const QString& v) { s = v; } void emitSignal() { emit mySignal(i); } signals: void mySignal(int code); private: int i; double d; QString s; }; Q_DECLARE_METATYPE(MyClass*) /** * Script binding for MyClass. */ class EcmaMyClass { public: static void initEcma(QScriptEngine& engine); static QScriptValue createMyClass(QScriptContext* context, QScriptEngine* engine); static QScriptValue myClassToString(QScriptContext *context, QScriptEngine *engine); static MyClass* getSelfMyClass(const QString& fName, QScriptContext* context); static QScriptValue getInt(QScriptContext* context, QScriptEngine* engine); static QScriptValue getDouble(QScriptContext* context, QScriptEngine* engine); static QScriptValue getString(QScriptContext* context, QScriptEngine* engine); static QScriptValue setInt(QScriptContext* context, QScriptEngine* engine); static QScriptValue setDouble(QScriptContext* context, QScriptEngine* engine); static QScriptValue setString(QScriptContext* context, QScriptEngine* engine); static QScriptValue emitSignal(QScriptContext* context, QScriptEngine* engine); }; class RExamplePlugin : public QObject, public RPluginInterface { Q_OBJECT Q_INTERFACES(RPluginInterface) #if QT_VERSION >= 0x050000 Q_PLUGIN_METADATA(IID "org.qcad.exampleplugin") #endif public: virtual bool init(); virtual void uninit(bool) {} virtual void postInit(InitStatus status); virtual void initScriptExtensions(QScriptEngine& engine); virtual RPluginInfo getPluginInfo(); };
浠庝笂榪版簮鐮佸彲浠ョ湅鍑猴紝閫氳繃Qt鐨凱lguin鏈哄埗灝咰++鐨勭被鏆撮湶緇橨avaScript錛屼粠鑰屽湪JavaScript涓嬌鐢–++鐨勫姛鑳姐傚涓嬪浘鎵紺轟負鍦≦CAD涓氳繃JavaScript璋冪敤C++鏉ユ樉紺轟竴涓笁緇磋鍥劇殑紿楀彛銆?/p>
緇間笂鎵榪幫紝QCAD浜屾寮鍙戠殑鏂瑰紡涓昏鏄互JavaScript涓轟富銆傚鏋滆鍦≦CAD涓嬌鐢–++錛屾垨鑰呮槸浣跨敤C++鐨勭涓夋柟搴擄紝鍙兘鏄皢鐩稿叧鐨凜++綾繪毚闇茬粰JavaScirpt錛岃繖鏍峰紑鍙戞墠鏄渶綆鍗曠殑銆傚鏋滅函鐢–++寮鍙戯紝涓浜涗氦浜掑姛鑳芥槸灝佽鍦↗avaScript涓紝鍙嶈屾晥鐜囦笉楂樸?/p>
閫氳繃鍦≦CAD涓嬌鐢∣penCASCADE涔嬬被鐨勪笁緇村嚑浣曞唴鏍革紝鍙互瀹炵幇涓浜涘緩妯°佸嚭鍥劇殑鍔熻兘銆?/p>
1. https://www.qcad.org/doc/qcad/latest/developer/_menus_and_tool_bars.html
2. https://www.qcad.org/doc/qcad/latest/developer/index.html#what_is
3. https://www.qcad.org/rsforum/viewforum.php?f=30&sid=8621b8249232845e54252ef7fa6b34ae
4. JavaScript 楂樼駭紼嬪簭璁捐
5. C++ GUI Programming with Qt
鐩墠寮婧愮殑浜岀淮CAD鏈塓CAD銆丩ibreCAD絳夛紝涓擫ibreCAD鍙互璇存槸QCAD鐨勫垎鏀増鏈傚姣旇繖嬈懼紑婧愯蔣浠訛紝鍙戠幇QCAD鐨勫姛鑳戒笌鎿嶄綔涔犳儻鍜孉utoCAD鏇存帴榪戙侺ibreCAD鏄函C++寮鍙戯紝鑰孮CAD浣跨敤浜哘t鐨凷cript妯″潡錛屼嬌鐢ㄤ簡C++鍜孞avascript鑴氭湰涓ょ寮鍙戞柟寮忋傛垜瑙夊緱浣跨敤鑴氭湰鏉ユ墿灞曞姛鑳芥瘮綰疌++寮鍙戞晥鐜囦細楂樼偣錛屽洜涓鴻繖浜涘紑婧愰」鐩簮鐮侀兘寰堝ぇ錛岀紪璇戞瘮杈冭姳鏃墮棿銆傚鏋滀嬌鐢ㄨ剼鏈潵寮鍙戠殑璇濓紝娌℃湁緙栬瘧鏃墮棿錛屽彲浠ヨ竟鍐欒剼鏈竟嫻嬭瘯錛屽緢鏂逛究銆?/p>
涓嬮潰涓や釜鍒嗗埆鏄疞ibreCAD鍜孮CAD涓樉紺哄浘褰㈠睘鎬х殑鐣岄潰錛屽彲浠ョ湅鍒癚CAD鎰熻鏇村ソ銆?/p>
Figure 1. LibreCAD Main GUI
Figure 2. QCAD Main GUI
QCAD鐨勭紪璇戝緢綆鍗曪紝浠?https://github.com/qcad/qcad 涓嬭澆婧愮爜鍚庯紝灝卞彲浠ョ洿鎺ョ紪璇戜簡銆傚叾渚濊禆鐨勭浉鍏崇涓夋柟搴撻兘宸茬粡鍖呭惈鍦ㄦ簮鐮佷腑銆備笅闈㈠氨浠ュ湪Windows鎿嶄綔緋葷粺涓嬌鐢╒S2008鏉ョ紪璇慟CAD-3.20.1.2涓轟緥鏉ヨ鏄庡叾緙栬瘧闇瑕佹敞鎰忕殑闂銆傝冭檻鍒癚t4鐩稿叧鐨刣ll鏂囦歡杈冨皯錛屾墍浠ラ夋嫨Qt4.8.6鍜孷isual Studio2008鏉ョ紪璇慟CAD銆?/p>
鍦╒S涓嬌鐢≦t鍙互浣跨敤QtVSAddin錛屽畨瑁呭ソQtVSAddin鍚庝細鍦╒S鐨勮彍鍗曚笂鍑虹幇涓涓猀t鑿滃崟錛?/p>
Figure 3. QtVSAddin Menu in VS2008
浠嶲t鎻掍歡鐨勮彍鍗曚腑鐨凮pen Qt Project File鏉ユ墦寮qcad婧愮爜鏂囦歡涓殑qcad.pro錛屼細鐢熸垚qcad.sln鐨刅S瑙e喅鏂規鏂囦歡錛屽茍鍦╒S2008鎵撳紑浜嗚В鍐蟲柟妗堛?/p>
Figure 4. QCad source code in VS2008
緙栬瘧鍒癛ScriptHandlerEcma.cpp鏂囦歡鏃訛紝閬囧埌鍑犱釜QPrinterInfo闈欐佸嚱鏁扮殑闂錛屽洜涓簈cad-3.20.1.2涓帹鑽愪嬌鐢≦t5.5.1錛岃岃繖鍑犱釜闈欐佸嚱鏁版槸浠嶲t5.3鐗堟湰鎵嶅紩鍏ョ殑銆傛墍浠ユ壘鍒癚t5.3涓浉鍏崇殑婧愮爜錛屾妸鍏充簬QPrinterInfo鐨勫嚑涓潤鎬佸嚱鏁板湪榪欓噷閲嶅啓銆備粠瀛楅潰涓婄湅榪欏嚑涓嚱鏁版槸涓庢墦鍗扮浉鍏崇殑錛屽鏋滀笉浣跨敤鎵撳嵃鐩稿叧鍔熻兘錛屽彲浠ョ洿鎺ユ妸榪欏嚑涓敊璇敞閲婃帀銆?/p>
鍥犱負qcad涓庣晫闈㈢浉鍏崇殑鍔熻兘閮芥槸鐢↗avaScript鑴氭湰瀹炵幇錛屾墍浠ヨ繕闇瑕佺紪璇慟t鐨勮剼鏈疄鐜般傛壘鍒版簮鐮佺殑src鐩綍涓殑3rdparty鏂囦歡澶逛腑涓嶲t鐗堟湰瀵瑰簲鐨剄t-labs-qtscriptgenerator錛岄噷闈細宸茬粡鐢熸垚浜哣S鐨勮В鍐蟲柟妗堛傜洿鎺ョ敤VS鎵撳紑瑙e喅鏂規錛屽叏閮ㄧ紪璇戝嵆鍙?/p>
Figure 5.緙栬瘧qt script
緙栬瘧鎴愬姛鍚庯紝鏂囦歡閮戒細鐢熸垚鍦ㄦ寚瀹氱殑鐩綍涓紝鐩存帴鎵撳紑婧愮爜涓嬮潰鐨刣ebug鏂囦歡涓殑qcad.exe鍗沖彲浠ヨ繍琛孮CAD浜嗐?/p>
Figure 6. 榪愯緙栬瘧鐨凲CAD
鏈榪戝湪寮鍙戜竴涓嚜鍔ㄥ嚭鍥劇▼搴忥紝浠嶱DMS妯″瀷涓彇鏁版嵁鍚庯紝緇忚繃澶勭悊鐢熸垚AutoCAD鐨勫浘綰搞傚叾涓秹鍙婂埌涓涓棶棰樺氨鏄浣曞敖閲忎嬌紼嬪簭涓嶢utoCAD浣庤﹀悎錛屽敖閲忎笉浣跨敤絎笁鏂瑰簱鐨勬儏鍐典笅錛屽疄鐜版暟鎹殑浼犻掋?
鏈寮濮嬫兂鍒版槸鐢∣DA(Open Design Alliance)鐨凞WGdirect搴撴潵鐩存帴鐢熸垚DWG鏂囦歡錛屽茍涓擯DMS涓氨鏄嬌鐢ㄨ繖涓簱鏉ョ敓鎴怐WG鏂囦歡鐨勩侱WGdirect鐨勭敤娉曚笌AutoCAD .Net鐨勬帴鍙e悕縐板熀鏈竴鑷達紝鐢ㄦ硶涔熺浉鍚岋紝浣嗘槸榪欐牱灝卞紩鍏ヤ簡絎笁鏂瑰簱銆?
榪樻湁涓縐嶆柟娉曞氨鏄嬌鐢ˋutoLisp鑴氭湰鏉ョ敓鎴愬浘綰搞傝繖鏍風殑璇濓紝紼嬪簭鍙渶瑕佺敓鎴愪竴涓狝utoLisp鑴氭湰鏂囦歡錛屾枃浠朵腑鍖呭惈鍒涘緩鍥懼艦鐨勫懡浠ゃ侫utoLisp鑴氭湰涓嶱DMS鐨凱ML綾諱技錛岄兘闇瑕佷竴涓В鏋愭墽琛岀殑鐜錛屽嵆PML渚濊禆PDMS騫沖彴鎵嶈兘榪愯錛孉utoLisp渚濊禆AutoCAD騫沖彴銆傚鏋滀嬌鐢ˋutoLisp錛岀▼搴忎笉渚濊禆DWG鐩稿叧鐨勭涓夋柟搴擄紝鍙渶瑕佺敓鎴愪竴涓枃鏈枃浠躲傚喅瀹氫嬌鐢ˋutoLisp鍚庯紝榪樻湁涓涓棶棰橈紝灝辨槸濡備綍鍦ㄥ惎鍔ˋutoCAD鑳借嚜鍔ㄥ姞杞界敓鎴愮殑AutoLisp鏂囦歡鍘葷敓鎴愬浘綰搞?
浠庣綉涓婃煡鍒拌嚜鍔ㄥ姞杞界▼搴忕殑鏂規硶錛欰bout Auto-Loading and Running AutoLISP Routines錛?
http://help.autodesk.com/view/ACD/2015/ENU/?guid=GUID-FDB4038D-1620-4A56-8824-D37729D42520 錛屽彂鐜頒嬌鐢╝caddoc.lsp鐨勬柟娉曟渶鏂逛究銆傛柟娉曞涓嬶細
1. 浣跨敤涓涓ā鏉緿WG鏂囦歡Template.dwg錛?
2. 鍦ㄦā鏉緿WG鏂囦歡Template.dwg鐩稿悓鐨勭洰褰曚腑錛屾斁涓涓猘caddoc.lsp鑴氭湰鏂囦歡錛屽叾涓唴瀹瑰彲浠ュ弬鑰冨涓嬫柟寮忥細
3. 紼嬪簭鐢熸垚涓涓剼鏈枃浠秏yapp.lsp鍒癮caddoc.lsp鐨勬枃浠跺す涓紝鐒跺悗鍐嶆墦寮妯℃澘DWG鏂囦歡Template.dwg銆?
緇忚繃涓婅堪澶勭悊錛岀▼搴忓湪鎵撳紑妯℃澘DWG鏂囦歡鐨勬椂鍊欎細鍚姩AutoCAD錛屽惎鍔ˋutoCAD鐨勬椂鍊欎細鍔犺澆acaddoc.lsp鏂囦歡錛屽湪acaddoc.lsp涓張浼氬姞杞絤yapp.lsp錛岃繖鏍峰氨浼氭墽琛宮yapp.lsp涓殑鍛戒護錛岃嚜鍔ㄧ敓鎴愬浘綰鎬簡銆?
鍥懼艦鐨勭敓鎴愬彲浠ヤ嬌鐢ˋutoCAD涓殑鍛戒護錛屽鐢熸垚鐩寸嚎鍙互浣跨敤line錛岀敓鎴愬渾鍙互浣跨敤circle錛岀瓑絳夈傚鐢熸垚鐨勫浘褰㈣繘琛屾爣娉ㄧ殑鏃跺欙紝鍙戠幇綰挎ф爣娉ㄥ緢鏂逛究浣跨敤鍛戒護鑷姩鐢熸垚錛屼絾鏄兂鏍囨敞鍗婂緞鎴栫洿寰勭殑鏃跺欙紝涓鐩存病鏈夋祴璇曟垚鍔熴傚悗鏉ユ祴璇曟垚鍔熷悗錛屽皢榪欎簺鍛戒護璁頒笅鏉ワ紝鏂逛究鏌ヨ銆?
鎵撳紑Template.dwg鐨勬椂鍊欙紝浼氳嚜鍔ㄧ敓鎴愬涓嬪唴瀹癸細
浣跨敤AutoLisp鑴氭湰鏂囦歡鏉ヤ綔涓烘暟鎹氦鎹㈢殑鏂瑰紡鏉ュ紑鍙戠▼搴忥紝鍙互浣胯嚜宸辯殑紼嬪簭涓嶄緷璧朌WG璇誨啓鐩稿叧鐨勭涓夋柟搴擄紝浣跨▼搴忔洿紼沖畾銆?
浣跨敤AutoLisp鏉ヨ嚜鍔ㄧ敓鎴愭爣娉ㄧ殑鏃跺欙紝綰挎ф爣娉ㄥ緢瀹規槗鐢熸垚錛屽彧闇瑕佹寚瀹氬嚑涓偣鍗沖彲銆傚彲鏄敓鎴愬崐寰勬垨鐩村緞鏍囨敞鏁版嵁鏃訛紝鍥犱負闇瑕侀夋嫨鍦嗗姬錛孉utoLisp涓嶆槸閭d箞鐩磋銆?
Abstract. Qt’s ActiveX and COM support allows Qt for Windows developers to access and use ActiveX controls and COM objects provided by any ActiveX server in their Qt applications. Make their Qt application available as COM servers, with any number of Qt objects and widgets as COM objects and ActiveX controls. Make OpenSceneGraph to ActiveX controls then you can use it in other place, like IE.
Key Words. OpenSceneGraph, ActiveX, COM, ActiveQt
1.Introduction
ActiveX鏄竴涓紑鏀劇殑闆嗘垚騫沖彴錛屼負寮鍙戜漢鍛樸佺敤鎴峰拰Web鐢熶駭鍟嗘彁渚涗簡涓涓揩閫熻岀畝渚跨殑鍦↖nternet 鍜孖ntranet鍒涘緩紼嬪簭闆嗘垚鍜屽唴瀹圭殑鏂規硶銆備嬌鐢ˋcitveX鍙互杞繪澗鏂逛究鍦板湪Web欏甸潰涓彃鍏ュ濯掍綋鏁堟灉銆佷氦浜掑紡瀵硅薄鍙婂鏉傜▼搴忋傜紪鍐欑殑ActiveX鎺т歡鍙互鍦ㄤ笉鍚岀殑紼嬪簭涓婅繍琛岋紝濡侷nternet Explorer, Visual Basic, MFC- and ATL-based containters絳夌瓑銆?
鏈枃灝濊瘯浣跨敤Qt鐨凙ctiveQt妯″潡灝哋penSceneGraph灝佽鎴怉ctiveX鎺т歡錛屽茍鍦↖nternet Explorer涓樉紺哄嚭涓夌淮妯″瀷銆?
2.ActiveQt
涔犳儻浜嗙敤Qt灝佽鐨勫璞★紝鐢ㄧ潃鑸掓湇銆俀t鐨刉indows鍟嗕笟鐗堟湰鍜屽紑婧愮増鏈兘鎻愪緵浜咥ctiveQt妗嗘灦錛屼嬌鐢ㄨ繖涓粍浠舵垜浠彲浠ュ湪Qt涓嬌鐢ˋctiveX鎺т歡錛屽茍涓斾篃鍙互寮鍙戝熀浜嶲t鐨凙ctiveX鎺т歡銆侫ctiveQt鍖呭惈浜嗕袱涓粍浠禥AxContainter鍜孮AxServer錛?
v QAxContainer鍏佽鎴戜滑浣跨敤COM瀵硅薄錛屽儚浣跨敤Excel鐨凜OM瀵硅薄錛屽氨鍙互瀵笶xcel榪涜璇誨啓浜嗭紱
v QAxServer鍙互灝嗘垜浠啓鐨凲t鎺т歡瀵煎嚭涓篊OM瀵硅薄鎴栬匒ctiveX鎺т歡銆?
浣跨敤ActiveQt鏉ョ紪鍐橝ctiveX鎺т歡榪樻槸瑕佺畝鍗曞緢澶氱殑銆?
3.OpenSceneGraph
OpenSceneGraph鏄OpenGL闈㈠悜瀵硅薄鐨勫皝瑁咃紝浣跨敤OpenSceneGraph鍙互鏂逛究鍦板涓夌淮鍦烘櫙榪涜澶勭悊錛屽彲浠ョ敤浜庝笁緇村彲瑙嗗寲錛屼豢鐪熺瓑棰嗗煙銆傚洜涓轟篃鏄函C++寮鍙戯紝鎵浠ヤ駭鐢熶簡灝哋penSceneGraph緙栧啓鎴怉ctiveX鎺т歡鐨勬兂娉曪紝榪欐牱灝卞彲浠ュ湪Web涓婃潵鎿嶄綔涓夌淮鍦烘櫙浜嗐?
4.Example
棣栧厛鍦╒isual Studio涓垱寤轟竴涓狝ctiveQt Server欏圭洰錛屽涓嬪浘鎵紺猴細
鎺ヤ笅鏉ヤ嬌鐢╫sgQt妯″潡鏉ュ湪Qt涓嬌鐢∣penSceneGraph錛屽彧闇瑕佸鍔犱竴涓垵濮嬪寲鍑芥暟錛屼唬鐮佸涓嬫墍紺猴細
緙栬瘧鐢熸垚涓涓狝ctiveX鎺т歡鍚庯紝鍐嶅啓涓涓狧TML鏂囦歡鏉ユ祴璇曠敓鎴愮殑緇撴灉錛屽叾涓璈TML鏂囦歡涓殑涓昏鍐呭濡備笅錛?
鍏朵腑CLASSID灝辨槸鐢≦AXFACTORY_DEFAULT瀹忓畾涔夋敞鍐屾椂鐨凣UID銆傜▼搴忚繍琛岀粨鏋滃涓嬪浘鎵紺猴細
5.Conclusion
浣跨敤ActiveQt灝哋penSceneGraph灝佽鎴怉ctiveX鎺т歡錛岃繖鏍風殑鎺т歡灝卞彲浠ュ湪澶氫釜紼嬪簭涓嬌鐢紝濡侷E錛孷isual Basic絳夌瓑銆?
絳夌啛緇冪悊瑙ctiveQt鍚庯紝鍙互瀵筄SG鐨凙ctiveX鎺т歡榪涜鎵╁睍錛屼嬌鍏舵湁鏇村己澶х殑涓夌淮浜や簰鍔熻兘銆?
6.References
1. Qt’s ActiveX Framework
2. https://zh.wikipedia.org/wiki/ActiveX
PDF Version: OpenSceneGraph in ActiveX by ActiveQt
1.Introduction
鍦ㄩ儊澶у笀鐨勫獎鍝嶄笅錛屽緢鏃╀箣鍓嶄拱浜嗘湰鐜嬬埥鑰佸笀鐨勩婃眹緙栬璦銆嬶紝鍙儨涓鐩撮棽緗紝浠婂ぉ緇堜簬寰楃┖錛屽彲浠ュ涔犺搗鏉ヤ簡銆備負浜嗕嬌瀛︿範鏁堟灉鏇村ソ錛岃繕鏄啓鐐逛笢瑗胯褰曚笅鏉ワ紝涓鏂歸潰宸╁浐涓嬬煡璇嗙偣錛屼竴鏂歸潰璧峰埌涓涓洃鐫d綔鐢ㄣ?
姣曠珶涓嶆槸璁$畻鏈轟笓涓氱鐝嚭韜紝榪欎簺璁$畻鏈哄熀紜鐭ヨ瘑鍙湁闈犺嚜瀛︺傛剰璇嗗埌姹囩紪鐨勯噸瑕佹ф槸浠庡ぇ甯堝彲浠ュ弽姹囩紪鍜岄嗗悜涓浜涜蔣浠跺紑濮嬬殑銆傛眹緙栧湪Debug鐨勮繃紼嬩腑涔熸湁閲嶈浣滅敤錛屽鍦―ebug鏃剁湅鍒拌繖縐嶇晫闈紝鎬繪槸鏈夋兂鐞嗚В鍏舵剰涔夌殑濂藉蹇冿細
Figure 1. Disassembly and Registers in Visual Studio
閫氳繃鍙嶆眹緙栦唬鐮侊紝瀵圭▼搴忕殑榪愯鎯呭喌鏇村姞娓呮櫚銆傚涔犳眹緙栫殑涓や釜鐩殑錛氬厖鍒嗚幏寰楀簳灞傜紪紼嬬殑浣撻獙錛屾繁鍒葷悊瑙f満鍣ㄨ繍琛岀▼搴忕殑鏈虹悊銆傜煡閬撲簡鏉ヨ儳鍘昏剦錛屽湪搴旂敤鐨勮繃紼嬩腑鎵嶈兘鏇村姞鑷俊銆?
鏈枃涓昏浠嬬粛鍦╓indows7涓繍琛宒ebug錛屽茍鍦╠ebug紼嬪簭涓墽琛屾眹緙栦唬鐮侊紝浠庤屾柟渚跨悊璁虹煡璇嗙殑瀛︿範銆?
2.Run Debug in Windows7
Debug鏄疍OS, Windows鎻愪緵鐨勫疄妯″紡(8086)紼嬪簭鐨勮皟璇曞伐鍏鳳紝浣跨敤瀹冨彲浠ユ煡鐪婥PU鍚勭瀵勫瓨鍣ㄣ佸唴瀛樻儏鍐靛拰鍦ㄦ満鍣ㄧ爜綰ц窡韙▼搴忕殑榪愯銆傚洜涓篸ebug紼嬪簭鏄?6浣嶇殑錛屽湪64浣嶇殑Windows7涓棤娉曡繍琛岋紝鎵浠ユ牴鎹綉涓婄殑鏂規硶錛屽厛瀹夎涓涓狣OS妯℃嫙鐜錛屽啀榪愯debug銆?
鍒嗗埆涓嬭澆宸ュ叿DOS BOX鍜?2浣嶆満鍣ㄤ笂鐨刣ebug錛岃繖閲岀粰鍑篋OSBOX鍜孧ASM錛屽叾涓璂ebug鍖呭惈鍦∕ASM涓?
Figure 2. DOSBox for Debug
瀹夎濂紻OSBox鍚庯紝灝哅ASM鏀懼埌D鐩樹腑錛岃繍琛屽涓嬪懡浠ゆ潵榪愯Debug錛?
灝卞彲浠ユ樉紺篊PU涓殑鐩稿叧淇℃伅錛屽涓嬪浘鎵紺猴細
Figure 3. Debug in DOSBox
Debug鐨勫懡浠ゆ瘮杈冨錛屼笅闈㈢畝鍗曚粙緇嶅嚑涓父鐢ㄧ殑錛?
v R鍛戒護錛氭煡鐪嬨佷慨鏀笴PU瀵勫瓨鍣ㄧ殑鍐呭錛?
v D鍛戒護錛氭煡鐪嬪唴瀛樹腑鐨勫唴瀹癸紱
v A鍛戒護錛氫互姹囩紪鎸囦護鐨勬牸寮忓湪鍐呭瓨涓啓鍏ヤ竴鏉℃満鍣ㄦ寚浠わ紱
v T鍛戒護錛氭墽琛屼竴鏉℃満鍣ㄦ寚浠わ紱
2.1 R鍛戒護
CPU鐨勫瘎瀛樺櫒鏈堿X錛孊X錛孋X錛孌X錛孋S錛孖P絳夛紝閫氳繃R鍛戒護錛屽彲浠ユ煡鐪嬭繖浜涘瘎瀛樺櫒涓殑淇℃伅銆傝嫢瑕佷慨鏀逛竴涓瘎瀛樺櫒鐨勫鹼紝姣斿AX涓殑鍊鹼紝鍙敤R鍛戒護鍚庡姞瀵勫瓨鍣ㄥ悕鏉ヨ繘琛岋紝杈撳叆r ax鍚庡洖杞︼紝鍦細鎻愮ず鍚庤緭鍏ヤ竴涓暟鍊煎嵆鍙?
Figure 4. Modify AX by R command
鍙互閲囩敤鍚屾牱鐨勬柟寮忔潵淇敼鍏朵粬瀵勫瓨鍣ㄤ腑鐨勫唴瀹癸紝濡侷P錛孋S絳夈?
2.2 D鍛戒護
Debug鐨凞鍛戒護鍙互鏌ョ湅鍐呭瓨涓殑鍐呭錛岀洿鎺ヨ緭鍏鍛戒護鍚庯紝浼氱粰鍑洪粯璁ゅ唴瀛樺湴鍧鐨勪俊鎭紝濡備笅鍥炬墍紺猴細
Figure 5. D command
涔熷彲浠ョ敤“d 孌靛湴鍧:鍋忕Щ鍦板潃”鏉ュ垪鍑烘寚瀹氬唴瀛樺崟鍏冧腑鐨勪俊鎭紝濡備笅鍥炬墍紺猴細
Figure 6. D command
2.3 A鍛戒護
Debug鐨凙鍛戒護浠ユ眹緙栨寚浠ゅ艦寮忓湪鍐呭瓨涓啓鍏ユ満鍣ㄦ寚浠ゃ傝繖鏍峰氨鍙互鏂逛究嫻嬭瘯姹囩紪浠g爜鐨勬晥鏋溿傚涓嬪浘鎵紺哄悜1000:0涓啓鍏ユ眹緙栨寚浠わ細
Figure 7. Write Assembly Code by A Command
濡備笂鍥炬墍紺猴紝鍦ˋ鍛戒護鍚庤窡涓婂湴鍧錛岀劧鍚庡氨鍙互鍚戠浉搴斿湴鍧涓啓鍏ユ眹緙栨寚浠ゃ傚啀鐢―鍛戒護鏌ョ湅鍐呭瓨鏃訛紝灝卞彲浠ョ湅鍒扮浉搴旂殑鏈哄櫒鐮併傛湁浜嗘眹緙栦唬鐮侊紝濡備綍榪愯鍛紵闇瑕佺敤鍒癟鍛戒護銆?
2.4 T鍛戒護
T鍛戒護鐢ㄤ簬鎵цCS:IP鎸囧悜鐨勫唴瀛樺崟鍏冨鐨勬寚浠ゃ傛墍浠ヨ鎵цA鍛戒護鍐欑殑姹囩紪鎸囦護錛岄渶瑕佸厛閫氳繃R鍛戒護淇敼CS鍜孖P瀵勫瓨鍣ㄧ殑鍐呭錛屼嬌浠栦滑鎸囧悜A鍛戒護姹囩紪鎸囦護鎵鍦ㄧ殑鍐呭瓨鍦板潃銆傚涓婂浘鎵紺虹殑A鍛戒護鏄皢姹囩紪鎸囦護鍐欏埌1000:0澶勶紝鎵浠ヤ慨鏀笴S鍜孖P浣夸粬浠寚鍚戣繖涓湴鍧錛?
Figure 8. Modify CS & IP by R command
涓婂浘鎵紺轟負淇敼CS鍜孖P鍚庯紝閫氳繃R鍛戒護鏄劇ず鍑虹粨鏋溿備慨鏀笴S鍜孖P鍚庯紝灝卞彲浠ヨ繍琛孴鍛戒護鏉ユ墽琛屾垜浠啓鍏ョ殑鎸囦護浜嗐?
Figure 8. Run T command
榪愯涓嬈鍛戒護鍚庯紝灝辨墽琛屼簡涓鏉℃眹緙栨寚浠わ紝榪欓噷鎵ц浜唌ov ax,1錛屾墽琛屽悗CS:IP鎸囧悜浜嗕笅鏉℃寚浠ょ殑鍦板潃錛岃繖鏍峰啀鎵ц涓嬈鍛戒護錛屽氨鎵ц浜唌ov bx,2錛屽涓嬪浘鎵紺猴細
Figure 9. Run T Command
榪愯T鍛戒護鍚庯紝鎵ц浜唌ov bx,2錛屽皢BX涓殑鍐呭鏀逛負2浜嗐?
3.Conclusion
瀛︿範姹囩紪璇█錛屽鐞嗚В紼嬪簭鐨勮繍琛屾満鐞嗘湁涓竻鏅拌璇嗭紝鏄兂浠庝簨璁$畻鏈虹瀛︽柟闈㈠伐浣滅殑蹇呬笉鍙皯鐨勫熀紜銆?
閫氳繃瀹夎DOSBox浠庤屽湪Windows7涓繍琛宒ebug銆傚茍閫氳繃debug鐨勫嚑涓懡浠ゆ潵鐔熸倝綆鍗曠殑姹囩紪鎸囦護銆傛渶鍚庨氳繃A錛孯鍜孴鍛戒護錛屽湪debug涓繍琛屾眹緙栨寚浠ゃ?
4.References
1. 鐜嬬埥. 姹囩紪璇█. 娓呭崕澶у鍑虹増紺? 2013
澶у涔嬪墠鐨勬椂闂撮兘鏄寜澶╂潵榪囩殑錛屾湡鐩肩潃涓澶╀竴澶╁湴蹇揩闀垮ぇ錛屾湡鐩肩潃榪囧勾絀挎柊琛o紝闃栧鍥㈣仛錛屽叾涔愯瀺铻嶏紱
澶у鐨勬椂闂撮兘鏄寜鍛ㄦ潵榪囩殑錛屾牴鎹瘡鍛ㄧ殑璇捐〃鍛ㄨ屽濮嬶紝铏界劧鍗曡皟浣嗕篃鏄嚜鐢辮嚜鍦紝綆鍗曞厖瀹烇紱
鍒氬伐浣滅殑鍑犲勾鏃墮棿鏄寜鏈堟潵榪囩殑錛屾瘡涓湀鍙戝伐璧勭殑鏃跺欒繕鏄緢寮蹇冿紝铏界劧鍦ㄥぇ涓婃搗閭e井钖勭殑钖按鍙兘娣規病鍦ㄦ埧縐熶腑錛屼絾涔熸槸鑷鍏跺姏錛屼竴涓漢鎴樻枟銆?/p>
鐜板湪鐨勬椂闂存槸鎸夊勾鏉ヨ繃鐨勶紝涓騫村張涓騫達紝鎰熸叏涓浜嬫棤鎴愮殑鏃跺欙紝涓騫寸湪鐪間箣闂村凡緇忚繃鍘諱簡銆?br />
鍦ㄥ鎵撴嫾鐨勬椂鍏夎櫧鐒跺繖紕岋紝浣嗗灝戞湁浜涙紓娉婃劅銆?012騫磋厞鏈堝ザ濂跺幓涓栵紝娌¤兘鍥炲鐪嬫渶鍚庝竴闈紝寰堟槸閬楁喚銆?015騫磋繕寰堝勾杞葷殑澶х埞鍥犺剳婧㈣鎶㈡晳鏃犳晥涔?/p>
紱誨紑浜嗐傚湪鎰熸叏鐢熷懡鑴嗗急鐨勫悓鏃訛紝涔熷宸ヤ綔銆佺敓媧誨仛浜嗕竴浜涙濊冦備翰浜洪渶瑕侀櫔浼達紝鏈夌殑閿欒繃灝辨槸涓杈堝瓙錛屾專鍐嶅鐨勯挶涔熶簬浜嬫棤琛ャ傚浜庡伐浣滐紝铏界劧涔?/p>
鏄姳鐫寮虹儓鎰忔効鏉ョ殑錛屼絾鏈夋病鏈夊涔犺繘姝ョ殑姘涘洿錛屾劅瑙夊湪榪欑鐜涓嬪涓嶅埌浠涔堢煡璇嗭紝鎵浠ュ仛浜嗗洖瀹剁殑鍐沖畾銆傛瘯涓氬悗鐨勫嚑浠藉伐浣滅粡鍘嗭紝
鏈夌潃寰堝闅懼繕鐨勬棩瀛愩傚垰姣曚笟鏃剁殑闈掓訂錛屽伐浣滃嚑騫村悗鐨勮糠鑼紝鍒扮幇鍦ㄨ兘鎵懼埌鍓嶈繘鐨勬柟鍚戯紝涓璺蛋鏉ヨ鎰熻阿鐨勪漢寰堝銆備竴鐩翠篃寰堝簡騫歌嚜宸辯殑濂借繍姘旓紝搴嗗垢娌℃湁
琚瞾鏈堝彉鎴愯嚜宸辮鍘岀殑浜恒?/p>
紱誨榪戠殑宸ヤ綔鏄儸鎰忕殑錛屾瘡澶╁彲浠ョ潯鍒拌嚜鐒墮啋錛屽彲浠ュ悆鍒頒翰浜哄仛鐨勫彲鍙iキ鑿滐紝涓嶇敤鎷呭績鍦版矡娌癸紝涓嶇敤鎸ゅ叕浜ゅ湴閾侊紝榪欐墠鏄鉤娣$敓媧葷殑鏍峰瓙錛?/p>
鐢熶簬蹇ф偅錛屾浜庡畨涔愶紝瀛熷瓙鐨勮繖鍙ヨ瘽涔熸槸寰堟湁閬撶悊鐨勶紝鎵浠ヤ竴鐩翠互鍐檅log鐨勬柟寮忔潵浣胯嚜宸卞繖璧鋒潵銆傜敱浜庡伐浣滃彉鍔ㄧ殑鍘熷洜錛岄渶瑕侀傚簲鏂扮殑鐜錛屼粖騫村彂琛ㄧ殑
blog鐩稿灝戜竴浜涳紝涓嶈繃娣卞害涔熷ぇ涓浜涳紝鏀惰幏涔熸洿澶с傛劅璋㈠墠杈堜滑鐨勯紦鍔卞拰寤鴻錛屼互鍙婁漢鐢熺粡鍘嗙殑鍒嗕韓銆傛劅璋㈡墍鏈夋湁姊︽兂鐨勫弸浜猴紝鐗瑰埆鎰熻阿Yang bin浠庡ぇ鑰佽繙
甯︿竴妗舵補閫佺粰鎴戯紝榪樻槸寰堟劅鍔ㄣ傚彧瑕佸潥鎸侊紝姊︽兂鎬繪槸浼氬疄鐜扮殑錛屽笇鏈涘湪鏂扮殑涓騫撮噷錛屽ぇ瀹墮兘鑳芥ⅵ鎯蟲垚鐪熴?/p>
2015騫存壙鎺ヤ簡鍑犱釜灝忛」鐩紝甯屾湜鍦ㄦ柊鐨勪竴騫翠腑鑳藉悎浣滃叡璧€傜戶緇璒PEN CASCADE鐨勫涔狅紝甯屾湜鑳芥湁鏇村鐨凙ha!
瀵岃吹涓嶈兘娣紝璐幢涓嶈兘縐伙紝濞佹涓嶈兘灞堬紝紲濆ぇ瀹舵柊騫村揩涔愶紝鍋氳嚜宸卞枩嬈㈢殑鑷繁銆侶appy New Year! To be what you want to be銆?/p>
鐢–++鏉ュ紑鍙戠閬撳嚭鍥劇▼搴廔soAlgo鏃訛紝褰揚CF鏂囦歡鍚嶄腑鍖呭惈涓枃鏃訛紝璇誨彇鏂囦歡浼氬け璐ャ傚皢涓嬮潰鏁版嵁瀛樻垚涓涓畝鍗曟枃浠訛細涓枃.txt 鏀懼埌鐩爣鐩綍涓潵嫻嬭瘯錛?
Figure 1 鍖呭惈涓枃鐨勬枃浠?
綆鍗曟祴璇曠▼搴忎唬鐮佸涓嬫墍紺猴細
騫跺湪Visual Studio鐨勫懡浠ゅ弬鏁頒腑浼犺繘鍘繪枃浠跺悕錛?
Figure 2 Set Command Arguments
榪愯紼嬪簭錛屼細寰楀埌濡備笅閿欒鎻愮ず紿楀彛錛?
Figure 3 assert for the file
榪欐槸鍔犱笂鏂█assert鐨勬晥鏋滐紝鍦―ebug妯″紡涓嬪彲浠ュ緢蹇畾浣嶅埌閿欒錛岃屽湪Release妯″紡涓嬪氨鎶婅繖涓琛屼唬鐮佸拷鐣ヤ簡銆?
鍦ㄧ綉涓婃悳浜嗕笅std::ifstream璇誨彇涓枃鏂囦歡鍚嶇殑鏂囦歡鐨勮В鍐蟲柟妗堬細
v 浣跨敤C璇█鐨勫嚱鏁拌緗垚涓枃榪愯鐜錛?
v 浣跨敤STL涓殑鍑芥暟璁劇疆涓虹郴緇熻璦鐜錛?
鍥犱負IsoAlgo浣跨敤浜哠TL鐨凜++錛屾墍浠ラ夋嫨鏂規2銆傚疄鐜頒唬鐮佸涓嬫墍紺猴細
紼嬪簭榪愯緇撴灉濡備笅鍥炬墍紺猴細
Abstract. The Visual Studio Natvis framework lets you customize the way Visual Studio displays native types in debugger variable windows such as the Watch, Locals and Data Tips windows. It supersedes the autoexp.dat file that has been used in earlier versions of Visual Studio and offers XML syntax, better diagnostics, versioning, and multiple file support. The container in OpenCASCADE is difficult for debugging, such as TColStd_Array1OfInteger in the TColStd package, .etc. Use the natvis framework to create views of these objects will make it easy for developers to inspect them during debugging and so accelerate the debug process.
Key Words. Visual Studio Natvis, OpenCASCADE
1. Introduction
鍥犱負OpenCASCADE鏃╂湡浣跨敤C寮鍙戯紝鎵浠ヨ嚜瀹氫箟浜嗕竴浜涘鍣ㄧ被錛屽鍖匱ColStd涓殑綾伙紝TColGeom鍖呭強鍖匱opTools涓殑綾葷瓑錛岃繖浜涚被鍦–++涓兘鍙互浣跨敤STL鏉ユ浛浠d簡銆傝繖浜涚被鍦―ebug榪囩▼涓紝寰堥毦鏌ョ湅鍏朵腑鐨勫鹼紝濡俆ColStd_Array1OfInteger錛岃繖涓被鐩稿綋浜巗td::vector<int>錛屼絾鏄疍ebug鏃跺彧鑳界湅鍒版暟鎹殑鎸囬拡錛屼笉瀹規槗鏌ョ湅瀹瑰櫒涓瘡涓厓绱犵殑鍊鹼紝濡備笅鍥?.1鎵紺猴細
Figure 1.1 View of TColStd_Array1OfInteger in Locals Window
鐢變笂鍥?.1鍙煡錛屽浜庤繖涓被鐨勫璞★紝Debug鏃跺彧鑳界湅鍒版暟鎹殑璧峰鎸囬拡銆備負浜嗘柟渚胯嚜瀹氫箟綾誨瀷璋冭瘯錛孷isual Studio鍦?012鐗堟湰浠ュ悗錛屽紩鍏ヤ簡Natvis妗嗘灦錛岀敤鏉ユ浛浠e師鏉ョ殑autoexp.dat鏉ヤ負鑷畾涔夌被鍨嬪畾涔夎皟璇曟椂鐨勬暟鎹樉紺恒侼atvis浣跨敤浜哫ML鏂囦歡錛屽彲璇繪ф洿濂斤紝鏄撲簬瀹炵幇銆?
鏈枃浣跨敤Visual Studio鐨凬atvis妗嗘灦錛屾潵瀵筄penCASCADE涓殑涓浜涘鍣ㄧ被鏁版嵁榪涜鍙鍖栵紝鏂逛究寮鍙戣呭OpenCASCADE鐨勮皟璇曘?
2.For Array Container
瀵逛簬OpenCASCADE鐨勫寘TColStd涓殑鏁扮粍綾伙紝瀹氫箟鍏秐atvis濡備笅鎵紺猴細
璋冭瘯鏃舵暟鎹樉紺哄涓嬪浘2.1鎵紺猴細
Figure 2.1 OpenCASCADE array in Locals Windows
鍚岀悊錛屽彲瀵規鍖呬腑鍏朵粬涓緇存暟緇勪嬌鐢ㄥ悓鏍風殑瑙勫垯錛屽嵆鍙鍏朵腑鐨勬暟鎹彲瑙嗗寲錛屼笌std::vector鏄劇ず鐨勬晥鏋滀竴鏍鳳紝鏂逛究璋冭瘯銆?
3.For List Container
瀵逛簬OpenCASCADE鐨勫寘TColStd涓殑閾捐〃綾伙紝瀹氫箟鍏秐atvis濡備笅鎵紺猴細
璋冭瘯鏃跺浜庣被TColStd_ListOfInteger錛宯atvis璇婃柇璇存壘涓嶅埌綾籘ColStd_ListNodeOfListOfInteger瀹氫箟錛屽綋璺熻釜鍒版綾諱竴涓叿浣撳嚱鏁版椂錛屽氨鍙互鐪嬪埌鍏蜂綋鐨勫間簡錛?
Figure 3.1 Natvis gives a Error info
璺熻釜鍒癟ColStd_ListOfInteger鍐呴儴鍚庯紝灝卞彲浠ョ湅鍒扮被TColStd_ListNodeOfListOfInteger涓殑鏁版嵁浜嗭紝浣嗘槸浠嶵ColStd_ListOfInteger鐨勫嚱鏁頒腑鍑烘潵鍚庯紝灝辯湅涓嶅埌浜嗐?
濡傛灉榪欎釜闂瑙e喅浜嗭紝瀵逛簬綾籘opoDS_ListOfShape涓殑鏁版嵁涔熷彲浠ョ敤鍚屾牱鐨勬柟寮忔潵鏄劇ず錛屾瀬澶у湴鏂逛究浜嗗紑鍙戣呭鍏惰皟璇曘傚鏋滀綘瀵規鏈夎В鍐沖姙娉曪紝嬈㈣繋涓嶅悵璧愭暀銆?
Figure 3.2 Data view for TColStd_ListNodeOfListOfInteger
鍏堜粠綆鍗曠殑瀹瑰櫒綾葷潃鎵嬶紝瑙e喅鍚庡彲灝員opoDS_ListOfShape涓殑鏁版嵁鏄劇ず鍑烘潵錛屼負OpenCASCADE紼嬪簭鐨勮皟璇曟彁渚涙柟渚褲?
4.Conclusion
Visual Studio 2012鐗堟湰浠ュ悗寮曞叆浜哊atvis妗嗘灦鏉ュ鑷畾涔夌殑綾昏繘琛屽彲瑙嗗寲錛屾柟渚胯皟璇曘侽penCASCADE涓湁寰堝瀹瑰櫒綾葷洿鎺ヤ嬌鐢ㄤ簡鎸囬拡錛岃皟璇曠▼搴忔椂鏁版嵁寰堜笉鐩磋銆傚簲鐢∟atvis鏉ュ涓浜涚被鍦ㄨ皟璇曟椂鐨勮鍥捐繘琛岄厤緗紝鍙互鏂逛究鏌ョ湅鍏朵腑鏁版嵁錛屼嬌OpenCASCADE鐨勮皟璇曟洿杞繪澗銆?
瀵逛簬涓緇存暟緇勭殑natvis瀹氫箟榪樻槸寰堢畝鍗曠殑錛屼絾鏄浜嶭ist鍑虹幇浜嗛棶棰樸傚鏋滆繖涓棶棰樿В鍐充簡錛屽TopoDS_ListOfShape鐨勫彲瑙嗗寲涔熷彲鍋氬悓鏍風殑澶勭悊錛屾柟渚塊犲瀷綆楁硶璋冭瘯銆傝嫢鎮ㄦ湁瑙e喅鏂規錛屾湜涓嶅悵璧愭暀銆?
5. References
1. Create custom views of native objects in the debugger.
https://msdn.microsoft.com/en-us/library/vstudio/jj620914.aspx
2. Writing debugger type visualizers for C++ using .natvis files
https://code.msdn.microsoft.com/Writing-type-visualizers-2eae77a2#content
3. vczh. C++瀹炵敤鎶宸т箣閰嶇疆Visual C++鐨勮皟璇曞櫒鏄劇ず鏁版嵁緇撴瀯鐨勬牸寮?
http://www.shnenglu.com/vczh/archive/2013/03/21/198665.html
4. stl.natvis in %VSINSTALLDIR%\Common7\Packages\Debugger\Visualizers
5. qt5.natvis in %VSINSTALLDIR%\Common7\Packages\Debugger\Visualizers
PDF Version: Create views of OpenCASCADE objects in the Debugger
Abstract. Tcl/Tk provide a programming system for developing and using graphical user interface(GUI) applications. Tcl stands for “tool command language” and is pronounced “tickle”, is a simple scripting language for controlling the extending applications. The blog use Tcl/Tk to iterate all the files for a given directory, this is useful to some automation work, such as change all the file names for a given directory; add copyright info for the source code files.
Key Words. Tcl/Tk, Iterate Files錛岄亶鍘嗘枃浠跺す涓墍鏈夋枃浠?
1. Introduction
Tcl/Tk鏄竴縐嶇敤浜庢槗浜庝嬌鐢ㄧ殑鑴氭湰璇█錛屽彲浠ョ敤鏉ュ紼嬪簭榪涜鎵╁睍鍙婂畬鎴愪竴浜涜嚜鍔ㄥ寲鐨勫伐浣滐紝鍔犱笂鍐呯疆鐨勪竴浜涘懡浠わ紝鍏跺姛鑳借姣擶indows涓殑DOS鐨勬壒澶勭悊鍛戒護鍔熻兘鏇村己澶э紝浣跨敤鏇存柟渚褲俆cl鑴氭湰璇█鏄紑婧愬厤璐圭殑錛屽彲浠ユ柟渚胯幏鍙栦笖鍏嶈垂浣跨敤銆?
OpenCASCADE涓嬌鐢ㄤ簡Tcl/Tk鏉ュ疄鐜頒簡涓涓嚜鍔ㄥ寲嫻嬭瘯浣撶郴銆備嬌鐢ㄥ湪OpenCASCADE涓嬌鐢ㄨ嚜瀹氫箟鐨凾cl鍛戒護錛屽彲浠ュ揩閫熸潵媯楠岀畻娉曠殑緇撴灉銆傞氳繃緙栧啓鑴氭湰鏂囦歡錛屽疄鐜頒簡嫻嬭瘯鐨勮嚜鍔ㄥ寲銆傛墍浠ュ涔犱竴涓婽cl/Tk鑴氭湰璇█錛屽茍鍦ㄥ疄闄呯殑宸ヤ綔涓姞浠ュ簲鐢紝鍙互灝嗕竴浜涙満姊扮殑鍔沖姩浜ょ粰璁$畻鏈鴻嚜鍔ㄥ畬鎴愩?
鏈枃涓昏璇存槑濡備綍浣跨敤Tcl/Tk鏉ラ亶鍘嗘寚瀹氭枃浠跺す涓墍鏈夋枃浠躲傚埄鐢ㄦ鍔熻兘錛屽彲浠ョ◢寰姞浠ユ墿灞曪紝灝卞彲浠ュ畬鎴愪竴浜涘疄闄呯殑閲嶅鍔沖姩銆傚閬嶅巻鎸囧畾鐩綍涓墍鏈夌殑婧愭枃浠舵垨鎸囧畾綾誨瀷鐨勬枃浠訛紝娣誨姞涓婄増鏉冧俊鎭瓑銆?
2. Tcl/Tk Code
瑕侀亶鍘嗘寚瀹氱洰褰曚笅鎵鏈夌殑鏂囦歡錛屽寘鎷瓙鏂囦歡澶癸紝闇瑕佺敤鍒板懡浠lob鍙婁竴涓掑綊鍑芥暟銆傝剼鏈唬鐮佸涓嬫墍紺猴細
紼嬪簭鐢ㄦ硶涓烘墦寮Tcl瑙i噴鍣紝浣跨敤鍛戒護source鍔犺澆鑴氭湰鏂囦歡錛屽涓嬪浘鎵紺猴細
Figure 2.1 Tcl usage
3. Conclusion
閫氳繃搴旂敤Tcl/Tk鏉ヤ綋楠岃剼鏈紪紼嬬殑涔愯叮錛屽茍鍔犳繁瀵筎cl/Tk鐨勭悊瑙c備粠鑰屽OpenCASCADE鐨勬ā鍧桪raw Test Harness鏇村ソ鍦扮悊瑙c?
濡傛灉鏈夌紪紼嬪熀紜錛孴cl/Tk浼氬緢蹇叆闂ㄧ殑銆傚叆闂ㄥ悗錛屽彲浠ュ簲鐢ㄥ叾鐩存帴緙栧啓涓浜涙湁鎰忔濇湁鑴氭湰錛屾潵瀹炵幇涓浜涢噸澶嶅伐浣滅殑鑷姩鍖栥備篃鍙皢Tcl鍔犲叆鍒拌嚜宸辯殑紼嬪簭涓紝澧炲姞紼嬪簭鐨勪簩嬈″紑鍙戝姛鑳姐?
鍙錛岀帺涓鐜╄剼鏈璦錛岃繕鏄潪甯告湁瓚g殑錛?/p>
PDF Version and Script: Iterate Files by Tcl
Abstract. There are many drawing files during the ship design or other design process, so somebody want to merge them to one DWG file. The DwgMerger is a AutoCADE plugin developed by AutoCAD .NET, its purpose is to merge all the drawing files, include dwg and dxf format to one drawing paper.
Key Words. AutoCAD, DWG, DXF, Merger, 鍚堝茍
1. Introduction
鍦ㄥ伐紼嬭璁¤繃紼嬩腑錛屼細浜х敓寰堝鍥劇焊銆傚儚鑸硅埗鐢熶駭璁捐鐨勭緋誨嚭鍥撅紝鏈夌殑鍖哄煙鎴栧垎孌典細浜х敓鍑犵櫨寮犵瀛愰浂浠跺浘銆備負浜嗕究浜庡浘綰哥殑綆$悊鍙婃墦鍗幫紝闇瑕佸皢榪欎簺鍥劇焊鍚堝茍鍒頒竴寮犲浘綰鎬笂銆備負姝わ紝鍒╃敤AutoCAD .NET寮鍙戜竴涓皬鎻掍歡DwgMerger錛屾潵瀹炵幇榪欎釜鍔熻兘銆?
鍘熸潵鐩存帴寰楃敤C++寮鍙戜竴涓笉渚濊禆AutoCAD鐨勫悎騫禗XF鏂囦歡鐨勫皬紼嬪簭DxfMerger錛岃瑙侊細http://www.shnenglu.com/eryar/archive/2012/07/12/183053.aspx 銆備絾鏄繖涓▼搴忔湁寰堝灞闄愭э紝濡傚彧鑳藉鐞嗘瘮杈冧綆鐗堟湰鐨凞XF錛涗笉鑳藉鐞咲WG鏍煎紡絳夛紝鎵浠ヨ繜榪熸病鏈夊彂甯冨嚭鏉ャ傝冭檻鍒版湁榪欎簺DXF錛孌WG鏍煎紡鐨勫浘綰哥殑鐢ㄦ埛閮戒細瀹夎AutoCAD錛屾墍浠ュ喅瀹氱洿鎺ヤ嬌鐢ˋutoCAD .NET鏉ュ紑鍙戜竴涓彃浠訛紝榪欐牱灝辨病鏈変粈涔堥檺鍒朵簡銆備笉浠呰兘鍚堝茍DXF鏂囦歡錛岃繕鑳藉悎騫禗WG鏂囦歡銆傚彧瑕佷綘鐨凙utoCAD鑳芥墦寰楀紑鐨勫浘綰告枃浠訛紝搴旇閮借兘榪涜鍚堝茍銆?
紼嬪簭寮鍙戠幆澧冧負AutoCAD2012錛岀▼搴忚繍琛岀幆澧冧負錛欰utoCAD2010, 2012絳夈?
2.Usage
鍥犱負鏄敤AutoCAD .NET寮鍙戠殑錛屾墍浠ョ▼搴忕殑鐢ㄦ硶鍜屽叾浠朅utoCAD .NET鎻掍歡涓鑷淬傛楠ゅ涓嬶細
v 鎵撳紑AutoCAD錛岃緭鍏ュ懡浠わ細netload錛屽涓嬪浘鎵紺猴細
v 灝嗙▼搴忓鍒跺埌AutoCAD鐨勫畨瑁呯洰褰曪紝騫跺姞杞紻wgMerger.dll紼嬪簭闆嗭紝濡備笅鍥炬墍紺猴細
v 鍔犺澆鎴愬姛鍚庯紝杈撳叆鍛戒護錛歮erge錛屼細鎵撳紑紼嬪簭涓葷晫闈㈠涓嬪浘鎵紺猴細
v 鍦ㄦ枃浠跺垪琛ㄤ笂鍙抽敭錛屾坊鍔犺鍚堝茍鐨勫浘綰告枃浠訛紝鍙互閫氳繃娣誨姞鏂囦歡澶圭殑鏂瑰紡錛屼篃鍙互閫氳繃閫夋嫨鏂囦歡鐨勬柟寮忥紝濡備笅鍥炬墍紺猴細
v 璁劇疆瑕佸悎騫跺浘綰哥殑灝哄錛岄粯璁ゅ昂瀵鎬負A4澶у皬鐨勶紝鍙互鏍規嵁瀹為檯闇瑕佷慨鏀癸紱
v 璁劇疆鍚堝茍鍚庨檲鍒椾竴琛岀殑鍥劇焊鏁伴噺錛岄粯璁や負姣忚10寮狅紱
v Apply錛?
鐢熸垚鏁堟灉鍥懼涓嬫墍紺猴細
Download DwgMerger: DwgMerger
鏈変竴澶╀綘灝嗙牬铔硅屽嚭錛屾垚闀垮緱姣斾漢浠湡寰呯殑榪樿緹庝附銆?/font>
浣嗚繖涓繃紼嬩細寰堢棝錛屼細寰堣緵鑻︼紝鏈夋椂鍊欒繕浼氳寰楃伆蹇冦?/span>
闈㈠鐫姹規秾鑰屾潵鐨勭幇瀹烇紝瑙夊緱鑷繁娓哄皬鏃犲姏銆?/span>
浣嗚繖錛屼篃鏄敓鍛界殑涓閮ㄥ垎銆?/span>鍋氬ソ鐜板湪浣犺兘鍋氱殑錛岀劧鍚庯紝涓鍒囬兘浼氬ソ鐨勩?/span>
鎴戜滑閮藉皢瀛ょ嫭鍦伴暱澶э紝涓嶈瀹蟲曘?/span>
—— 瀵傚湴銆婅府鑴氬紶鏈涚殑鏃跺厜銆?/span>
Debian鏄疧penCASCADE鐢ㄤ簬Linux鎿嶄綔緋葷粺嫻嬭瘯鐨勪笓鐢ㄧ郴緇熴傝繖鍑犲ぉ涓嬭澆瀹夎浜咲ebian緋葷粺錛屼綋楠屼簡涓涓嬶紝鎰熻榪樹笉閿欙細綆媧侊紝綺捐嚧銆?
Figure 1. Debian GUI
Figure 2. Debian GUI
瀹夎Debian涔熷茍涓嶆槸涓甯嗛欏猴紝鍜屽垰寮濮嬭嚜宸卞畨瑁匴indows鎿嶄綔緋葷粺涓鏍鳳紝涔熼亣鍒頒簡浜涘皬闂銆備笉榪囨妸榪欎簺閮借В鍐沖悗錛孌ebian鐢ㄨ搗鏉ユ劅瑙夊緢瀵瑰懗銆?
v 鏄懼崱椹卞姩
棣栧厛閬囧埌鏄樉鍗¢┍鍔ㄦ病鏈夋紜畨瑁呫傜敱浜庣瑪璁版湰鏄疉TI鐨勬樉鍗★紝浣跨敤緋葷粺鑷甫鐨勯┍鍔ㄨ繕涓嶈銆傚湪緗戜笂鎼滀簡寰堝鏂規硶錛屾渶緇堣繕鏄敤瀹樼綉涓婄殑鏂規硶鎴愬姛瑙e喅闂銆?
Figure 3. The ATI Radeon HD Drivers Installation in Debian
閫夋嫨鏄懼崱瀵瑰簲鍨嬪彿鐨勯┍鍔紝涓瀹氳鎶?#8221;Contrib”鍜?#8221;non-free”鍔犲埌sources.list涓幓錛屽涓婂浘鎵紺恒傜劧鍚庡啀鐩存帴鎵ц涓嬮潰涓ゆ潯鍛戒護鍗沖彲銆?
璇︽儏鍙弬鑰冿細https://wiki.debian.org/ATIProprietary 銆?
浣跨敤鍛戒護錛歡lxgears鏉ユ祴璇曚竴涓?D鐨勬ц兘錛?
鐢卞浘鍙煡錛岃繖涓畝鍗曠殑3D紼嬪簭寰楀埌鐨勫撫棰戞槸2000 FPS宸﹀彸錛屾瘮OpenSceneGraph鍦╓indows涓嬬殑瑕侀珮澶氫簡銆傦紙榪欎釜絎旇鏈殑鏄懼崱榪樻槸姣旇緝鑰佺殑銆傦級
v嫻忚鍣ㄧ殑Flash 鎻掍歡
嫻忚鍣↖ceweasel榛樿娌℃湁鎶奆lash鎻掍歡瀹夎濂斤紝瀵艱嚧涓浜涘湪綰塊煶涔愬拰鐢靛獎涓嶈兘鎾斁銆傚湪緗戜笂涔熸悳绱簡寰堝錛岀粨鏋滆繕鏄寜瀹樼綉涓婄殑鏂規硶鎼炲畾銆傚叾涓富瑕佽繕鏄鎶婃簮璁劇疆濂斤紝灝辮兘鑷姩瀹夎浜嗐傚畨瑁呮柟娉曞涓嬫墍紺猴細
Figure 4. Flash Player Plugin for Iceweasel
鏈変簡Flash灝卞彲浠ヨ竟鍚瓕杈瑰啓浠g爜浜嗐?
璇︽儏鍙弬鑰冿細https://wiki.debian.org/FlashPlayer/ 銆?
v 杈撳叆娉昮citx
鍏堣緗郴緇熺殑locales錛屼嬌鍏朵腑鍖呭惈涓枃瀛楀簱銆傚啀瀹夎fcitx錛屾寜緗戜笂鐨勬搷浣滀篃瀹炵幇浜嗚嫳鏂囩殑緋葷粺涓枃鐨勮緭鍏ャ?
鎬葷粨
瑙e喅浜嗚繖浜涢棶棰樺悗錛孌ebian鐢ㄨ搗鏉ユ劅瑙夎繕濂斤紝榪橀渶瑕佹參鎱㈢啛鎮夊拰閫傚簲銆備笅涓姝ュ噯澶囧湪Debian涓婄紪璇戙佽皟璇旵/C++紼嬪簭銆備負緙栬瘧OpenCASCADE鐨凩inux鐗堟湰鎵撲笅鍩虹銆?
鎰熻阿灝忚儢甯堝厔錛岃繖涓嵃绔犲緢鏈夊懗閬撱?/p>
鏈鍚庢墠鍙戠幇鏄枃浠跺悕鏈夐棶棰橈紝淇敼紼嬪簭錛屽幓鎺夌敓鎴愭枃浠跺悕鐨勪竴涓猻td::endl鍗沖彲錛?/p>
涓嶇粡鎰忛棿灝變細鍐欏嚭榪欑灝忛敊璇殑浠g爜錛岃屼笖鎵鵑敊寰堝緢璐規椂銆?/p>
Figure 1. HangzhouDong Railway Station
Figure 2. Railway station roof
涓鍘繪澀宸炵帺錛岀湅鍒版澀宸炰笢鐏濺绔欏眿欏跺緢鏈夋劅瑙夛紝灝辨媿浜嗗嚑寮犵収鐗囥傜湅鐫閭i犲瀷錛岃仈鎯沖埌鏇查潰閫犲瀷錛屽嵆鍙互鐢ㄥ杈瑰艦鏉ヨ〃紺鴻嚜鐢辨洸闈€?/p>
2. 鍒兂涓涓嬮犲嚭澶ф搗錛屽繀欏誨厛鐢卞皬娌沖窛寮濮嬶紱
3. 浣犳湁鑴告槸涓轟簡鍛堢幇涓婂笣璧愮粰浜虹被鏈璐甸噸鐨勭ぜ鐗?#8212;—寰瑧錛屼竴瀹氳鎴愪負浣犲伐浣滄渶澶х殑璧勪駭錛?/p>
4. 浠ヨ瘹鎰熶漢鑰咃紝浜轟害璇氳屽簲錛?/p>
5. 鍗充嬌涓嶆垚鐔熺殑灝濊瘯錛屼篃鑳滀簬鑳庢鑵逛腑鐨勭瓥鐣ワ紱
6. 縐瀬鑰呯浉淇″彧鏈夋帹鍔ㄨ嚜宸憋紝鎵嶈兘鎺ㄥ姩涓栫晫錛屽彧瑕佹帹鍔ㄨ嚜宸憋紝灝辮兘鎺ㄥ姩涓栫晫錛?/p>
7. 琛屽姩鏄垚鍔熺殑闃舵錛岃鍔ㄨ秺澶氾紝鐧誨緱瓚婇珮錛?/p>
8. 涓嶈絳夊緟鏈轟細錛岃岃鍒涘緩鏈轟細錛?/p>
9. 鎴愬姛鐨勬硶鍒欐瀬涓虹畝鍗曪紝浣嗙畝鍗曞茍涓嶄唬琛ㄥ鏄擄紱
10. 鏄ㄦ櫄澶氬嚑鍒嗛挓鐨勫噯澶囷紝浠婂ぉ灝戝嚑灝忔椂鐨勯夯鐑︼紱
11. 涓栫晫涓婇偅浜涙渶瀹規槗鐨勪簨鎯呬腑錛屾嫋寤舵椂闂存渶涓嶈垂鍔涳紱
12. 鏈浘澶辮觸鐨勪漢鎭愭曚篃鏈浘鎴愬姛榪囷紱
13. 鎸姌鍏跺疄灝辨槸榪堝悜鎴愬姛鎵搴旂即鐨勫璐癸紱
14. 浠諱綍鐨勯檺鍒墮兘鏄粠鑷繁鐨勫唴蹇冨紑濮嬬殑錛?/p>
15. 蹇樻帀澶辮觸錛屼笉榪囪鐗㈣澶辮觸涓殑鏁欒錛?/p>
16. 涓嶆槸澧冨喌閫犲氨浜猴紝鑰屼漢閫犲氨澧冨喌錛?/p>
17. 闈犲北灞變細鍊掞紝闈犳按姘翠細嫻侊紝闈犺嚜宸辨案榪滀笉鍊掞紱
18. 鍙璺槸瀵圭殑錛屽氨涓嶆曡礬榪滐紱
19. 涓涓兘浠庡埆浜虹殑瑙傚康鏉ョ湅浜嬫儏錛岃兘浜嗚В鍒漢蹇冪伒媧誨姩鐨勪漢錛屾案榪滀笉蹇呬負鑷繁鐨勫墠閫旀媴蹇冿紱
20. 褰撲竴涓漢鍏堜粠鑷繁鍐呭績寮濮嬪鏂楋紝浠栧氨鏄釜鏈変環鍊肩殑浜猴紱
21. 鐢熷懡瀵規煇浜涗漢鏉ヨ鏄編涓界殑錛岃繖浜涗漢鐨勪竴鐢熼兘涓烘煇涓洰鏍囪屽鏂楋紱
22. 鍑$湡蹇冨皾璇曞姪浜鴻咃紝娌℃湁涓嶅府鍒拌嚜宸辯殑銆?/p>
CAD鎶鏈粡榪囧嚑鍗佸勾鐨勫彂灞曪紝鍏堝悗璧拌繃浜嗗ぇ鍨嬫満銆佸皬鍨嬫満銆佸伐浣滅珯銆佸井鏈烘椂浠o紝姣忎釜鏃朵唬閮芥湁褰撴椂嫻佽鐨凜AD杞歡銆備笅闈㈠垎鍒粙緇嶄竴浜涙祦琛岀殑鍙敤浜庢洸闈㈤犲瀷鐨勮蔣浠訛細
鍋囧鏄劇ず鍣ㄧ殑鍒嗚鯨鐜囧彲浠ヨ秼浜庢棤闄愶紝
閭d箞鎴戝皢鐢?em>glVertex鐢誨嚭鍏呮弧鏌旀儏鐨勫姬綰垮拰椋橀告磼鑴辯殑闈㈢墖銆?
鍋囧涓嶅幓鐞嗕細嬈ф媺紺烘ф暟鏄惁絳変簬2鐨勭害鏉燂紝
閭d箞鎴戝皢鐢?em>NURBS鍒涢犱竴涓煆鎷夊浘鐨勮嚜鐢辯悊鎯沖浗搴︺?
鍋囧鐖辨儏鍙互涓嶅啀鍔熷埄涓栦織錛?
閭d箞鎴戝皢涓嶤AGD鎼烘墜涓轟即錛岀浉瀹堜竴鐢熴?
澹垖涔嬬錛屼竷鏈堟棦鏈涳紝鑻忓瓙涓庡娉涜垷娓鎬簬璧ゅ涔嬩笅銆傛竻椋庡緪鏉ワ紝姘存嘗涓嶅叴銆備婦閰掑睘瀹紝璇墊槑鏈?/pre>璇楋紝姝岀獔紿曚箣绔犮傚皯鐒夛紝鏈堝嚭浜庝笢灞變箣涓婏紝寰樺緤浜庢枟鐗涗箣闂淬傜櫧闇叉í姹燂紝姘村厜鎺ュぉ銆傜旱涓鑻囦箣鎵濡傦紝鍑屼竾欏蜂箣鑼劧銆傛旦嫻╀箮濡傚啹铏氬盡椋庯紝鑰屼笉鐭ュ叾鎵姝紱椋橀涔庡閬椾笘鐙珛錛岀窘鍖栬岀櫥浠欍?/pre>銆銆浜庢槸楗厭涔愮敋錛屾墸鑸瘋屾瓕涔嬨傛瓕鏇幫細“妗傛9鍏叞妗紝鍑葷┖鏄庡叜婧祦鍏夈傛負娓哄叜浜庢錛屾湜緹庝漢鍏ぉ涓鏂廣?#8221;瀹㈡湁鍚規礊綆咃紝鍊氭瓕鑰屽拰涔嬨傚叾澹板憸鍛滅劧錛屽鎬ㄥ鎱曪紝濡傛常濡傝瘔錛屼綑闊寵琚咃紝涓嶇粷濡傜紩銆傝垶騫藉涔嬫綔铔燂紝娉e鑸熶箣瀚犲銆?/pre>銆銆鑻忓瓙鎰鐒訛紝姝h鍗卞潗鑰岄棶瀹㈡洶錛?#8220;浣曚負鍏剁劧涔燂紵”瀹㈡洶錛?#8220;‘鏈堟槑鏄熺█錛屼箤楣婂崡椋?#8217;錛屾闈炴浌瀛熷痙涔嬭瘲涔庯紵瑗挎湜澶忓彛錛屼笢鏈涙鏄岋紝灞卞窛鐩哥吉錛岄儊涔庤媿鑻嶏紝姝ら潪瀛熷痙涔嬪洶浜庡懆閮庤呬箮錛熸柟鍏剁牬鑽嗗窞錛屼笅姹熼櫟錛岄『嫻佽屼笢涔燂紝
鑸寵埢鍗冮噷錛屾棇鏃楄斀絀猴紝閰鵑厭涓存睙錛屾í妲婅祴璇楋紝鍥轟竴涓栦箣闆勪篃錛岃屼粖瀹夊湪鍝夛紵鍐靛惥涓庡瓙娓旀ǖ浜庢睙娓氫箣涓婏紝渚i奔铏捐屽弸緋滈箍錛岄┚涓鍙朵箣鎵佽垷錛屼婦鍖忔ń浠ョ浉灞炪傚瘎铚夎潱涓庡ぉ鍦幫紝娓烘缽嫻蜂箣涓綺熴傚搥鍚劇敓涔嬮』鑷撅紝緹¢暱姹熶箣鏃犵┓銆?br />鎸熼浠欎互閬ㄦ父錛屾姳鏄庢湀鑰岄暱緇堛傜煡涓嶅彲涔庨寰楋紝鎵橀仐鍝嶄簬鎮查銆?#8221;銆銆鑻忓瓙鏇幫細“瀹害鐭ュか姘翠笌鏈堜箮錛熼濊呭鏂紝鑰屾湭灝濆線涔燂紱鐩堣櫄鑰呭褰鹼紝鑰屽崚鑾秷闀夸篃銆傜洊灝嗚嚜鍏跺彉鑰呰岃涔嬶紝鍒欏ぉ鍦版浘涓嶈兘浠ヤ竴鐬紱鑷叾涓嶅彉鑰呰岃涔嬶紝鍒欑墿涓庢垜鐨嗘棤灝戒篃銆傝屽張浣曠盡涔庯紒涓斿か澶╁湴涔嬮棿錛岀墿鍚勬湁涓伙紝
鑻熼潪鍚句箣鎵鏈夛紝铏戒竴姣岃帿鍙栥傛儫姹熶笂涔嬫竻椋庯紝涓庡北闂翠箣鏄庢湀錛岃沖緱涔嬭屼負澹幫紝鐩亣涔嬭屾垚鑹詫紝鍙栦箣鏃犵錛岀敤涔嬩笉绔紝鏄犵墿鑰呬箣鏃犲敖钘忎篃錛岃屽惥涓庡瓙涔嬫墍鍏遍傘?#8221;銆銆瀹㈠枩鑰岀瑧錛屾礂鐩忔洿閰屻傝偞鏍告棦灝斤紝鏉洏鐙肩睄銆傜浉涓庢灂钘変箮鑸熶腑錛屼笉鐭ヤ笢鏂逛箣鏃㈢櫧銆?/pre>
浜虹敓瑙備富瑕侀氳繃浜虹敓鐩殑銆佷漢鐢熸佸害銆佷漢鐢熶環鍊間笁涓柟闈綋鐜板嚭鏉ャ備漢鐢熺洰鐨勫洖絳斾漢涓轟粈涔堟椿鐫錛涗漢鐢熸佸害琛ㄦ槑浜哄簲褰撴庢牱瀵瑰緟鐢熸椿錛涗漢鐢熶環鍊煎垽鏂粈涔堟牱鐨勪漢鐢熸墠鏈夋剰涔夈?/p>
涓涓爲绔嬩簡涓轟漢姘戞湇鍔′漢鐢熻鐨勪漢錛屽氨鑳藉浜虹敓鐨勭洰鐨勬湁鏇翠負娣卞埢鐨勭悊瑙o紝鏃舵椂澶勫涓轟漢姘戠潃鎯籌紝鍔╀漢涓轟箰錛岄犵浜烘皯錛屾垚涓轟漢鍙椾漢姘戞榪庣殑浜恒備竴涓漢鐨勮兘鍔涙湁澶у皬錛岃亴涓氭湁涓嶅悓錛屼絾鍙縐戝璁よ瘑浜虹敓鐩殑錛屽垏瀹炴妸浜烘皯鍒╃泭鏀懼湪棣栦綅錛屼互浜烘皯鍒╃泭涓洪噸錛屼笉涓虹嫮闅樼蹇冩墍鎵幫紝涓嶄負嫻崕鍚嶅埄鎵绱紝涓嶄負浣庝織鐗╂鎵鎯戯紝灝辮兘澶熶笉鏂疄璺甸珮灝氱殑浜虹敓浠峰箋傚叏蹇冨叏鎰忎負浜烘皯鏈嶅姟鐨勭簿紲烇紝姣笉鍒╁繁錛屼笓闂ㄥ埄浜虹殑綺劇搴斿綋鎴愪負鎴戜滑鏃朵唬鏈宕囬珮鐨勭簿紲炪?/p>
浜虹殑涓鐢熸諱細閬囧埌鍚勭鍚勬牱鐨勪漢鐢熷閬囷紝鍙鏍戠珛涓轟漢姘戞湇鍔$殑浜虹敓瑙傦紝灝辮兘浠ョН鏋佺殑蹇冩佺湅寰呬漢鐢熺殑鎰忎箟錛屾妸涓漢鐨勫姫鍔涗笌浜烘皯鐨勪簨涓氱粨鍚堣搗鏉ワ紝鑳告榪滃ぇ鐞嗘兂錛岀Н鏋佹姇韜ぞ浼氬疄璺碉紝鐑埍鐢熸椿錛岀弽瑙嗙敓鍛斤紝鐢ㄥ潥蹇嶄笉鎷旂殑鎰忓織鍕囨暍鎴樿儨鐢熸椿銆佸涔犲拰宸ヤ綔涓縐嶅洶闅懼拰鎸姌錛屽湪涓嶆柇鐨勫紑鎷撲漢鐢熸洿楂樺鐣屼腑棰嗕細鐢熸椿鐨勭編濂姐?/p>