Files
RevitSdkSamples/snapshot/2012/SDK/Point Cloud Indexing API/PointCloudIndexerPluginAPI.doc
T

93 lines
32 KiB
Plaintext
Raw Normal View History

2024-12-12 09:51:40 +01:00
ÐÏࡱá>þÿ :=þÿÿÿ9ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿì¥Áð¿ŠbjbjVV .$r<r<Šÿÿÿÿÿÿ·4
4
ŽŽŽŽŽÿÿÿÿ¢¢¢¢ ®¢–&žÊÊÊÊÊ¥¥¥&&&&&&&$4(²æ*f;&Ž¥¥¥¥¥;&ŽŽÊÊÛP&çç祪ŽÊŽÊ&ç¥&ççrÉ$TÉ%ÊÿÿÿÿP™Ii•ÓËÿÿÿÿOv%&f&0&+%žL+Å"L+É%L+ŽÉ%8¥¥ç¥¥¥¥¥;&;&祥¥&¥¥¥¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿL+¥¥¥¥¥¥¥¥¥4
T: Point Cloud Indexer Plugin API
Summary
Revit 2012 supports linking point cloud data into a Revit project and displaying this data to assist in creating a Building Information Model. To display point cloud data in Revit, the supplied point cloud file must be in a format that Revit can understand. Point Cloud data is stored in an indexed format (.PCG) that Revit and other Autodesk products can read, parse, and display.
To support other 3rd party scanned raw data formats, Revit “indexes” or converts those formats to the PCG format that Revit can display and manipulate. The indexing consists of a standalone executable that is launched from Revit when a format or “codec” other than PCG is selected. The indexing process converts the data into the PCG format.
The indexer ships with support for indexing the following formats or “codecs:”
Leica
Faro
.las codec
.XYB codec
.XYZ codec
.pts codec
Extending the Indexer
The indexer can be extended to support additional codecs/file formats by creating a plugin for the indexer.
Indexer plugins consist of a DLL file placed in the following location:
[folder where revit.exe resides]\Plugins\Point Clouds Codecs
The plugin must implement the following classes and APIs:
Class IIndexerPlugin
This is the “entry” point for the indexer into the plugin. This simple interface class has the following methods:
const wchar_t* getCodecs: Returns a semi-colon delimited list of “codecs” or file extensions the indexer supports (for example: “.ext1;.ext2”).
CodecFileReader* getFileReader(const wchar_t* codec): Given a codec, returns the reader for that codec that the plugin provides. See below for more information on the Reader implementation.
Bool canImport(const wchar_t* inputFile): Given a file name/path, returns true if the plugin is able to import/support the specified file/codec. Typically, this involves looking at the extension, but could involve opening and parsing header information etc., for further validation.
destroy: Called when the indexer is completed with the plugin and it is safe to release resources/memory.
Access to the implementation of this class is via a “C” style API that MUST BE implemented and exported by the dll:
IIndexerPlugin* getIndexerPlugin();
Class CodecFileReader
The core of the plugin work is done by the CodecFileReader. The CodecFileReader parses the data from the codec, and returns the various points for conversion into the format supported by Revit. The reader implements the following methods:
Bool open (const wchar_t* inputfile): Opens the specified file for processing. Returns true if the file is opened and readable, false otherwise.
close(): Closes the opened file.
Filestats(double* minPts, double* maxPts, long long& numpoints): Collects the stats for the file, if the file was successfully opened, and sets the data as follows:
minPts[0] to the minimum x-value of all points in the file
minPts[1] to minimum y-value of all points in the file
minPts[2] to minimum z-value of all points in the file
maxPts[0], maxPts[1], maxPts[2] to the maximum x,y,z of all points in file
numPoints to total number of points in the file
The following methods sequentially read all valid points in the file, returning false when no more points remain. If the point isnt classified, then the classification is set to 0xff. If the point does not have intensity, then the intensity is set to -1:
Bool readFirstPoint(double& x, double& y, double& z, unsigned char& red, unsigned char& green, unsigned char& blue, unsigned char& classification, float& intensity)
Bool readNextPoint(double& x, double& y, double&z, unsigned char& red, unsigned cha
þ
œ
 ' * R r © ¿ Ä Ë Ñ ß ÁÂt{|Œ^_48;?AGrvx~©­¯µó÷úþ¦«ˆŠüøüíåÙåÑåÍåÅåÅå¹åÅåÅåͲͮͮͮͮͮͮͮͮͮͮͮͮͮͮͲ§ h8Pÿh´htK h´h{Td6CJaJhtKCJaJhƒ/ƒCJaJhƒ/ƒCJH*aJCJaJCJaJhBhƒ/ƒ6 ()§ ý
þ
M S X c n y œ
R Ê Ë à á úõðõëëõëããããããÞëëëëëëëëÙëgdügdü
& Fgdügdügdƒ/ƒgdƒ/ƒgdƒ/ƒá S
å
¥Á,¡ÅÆÜÝÌ^'bÐKKð©ªðúòòòòúúúíúúåååÝÝÝÝÝåÝÝíúú
& Fgdü
& Fgdügdü
& Fgdügdüðñe$¬ÿOŠúòòòòòòòòígdü
& Fgdügdü
,1h°Ð/ °à=!° "° # $ °Ð°Ð Ðj ˜žžžžžžžž666666666vvvvvvvvv666666>666666666666666666666666666¨6666666666¸666666666666hH66666666666666666666666666666666666666666666666666666666666666666°62ÀÐàð 0@P`pÀÐàð2(Øè 0@P`pÀÐàð 0@P`pÀÐàð 0@P`pÀÐàð 0@P`pÀÐàð 0@P`pÀÐàð 0@P`p8XøV~ OJPJQJ_HmH nH sH tH J`ñÿJ Normal d¤ÈCJ_HaJmH sH tH h@h ƒ/ƒ Heading 1$$¤à¤@&'5B*CJOJPJQJ\^JaJph6_h@h ƒ/ƒ Heading 2$$¤È¤@&'5B*CJOJPJQJ\^JaJphO½`@` 8Pÿ Heading 3$$¤È¤@&5B*OJPJQJ\^JphO½DA òÿ¡D
Default Paragraph FontRióÿ³R
0 Table Normalö
l (k ôÿÁ(
0No List n>@n ƒ/ƒ Title ¤,&dO½m$)@ˆB*CJ4KHOJPJQJ^JaJ4ph6]RþoòÿR ƒ/ƒ 
Title Char&@ˆCJ4KHOJPJQJ^JaJ4ph6]XþoòÿX ƒ/ƒHeading 1 Char$5CJOJPJQJ\^JaJph6_Xþoòÿ!X ƒ/ƒHeading 2 Char$5CJOJPJQJ\^JaJphO½D³@2D ƒ/ƒ List Paragraph
„Ð^„Ðm$PþoòÿAP 8PÿHeading 3 Char5OJPJQJ\^JphO½B'`òÿQB
ü0Comment ReferenceCJaJ<@b<
ü0 Comment TextCJaJ:þ¢q: ü0Comment Text CharR™@R
ü0 Balloon Text ¤CJOJQJ^JaJNþoòÿ‘N ü0Balloon Text CharCJOJQJ^JaJPK!éÞ¿ÿ[Content_Types].xml¬‘ËNÃ0E÷Hüƒå-Jœ²@%é‚ÇŽÇ¢|ÀÈ™$ÉØ²§Uû÷LÒTB¨ l,Ù3÷ž;ãr½µÃ˜œ§J¯òB+$ëG]¥ß7OÙ­V‰<a¥˜ôº¾¼(7‡€I‰šR¥{æpgL²=Žr¤Òú8Ë5v&€ý€ÍuQÜ뉑8ãÉC×å¶°X=îåù˜$â´º?6N¬JCƒ³À’Ôì¨ùFÉB.ʹ'õ.¤+‰¡ÍYÂTù°è^e5Ñ5¨Þ ò Œð ‰_Ïg -æ¿;ž‰ìÛÖYl¼Ý޲Ž|6^ÌNÁÿ`õ?èÓÌ[ÿÿPK!¥Ö§çÀ6 _rels/.rels„ÏjÃ0 ‡ï…½ƒÑ}QÒÃ%v/¥C/£}á(h"ÛëÛOÇ
»„¤ï÷©=þ®‹ùá”ç šªÃâC?Ëháv=¿‚É…¤§%[xp†£{Ûµ_¼PÑ£<Í1¥H¶0•ˆÙO¼R®BdÑÉÒJEÛ4b$§‘q_טžà6LÓõR×7`®¨Éÿ³Ã0ÌžOÁ¯,åEn7”Liäb¡¨/ãS½¨eªÔе¸ùÖýÿÿPK!kyƒŠtheme/theme/themeManager.xml ÌM
à @á}¡wÙ7c»(Eb²Ë®»öAÇ ÒŸÛ×åãƒ7ÎßÕ›K
Y,œ
ŠeÍ.ˆ·ð|,§¨ÚHÅ,láÇæéxÉ´ßIÈsQ}#Õ…­µÝ Öµ+Õ!ï,Ý^¹$j=GWèÓ÷)âEë+&
ÿÿPK!0ÝC)¨¤theme/theme/theme1.xmlìYOoÛ6¿Øw toc'vuŠØ±›-MÄn‡i‰–ØP¢@ÒI}Úã€úa‡Øm‡a[Ø¥û4Ù:lЯ°GR’ÅX^’6ØŠ­>$ùãûÿ©«×îÇ !)OÚ^ýrÍC$ñy@“°íÝö/­yH*œ˜ñ„´½)‘Þµ÷ß»Š×UDb‚`}"×qÛ‹”J×—–¤ÃX^æ)I`nÌEŒ¼Šp)øèÆli¹V[]Š1M<”àÈÞ©OÐP“ô6râ=¯‰’zÀgb Ig…ÁuSÙebÖö€OÀ†ä¾òÃRÁDÛ«™Ÿ·´qu ¯g‹˜Z°¶´®o~ÙºlAp°lxŠpT0­÷­+[}`j×ëõº½zAϰV–2ÍF­ÞÉi–@öqžv·Ö¬5\|‰þʜ̭N§Óle²X¢dsøµÚjcsÙÁÅ7çðÎf·»êà
ÈâWçðý+­Õ†‹7 ˆÑä`­ÚïgÔ È˜³íJøÀ×j|†‚h(¢K³óD-еßã¢
dXÑ©iJÆØ‡(îâx$(Ö ð:Á¥;ä˹!Í I_ÐTµ½S 1£÷êù÷¯ž?EÇž?øéøáÃã?ZBΪmœ„åU/¿ýìÏÇ£?ž~óòÑÕxYÆÿúÃ'¿üüy5Òg&΋/ŸüöìÉ‹¯>ýý»GðMGeøÆD¢›äíó3Vq%'#q¾ÃÓòŠÍ$”8ÁšKýžŠôÍ)f™w9:ĵàå£
x}rÏx‰‰¢œw¢ØîrÎ:\TZaGó*™y8IÂjæbRÆíc|XÅ»‹Ç¿½I
u3KGñnDNIBÒsü€
íîRêØu—ú‚K>Vè.EL+M2¤#'šf‹¶i ~™Vé þvl³{u8«Òz‹ºHÈ
Ì*„æ˜ñ:ž(W☕
~«¨JÈÁTøe\O*ðtHG½€HYµæ–}KNßÁP±*ݾ˦±‹ŠTѼ9/#·øA7ÂqZ…Ð$*c?¢íqUßån†èwðNºû%Ž»O¯·ièˆ4 =3¾¼N¸¿ƒ)cbJ
u§VÇ4ù»ÂÍ(TnËáâ
7”Ê_?®ûm-Ù›°{UåÌö‰B½w²<w¹èÛ_·ð$Ù#ó[Ô»âü®8{ÿùâ¼(Ÿ/¾$Ϫ0hÝ‹ØFÛ´Ýñ®{L¨)#7¤i¼%ì=Aõ:sâ$Å),àQg20pp¡Àf
\}DU4ˆp
M{ÝÓDB™‘%J¹„⮤­ñÐø+{ÔlêCˆ­«]Øá=œŸ5
2FªÐhsF+šÀY™­\Ɉ‚n¯Ã¬®…:3·ºÍE‡[¡²6±9”ƒÉ Õ`°°&45Z!°ò*œù5k8ì`Fmwë£Ü-Æ é"á€d>ÒzÏû¨nœ”ÇÊœ"Z úàxŠÕJÜZšìp;‹“Êì ØåÞ{P;™Ž,)''KÐQÛk5—›òqÚöÆpN†Ç8¯KÝGbÂe“¯„
ûS“ÙdùÌ›­\17 êpõaí>§°SR!Õ–‘
3•…K4'+ÿrÌzQ