diff --git a/src/blenderbim/blenderbim/bim/data/assets/symbols.svg b/src/blenderbim/blenderbim/bim/data/assets/symbols.svg index 7011554551..5aca6a35eb 100644 --- a/src/blenderbim/blenderbim/bim/data/assets/symbols.svg +++ b/src/blenderbim/blenderbim/bim/data/assets/symbols.svg @@ -44,17 +44,22 @@ - + - - + + + + + + + - + - + diff --git a/src/blenderbim/blenderbim/bim/data/libraries/IFC4 Demo Library.ifc b/src/blenderbim/blenderbim/bim/data/libraries/IFC4 Demo Library.ifc index a86680bbd0..190b13d9a4 100644 --- a/src/blenderbim/blenderbim/bim/data/libraries/IFC4 Demo Library.ifc +++ b/src/blenderbim/blenderbim/bim/data/libraries/IFC4 Demo Library.ifc @@ -1,13 +1,13 @@ ISO-10303-21; HEADER; FILE_DESCRIPTION(('ViewDefinition[DesignTransferView]'),'2;1'); -FILE_NAME('/dev/null','2023-07-30T21:07:33+10:00',(),(),'IfcOpenShell v0.7.0-8f41ae0c1','IfcOpenShell v0.7.0-8f41ae0c1','Nobody'); +FILE_NAME('/dev/null','2023-09-02T16:09:02+10:00',(),(),'IfcOpenShell v0.7.0-fbd8ea1ed','IfcOpenShell v0.7.0-fbd8ea1ed','Nobody'); FILE_SCHEMA(('IFC4')); ENDSEC; DATA; -#1=IFCPROJECT('0TszJmTqLCyxcP10DtK_MP',$,'BlenderBIM Demo',$,$,$,$,(#12,#16),#7); -#2=IFCPROJECTLIBRARY('0Y_CJXSsbCgBlSGFw0mbLa',$,'BlenderBIM Demo Library',$,$,$,$,$,$); -#3=IFCRELDECLARES('3IxQaOPH5Fx90CGmGm1gtQ',$,$,$,#1,(#2)); +#1=IFCPROJECT('1UlLTVwDzDvR$QNEAxFx6F',$,'BlenderBIM Demo',$,$,$,$,(#12,#16),#7); +#2=IFCPROJECTLIBRARY('3QN02XEh1FQh0fii364VEi',$,'BlenderBIM Demo Library',$,$,$,$,$,$); +#3=IFCRELDECLARES('0aiEyU5lL7mAdB5xwdXbUN',$,$,$,#1,(#2)); #4=IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.); #5=IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.); #6=IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.); @@ -25,82 +25,82 @@ DATA; #18=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Plan',*,*,*,*,#16,$,.PLAN_VIEW.,$); #19=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Plan',*,*,*,*,#16,$,.PLAN_VIEW.,$); #20=IFCMATERIAL('Unknown',$,$); -#21=IFCWALLTYPE('3U0gAUglf9WBlcfpB15EK0',$,'WAL50',$,$,$,$,$,$,.NOTDEFINED.); +#21=IFCWALLTYPE('0Ir6HewafB2hnPRigxrUnM',$,'WAL50',$,$,$,$,$,$,.NOTDEFINED.); #22=IFCMATERIALLAYERSET((#24),$,$); -#23=IFCRELASSOCIATESMATERIAL('3J36H22Gz1ovVzdiKgApaM',$,$,$,(#21),#22); +#23=IFCRELASSOCIATESMATERIAL('3S$YbWQCnDCA2tmoikSnrh',$,$,$,(#21),#22); #24=IFCMATERIALLAYER(#20,0.05,$,$,$,$,$); -#25=IFCRELDECLARES('28ApgMJzH10h$Ng$fmCpYf',$,$,$,#2,(#63,#21,#54,#87,#153,#34,#67,#210,#38,#82,#77,#42,#26,#48,#72,#59,#92,#30,#96)); -#26=IFCWALLTYPE('1wGfdUdC10TuASJo4jnO99',$,'WAL100',$,$,$,$,$,$,.NOTDEFINED.); +#25=IFCRELDECLARES('1eLCJqssP2kvQIdmPlRK19',$,$,$,#2,(#38,#82,#77,#42,#26,#48,#72,#59,#92,#30,#96,#63,#54,#87,#153,#34,#67,#21,#210)); +#26=IFCWALLTYPE('2oUFJayonDlBTcbJtxYFSv',$,'WAL100',$,$,$,$,$,$,.NOTDEFINED.); #27=IFCMATERIALLAYERSET((#29),$,$); -#28=IFCRELASSOCIATESMATERIAL('0NRoxSQPzCgQHfsu5ru91z',$,$,$,(#26),#27); +#28=IFCRELASSOCIATESMATERIAL('0n3vPKxufDgO48f4yfGtUd',$,$,$,(#26),#27); #29=IFCMATERIALLAYER(#20,0.1,$,$,$,$,$); -#30=IFCWALLTYPE('1lt5MuGLLDfwmZd0tNruF7',$,'WAL200',$,$,$,$,$,$,.NOTDEFINED.); +#30=IFCWALLTYPE('0UDhWxnIXDMOxZ2yPDCUMP',$,'WAL200',$,$,$,$,$,$,.NOTDEFINED.); #31=IFCMATERIALLAYERSET((#33),$,$); -#32=IFCRELASSOCIATESMATERIAL('21rGVxPODC$xmWYFaDy1T6',$,$,$,(#30),#31); +#32=IFCRELASSOCIATESMATERIAL('2Boxz3uaP0LOy6luKau2R0',$,$,$,(#30),#31); #33=IFCMATERIALLAYER(#20,0.2,$,$,$,$,$); -#34=IFCWALLTYPE('0NZm1D8h12xAxyW7fL5nc1',$,'WAL300',$,$,$,$,$,$,.NOTDEFINED.); +#34=IFCWALLTYPE('20fPutWQrFyeMIiKxc$MkU',$,'WAL300',$,$,$,$,$,$,.NOTDEFINED.); #35=IFCMATERIALLAYERSET((#37),$,$); -#36=IFCRELASSOCIATESMATERIAL('2yvmN42crCJevtirp5cMeV',$,$,$,(#34),#35); +#36=IFCRELASSOCIATESMATERIAL('2qAjlTTxjBkvdp80A9XdMZ',$,$,$,(#34),#35); #37=IFCMATERIALLAYER(#20,0.3,$,$,$,$,$); -#38=IFCCOVERINGTYPE('1eb4wZ_5n6xRGrs3rlKMiM',$,'COV10',$,$,$,$,$,$,.NOTDEFINED.); +#38=IFCCOVERINGTYPE('100hdtcxzBdQATomAi0tv5',$,'COV10',$,$,$,$,$,$,.NOTDEFINED.); #39=IFCMATERIALLAYERSET((#41),$,$); -#40=IFCRELASSOCIATESMATERIAL('3HKIKf06T6xRqM6Lp69$OM',$,$,$,(#38),#39); +#40=IFCRELASSOCIATESMATERIAL('3tO1xRn9b06utMa1TZC$WW',$,$,$,(#38),#39); #41=IFCMATERIALLAYER(#20,0.01,$,$,$,$,$); -#42=IFCCOVERINGTYPE('2E89aYmtrEfxhX_jsNqviN',$,'COV20',$,$,(#46),$,$,$,.NOTDEFINED.); +#42=IFCCOVERINGTYPE('1sO51oul95ABWezHr7P7Dk',$,'COV20',$,$,(#46),$,$,$,.NOTDEFINED.); #43=IFCMATERIALLAYERSET((#45),$,$); -#44=IFCRELASSOCIATESMATERIAL('2115lEhhP4Z9G1Yhd_DqSC',$,$,$,(#42),#43); +#44=IFCRELASSOCIATESMATERIAL('0w6lexCg19TuiqqTxo91zc',$,$,$,(#42),#43); #45=IFCMATERIALLAYER(#20,0.02,$,$,$,$,$); -#46=IFCPROPERTYSET('0vtU63YmjAgg8DeHlTgNx7',$,'EPset_Parametric',$,(#47)); +#46=IFCPROPERTYSET('3ytgFxH0571uBCG4mBNXI9',$,'EPset_Parametric',$,(#47)); #47=IFCPROPERTYSINGLEVALUE('LayerSetDirection',$,IFCLABEL('AXIS2'),$); -#48=IFCCOVERINGTYPE('0XiSBI57L9Uf8f2NaQ_ksi',$,'COV30',$,$,(#52),$,$,$,.NOTDEFINED.); +#48=IFCCOVERINGTYPE('09GKC1aO56qwEPF9halcxJ',$,'COV30',$,$,(#52),$,$,$,.NOTDEFINED.); #49=IFCMATERIALLAYERSET((#51),$,$); -#50=IFCRELASSOCIATESMATERIAL('3U3JdGAmbABA4mB$Fgpq1l',$,$,$,(#48),#49); +#50=IFCRELASSOCIATESMATERIAL('0rDrnpiX58DgQhcURj_WlB',$,$,$,(#48),#49); #51=IFCMATERIALLAYER(#20,0.03,$,$,$,$,$); -#52=IFCPROPERTYSET('17nhQ5I4b9ZvhDu4gRJLKO',$,'EPset_Parametric',$,(#53)); +#52=IFCPROPERTYSET('14u6OUyPL5y8O$QkEnB6Rr',$,'EPset_Parametric',$,(#53)); #53=IFCPROPERTYSINGLEVALUE('LayerSetDirection',$,IFCLABEL('AXIS3'),$); -#54=IFCRAMPTYPE('1BTHjVDP19tgb3MDCSkWCJ',$,'RAM200',$,$,$,$,$,$,.NOTDEFINED.); +#54=IFCRAMPTYPE('2G4JrZ99j2B9SkIwWDk0sC',$,'RAM200',$,$,$,$,$,$,.NOTDEFINED.); #55=IFCMATERIALLAYERSET((#57),$,$); -#56=IFCRELASSOCIATESMATERIAL('3HN21bHtL16vvHA2GnnxH1',$,$,$,(#54),#55); +#56=IFCRELASSOCIATESMATERIAL('2nNlFzNPj0_h6_NwdVJvW$',$,$,$,(#54),#55); #57=IFCMATERIALLAYER(#20,0.2,$,$,$,$,$); #58=IFCCIRCLEPROFILEDEF(.AREA.,$,$,0.3); -#59=IFCPILETYPE('04_2WZSqH8TgT7ET6DCCpd',$,'P1',$,$,$,$,$,$,.NOTDEFINED.); +#59=IFCPILETYPE('3uIc5iHjP5Lel3X6KXyN8W',$,'P1',$,$,$,$,$,$,.NOTDEFINED.); #60=IFCMATERIALPROFILESET($,$,(#62),$); -#61=IFCRELASSOCIATESMATERIAL('1qTZZRXsPF9hmYwT$tgFgp',$,$,$,(#59),#60); +#61=IFCRELASSOCIATESMATERIAL('13buLvs1r5vAyhgbabb2g1',$,$,$,(#59),#60); #62=IFCMATERIALPROFILE($,$,#20,#58,$,$); -#63=IFCSLABTYPE('3_OV9$Sd52KRhIW2TWIxbW',$,'FLR150',$,$,$,$,$,$,.NOTDEFINED.); +#63=IFCSLABTYPE('2CbahfxvnFpPoHyMBpGTQm',$,'FLR150',$,$,$,$,$,$,.NOTDEFINED.); #64=IFCMATERIALLAYERSET((#66),$,$); -#65=IFCRELASSOCIATESMATERIAL('1agyf45$X1NhR127pUL0Iw',$,$,$,(#63),#64); +#65=IFCRELASSOCIATESMATERIAL('2Irb7$9xL8YOXW99sF0SOp',$,$,$,(#63),#64); #66=IFCMATERIALLAYER(#20,0.2,$,$,$,$,$); -#67=IFCSLABTYPE('0LvmpIGf9AVPcG$Kt06TEk',$,'FLR250',$,$,$,$,$,$,.NOTDEFINED.); +#67=IFCSLABTYPE('04dx2Vg4vEp9ZOKGI1ifWb',$,'FLR250',$,$,$,$,$,$,.NOTDEFINED.); #68=IFCMATERIALLAYERSET((#70),$,$); -#69=IFCRELASSOCIATESMATERIAL('0EKQPSL656secN86SgeutH',$,$,$,(#67),#68); +#69=IFCRELASSOCIATESMATERIAL('04tl3Me6T6xOb$WEvv_dL0',$,$,$,(#67),#68); #70=IFCMATERIALLAYER(#20,0.3,$,$,$,$,$); #71=IFCRECTANGLEPROFILEDEF(.AREA.,'500x600',$,0.5,0.6); -#72=IFCCOLUMNTYPE('1SI8m9m813tAXfSnM1fCbm',$,'C1',$,$,$,$,$,$,.NOTDEFINED.); +#72=IFCCOLUMNTYPE('13rk_6wmDApeVQWfrArKbl',$,'C1',$,$,$,$,$,$,.NOTDEFINED.); #73=IFCMATERIALPROFILESET($,$,(#75),$); -#74=IFCRELASSOCIATESMATERIAL('1EhwSTRtPBQgBt2x6dhuT$',$,$,$,(#72),#73); +#74=IFCRELASSOCIATESMATERIAL('0X3OUScT9E1BjOvJWiUrv3',$,$,$,(#72),#73); #75=IFCMATERIALPROFILE($,$,#20,#71,$,$); #76=IFCCIRCLEHOLLOWPROFILEDEF(.AREA.,'500.0x5.0 CHS',$,0.25,0.005); -#77=IFCCOLUMNTYPE('25GZwy2zLFcgi57r5S8iY3',$,'C2',$,$,$,$,$,$,.NOTDEFINED.); +#77=IFCCOLUMNTYPE('0IaS5T1Uv6DQu$BJ5I3bks',$,'C2',$,$,$,$,$,$,.NOTDEFINED.); #78=IFCMATERIALPROFILESET($,$,(#80),$); -#79=IFCRELASSOCIATESMATERIAL('2VURAOhz93ZQqT9YJUA1DO',$,$,$,(#77),#78); +#79=IFCRELASSOCIATESMATERIAL('1HWcDe7a17WwPeKCHnckid',$,$,$,(#77),#78); #80=IFCMATERIALPROFILE($,$,#20,#76,$,$); #81=IFCRECTANGLEHOLLOWPROFILEDEF(.AREA.,'150x75x2.0 RHS',$,0.075,0.15,0.002,0.005,0.005); -#82=IFCCOLUMNTYPE('1Wg$I84s9BTh$iDuZnmSkH',$,'C3',$,$,$,$,$,$,.NOTDEFINED.); +#82=IFCCOLUMNTYPE('13p6$J2Jv84RFI5QAp6FTQ',$,'C3',$,$,$,$,$,$,.NOTDEFINED.); #83=IFCMATERIALPROFILESET($,$,(#85),$); -#84=IFCRELASSOCIATESMATERIAL('3fIIwEe7DAle7x_zISvMUD',$,$,$,(#82),#83); +#84=IFCRELASSOCIATESMATERIAL('1GWCzHY657$9kUJrD0AEir',$,$,$,(#82),#83); #85=IFCMATERIALPROFILE($,$,#20,#81,$,$); #86=IFCISHAPEPROFILEDEF(.AREA.,'DEMO-I',$,0.1,0.2,0.005,0.01,0.005,$,$); -#87=IFCBEAMTYPE('2yg2Irs7L26gFsD_AvvFUu',$,'B1',$,$,$,$,$,$,.NOTDEFINED.); +#87=IFCBEAMTYPE('1Y_PtOyJP9YfZkU59r$vs1',$,'B1',$,$,$,$,$,$,.NOTDEFINED.); #88=IFCMATERIALPROFILESET($,$,(#90),$); -#89=IFCRELASSOCIATESMATERIAL('1PU_gbkifF9hYpi9DvXTAU',$,$,$,(#87),#88); +#89=IFCRELASSOCIATESMATERIAL('2CfmfKJ0X45xijxsDUHZ85',$,$,$,(#87),#88); #90=IFCMATERIALPROFILE($,$,#20,#86,$,$); #91=IFCCSHAPEPROFILEDEF(.AREA.,'DEMO-C',$,0.2,0.1,0.0015,0.03,0.005); -#92=IFCBEAMTYPE('2Nf2L5qpz8K8KhUNFBg_fT',$,'B2',$,$,$,$,$,$,.NOTDEFINED.); +#92=IFCBEAMTYPE('2qogXGNrb9EANilnZjnGjq',$,'B2',$,$,$,$,$,$,.NOTDEFINED.); #93=IFCMATERIALPROFILESET($,$,(#95),$); -#94=IFCRELASSOCIATESMATERIAL('1SgarGNCzEQQpfs29NMq0y',$,$,$,(#92),#93); +#94=IFCRELASSOCIATESMATERIAL('3$1pGIrVLA2RTOmJIsbelu',$,$,$,(#92),#93); #95=IFCMATERIALPROFILE($,$,#20,#91,$,$); -#96=IFCWINDOWTYPE('2zRUFP8Ef81xDOR2iJx1zK',$,'WT01',$,$,$,(#135,#152),$,$,.NOTDEFINED.,.NOTDEFINED.,$,$); +#96=IFCWINDOWTYPE('1Dc9pAExL3fxL9jScEo2EF',$,'WT01',$,$,$,(#135,#152),$,$,.NOTDEFINED.,.NOTDEFINED.,$,$); #97=IFCINDEXEDPOLYGONALFACE((13,17,18,14)); #98=IFCINDEXEDPOLYGONALFACE((5,6,3,4)); #99=IFCINDEXEDPOLYGONALFACE((7,8,2,1)); @@ -157,7 +157,7 @@ DATA; #150=IFCDIRECTION((0.,0.,1.)); #151=IFCAXIS2PLACEMENT3D(#148,#150,#149); #152=IFCREPRESENTATIONMAP(#151,#147); -#153=IFCDOORTYPE('0oekOIA$z8lxWiQs9_tFWU',$,'DT01',$,$,$,(#196,#209),$,$,.NOTDEFINED.,.NOTDEFINED.,$,$); +#153=IFCDOORTYPE('05Z1DhJjj11wczPRkvXSPE',$,'DT01',$,$,$,(#196,#209),$,$,.NOTDEFINED.,.NOTDEFINED.,$,$); #154=IFCINDEXEDPOLYGONALFACE((17,16,15,14)); #155=IFCINDEXEDPOLYGONALFACE((2,3,29,28)); #156=IFCINDEXEDPOLYGONALFACE((27,28,29,30,32,31)); @@ -214,7 +214,7 @@ DATA; #207=IFCDIRECTION((0.,0.,1.)); #208=IFCAXIS2PLACEMENT3D(#205,#207,#206); #209=IFCREPRESENTATIONMAP(#208,#204); -#210=IFCFURNITURETYPE('0I2mc$m3T60hLXZYg9Y1wu',$,'BUN01',$,$,$,(#931,#952),$,$,.NOTDEFINED.,.NOTDEFINED.); +#210=IFCFURNITURETYPE('3ZMmSB_rfBnhrBckPTFKvP',$,'BUN01',$,$,$,(#931,#952),$,$,.NOTDEFINED.,.NOTDEFINED.); #211=IFCINDEXEDPOLYGONALFACE((187,278,44)); #212=IFCINDEXEDPOLYGONALFACE((21,52,60)); #213=IFCINDEXEDPOLYGONALFACE((91,100,31)); @@ -957,131 +957,140 @@ DATA; #950=IFCDIRECTION((0.,0.,1.)); #951=IFCAXIS2PLACEMENT3D(#948,#950,#949); #952=IFCREPRESENTATIONMAP(#951,#947); -#953=IFCTYPEPRODUCT('2be705eyD4DPBr6j4K7ZEx',$,'DASHED',$,'IfcAnnotation/LINEWORK',(#954),$,$); -#954=IFCPROPERTYSET('0uEfutIxDDIxMIBUJOZpSM',$,'EPset_Annotation',$,(#955)); -#955=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('dashed'),$); -#956=IFCTYPEPRODUCT('1M7mm9wUHFoxdM0MdAMyqM',$,'FINE',$,'IfcAnnotation/LINEWORK',(#957),$,$); -#957=IFCPROPERTYSET('3AZ8m1Bdn1gfbvagzKr2c3',$,'EPset_Annotation',$,(#958)); -#958=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('fine'),$); -#959=IFCTYPEPRODUCT('3LdrNIFOvAkBzrNnqWAZfA',$,'THIN',$,'IfcAnnotation/LINEWORK',(#960),$,$); -#960=IFCPROPERTYSET('0$9iwgSID7xBul4Tb9r2du',$,'EPset_Annotation',$,(#961)); -#961=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('thin'),$); -#962=IFCTYPEPRODUCT('3fFNO0t1TB$wYRaIkKwUCH',$,'MEDIUM',$,'IfcAnnotation/LINEWORK',(#963),$,$); -#963=IFCPROPERTYSET('33Fm$9zgb1cgsCOy859RlR',$,'EPset_Annotation',$,(#964)); -#964=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('medium'),$); -#965=IFCTYPEPRODUCT('1CpMBhemj5VQC43bU9J7zG',$,'THICK',$,'IfcAnnotation/LINEWORK',(#966),$,$); -#966=IFCPROPERTYSET('1OLDsFSDz2TPz5ifkQvWo8',$,'EPset_Annotation',$,(#967)); -#967=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('thick'),$); -#968=IFCTYPEPRODUCT('0NITtya3b16hoA3sh17SL4',$,'STRONG',$,'IfcAnnotation/LINEWORK',(#969),$,$); -#969=IFCPROPERTYSET('1_kfqWVDn0puI29Ah6eitX',$,'EPset_Annotation',$,(#970)); -#970=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('strong'),$); -#971=IFCTYPEPRODUCT('0rRN9EsvL5AQ3PorxrZSKM',$,'DOOR-TAG',$,'IfcAnnotation/TEXT',(#972),(#991),$); -#972=IFCPROPERTYSET('3lRZ$d2VH8cxZYh$mm45iq',$,'EPset_Annotation',$,(#973)); -#973=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('door-tag'),$); -#974=IFCCARTESIANPOINT((0.,0.,0.)); -#975=IFCDIRECTION((0.,0.,1.)); -#976=IFCDIRECTION((1.,0.,0.)); -#977=IFCAXIS2PLACEMENT3D(#974,#975,#976); -#978=IFCPLANAREXTENT(1000.,1000.); -#979=IFCTEXTLITERALWITHEXTENT('{{type.Name}}',#977,.RIGHT.,#978,'center'); -#980=IFCCARTESIANPOINT((0.,0.,0.)); -#981=IFCDIRECTION((0.,0.,1.)); -#982=IFCDIRECTION((1.,0.,0.)); -#983=IFCAXIS2PLACEMENT3D(#980,#981,#982); -#984=IFCPLANAREXTENT(1000.,1000.); -#985=IFCTEXTLITERALWITHEXTENT('{{Name}}',#983,.RIGHT.,#984,'center'); -#986=IFCSHAPEREPRESENTATION(#19,'Annotation','Annotation2D',(#979,#985)); -#987=IFCCARTESIANPOINT((0.,0.,0.)); -#988=IFCDIRECTION((1.,0.,0.)); -#989=IFCDIRECTION((0.,0.,1.)); -#990=IFCAXIS2PLACEMENT3D(#987,#989,#988); -#991=IFCREPRESENTATIONMAP(#990,#986); -#992=IFCTYPEPRODUCT('0bFZUWHjbA2e03hRHNinTt',$,'WINDOW-TAG',$,'IfcAnnotation/TEXT',(#993),(#1006),$); -#993=IFCPROPERTYSET('3TJOWv5NDBXBNCshYFjsFV',$,'EPset_Annotation',$,(#994)); -#994=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('window-tag'),$); -#995=IFCCARTESIANPOINT((0.,0.,0.)); -#996=IFCDIRECTION((0.,0.,1.)); +#953=IFCTYPEPRODUCT('1hmWolVQb9buX2GhHwaVFB',$,'SETOUT-POINT',$,'IfcAnnotation/SYMBOL',(#954),$,$); +#954=IFCPROPERTYSET('2YNCFr62b8vhuhHGspQl4$',$,'EPset_Annotation',$,(#955)); +#955=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('setout-point'),$); +#956=IFCTYPEPRODUCT('3H4oE1a_9AwQE8OFsCjdfh',$,'CONTROL-POINT',$,'IfcAnnotation/SYMBOL',(#957),$,$); +#957=IFCPROPERTYSET('0ARWSOH$z3kQDRkpEPHWCt',$,'EPset_Annotation',$,(#958)); +#958=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('control-point'),$); +#959=IFCTYPEPRODUCT('3YDPnyrWn2wRWgRzb0V7Kx',$,'TRAVERSE-POINT',$,'IfcAnnotation/SYMBOL',(#960),$,$); +#960=IFCPROPERTYSET('1v$MzHU1b82hDqHdtz4e5y',$,'EPset_Annotation',$,(#961)); +#961=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('traverse-point'),$); +#962=IFCTYPEPRODUCT('31Em8$VNL0Mh$9EZ3pXjpL',$,'DASHED',$,'IfcAnnotation/LINEWORK',(#963),$,$); +#963=IFCPROPERTYSET('0K84$piRb31PmkAwZfP5kd',$,'EPset_Annotation',$,(#964)); +#964=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('dashed'),$); +#965=IFCTYPEPRODUCT('3P0K0gDxP4NgwnuLGqlyW6',$,'FINE',$,'IfcAnnotation/LINEWORK',(#966),$,$); +#966=IFCPROPERTYSET('179vwKcVv9uet4_kI4NT9G',$,'EPset_Annotation',$,(#967)); +#967=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('fine'),$); +#968=IFCTYPEPRODUCT('0Rh30iszn41xBCgQJl2w2c',$,'THIN',$,'IfcAnnotation/LINEWORK',(#969),$,$); +#969=IFCPROPERTYSET('0bZV_Tby121uj5O3n08l1l',$,'EPset_Annotation',$,(#970)); +#970=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('thin'),$); +#971=IFCTYPEPRODUCT('3ti_6xztr7qPp9dASz9vP4',$,'MEDIUM',$,'IfcAnnotation/LINEWORK',(#972),$,$); +#972=IFCPROPERTYSET('19ZhF3bxL07evL8gi27Kei',$,'EPset_Annotation',$,(#973)); +#973=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('medium'),$); +#974=IFCTYPEPRODUCT('2hlcxjzxv8zf0gh1md23xY',$,'THICK',$,'IfcAnnotation/LINEWORK',(#975),$,$); +#975=IFCPROPERTYSET('0wRtpbInzE2AkqX8RIreQr',$,'EPset_Annotation',$,(#976)); +#976=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('thick'),$); +#977=IFCTYPEPRODUCT('1pefU$PA1ENw7kZG9T3mjr',$,'STRONG',$,'IfcAnnotation/LINEWORK',(#978),$,$); +#978=IFCPROPERTYSET('1RpJZBysn8shqevvAquPQ8',$,'EPset_Annotation',$,(#979)); +#979=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('strong'),$); +#980=IFCTYPEPRODUCT('1HKC8zCIv5_ef3dEfa$L5N',$,'DOOR-TAG',$,'IfcAnnotation/TEXT',(#981),(#1000),$); +#981=IFCPROPERTYSET('0aC8JrqFX6HhKUhjdLw4mN',$,'EPset_Annotation',$,(#982)); +#982=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('door-tag'),$); +#983=IFCCARTESIANPOINT((0.,0.,0.)); +#984=IFCDIRECTION((0.,0.,1.)); +#985=IFCDIRECTION((1.,0.,0.)); +#986=IFCAXIS2PLACEMENT3D(#983,#984,#985); +#987=IFCPLANAREXTENT(1000.,1000.); +#988=IFCTEXTLITERALWITHEXTENT('{{type.Name}}',#986,.RIGHT.,#987,'center'); +#989=IFCCARTESIANPOINT((0.,0.,0.)); +#990=IFCDIRECTION((0.,0.,1.)); +#991=IFCDIRECTION((1.,0.,0.)); +#992=IFCAXIS2PLACEMENT3D(#989,#990,#991); +#993=IFCPLANAREXTENT(1000.,1000.); +#994=IFCTEXTLITERALWITHEXTENT('{{Name}}',#992,.RIGHT.,#993,'center'); +#995=IFCSHAPEREPRESENTATION(#19,'Annotation','Annotation2D',(#988,#994)); +#996=IFCCARTESIANPOINT((0.,0.,0.)); #997=IFCDIRECTION((1.,0.,0.)); -#998=IFCAXIS2PLACEMENT3D(#995,#996,#997); -#999=IFCPLANAREXTENT(1000.,1000.); -#1000=IFCTEXTLITERALWITHEXTENT('{{Name}}',#998,.RIGHT.,#999,'center'); -#1001=IFCSHAPEREPRESENTATION(#19,'Annotation','Annotation2D',(#1000)); -#1002=IFCCARTESIANPOINT((0.,0.,0.)); -#1003=IFCDIRECTION((1.,0.,0.)); -#1004=IFCDIRECTION((0.,0.,1.)); -#1005=IFCAXIS2PLACEMENT3D(#1002,#1004,#1003); -#1006=IFCREPRESENTATIONMAP(#1005,#1001); -#1007=IFCTYPEPRODUCT('2DlmDdasX05un_uMP4O23U',$,'SPACE-TAG',$,'IfcAnnotation/TEXT',(#1008),(#1033),$); -#1008=IFCPROPERTYSET('1$OAHURHr3GON7ZzAJnv72',$,'EPset_Annotation',$,(#1009)); -#1009=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('space-tag'),$); -#1010=IFCCARTESIANPOINT((0.,0.,0.)); -#1011=IFCDIRECTION((0.,0.,1.)); +#998=IFCDIRECTION((0.,0.,1.)); +#999=IFCAXIS2PLACEMENT3D(#996,#998,#997); +#1000=IFCREPRESENTATIONMAP(#999,#995); +#1001=IFCTYPEPRODUCT('2Jy_wl$FX8h9mgYT1$Y9oc',$,'WINDOW-TAG',$,'IfcAnnotation/TEXT',(#1002),(#1015),$); +#1002=IFCPROPERTYSET('2ncCyO$LPCzv7kqXZK_Omh',$,'EPset_Annotation',$,(#1003)); +#1003=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('window-tag'),$); +#1004=IFCCARTESIANPOINT((0.,0.,0.)); +#1005=IFCDIRECTION((0.,0.,1.)); +#1006=IFCDIRECTION((1.,0.,0.)); +#1007=IFCAXIS2PLACEMENT3D(#1004,#1005,#1006); +#1008=IFCPLANAREXTENT(1000.,1000.); +#1009=IFCTEXTLITERALWITHEXTENT('{{Name}}',#1007,.RIGHT.,#1008,'center'); +#1010=IFCSHAPEREPRESENTATION(#19,'Annotation','Annotation2D',(#1009)); +#1011=IFCCARTESIANPOINT((0.,0.,0.)); #1012=IFCDIRECTION((1.,0.,0.)); -#1013=IFCAXIS2PLACEMENT3D(#1010,#1011,#1012); -#1014=IFCPLANAREXTENT(1000.,1000.); -#1015=IFCTEXTLITERALWITHEXTENT('{{Name}}',#1013,.RIGHT.,#1014,'center'); -#1016=IFCCARTESIANPOINT((0.,0.,0.)); -#1017=IFCDIRECTION((0.,0.,1.)); -#1018=IFCDIRECTION((1.,0.,0.)); -#1019=IFCAXIS2PLACEMENT3D(#1016,#1017,#1018); -#1020=IFCPLANAREXTENT(1000.,1000.); -#1021=IFCTEXTLITERALWITHEXTENT('{{Description}}',#1019,.RIGHT.,#1020,'center'); -#1022=IFCCARTESIANPOINT((0.,0.,0.)); -#1023=IFCDIRECTION((0.,0.,1.)); -#1024=IFCDIRECTION((1.,0.,0.)); -#1025=IFCAXIS2PLACEMENT3D(#1022,#1023,#1024); -#1026=IFCPLANAREXTENT(1000.,1000.); -#1027=IFCTEXTLITERALWITHEXTENT('``round({{Qto_SpaceBaseQuantities.NetFloorArea}} or 0., 2)``',#1025,.RIGHT.,#1026,'center'); -#1028=IFCSHAPEREPRESENTATION(#19,'Annotation','Annotation2D',(#1015,#1021,#1027)); -#1029=IFCCARTESIANPOINT((0.,0.,0.)); -#1030=IFCDIRECTION((1.,0.,0.)); -#1031=IFCDIRECTION((0.,0.,1.)); -#1032=IFCAXIS2PLACEMENT3D(#1029,#1031,#1030); -#1033=IFCREPRESENTATIONMAP(#1032,#1028); -#1034=IFCTYPEPRODUCT('2vNx3CIlrFs8bLFlmGvJF3',$,'MATERIAL-TAG',$,'IfcAnnotation/TEXT',(#1035),(#1048),$); -#1035=IFCPROPERTYSET('1l$T4lUqnBb93zcgfbSPvx',$,'EPset_Annotation',$,(#1036)); -#1036=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('rectangle-tag'),$); -#1037=IFCCARTESIANPOINT((0.,0.,0.)); -#1038=IFCDIRECTION((0.,0.,1.)); +#1013=IFCDIRECTION((0.,0.,1.)); +#1014=IFCAXIS2PLACEMENT3D(#1011,#1013,#1012); +#1015=IFCREPRESENTATIONMAP(#1014,#1010); +#1016=IFCTYPEPRODUCT('1LTLrGzxH4qhuWGNeTlTRi',$,'SPACE-TAG',$,'IfcAnnotation/TEXT',(#1017),(#1042),$); +#1017=IFCPROPERTYSET('2JpTIsSZf3zQUWK48RLIcL',$,'EPset_Annotation',$,(#1018)); +#1018=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('space-tag'),$); +#1019=IFCCARTESIANPOINT((0.,0.,0.)); +#1020=IFCDIRECTION((0.,0.,1.)); +#1021=IFCDIRECTION((1.,0.,0.)); +#1022=IFCAXIS2PLACEMENT3D(#1019,#1020,#1021); +#1023=IFCPLANAREXTENT(1000.,1000.); +#1024=IFCTEXTLITERALWITHEXTENT('{{Name}}',#1022,.RIGHT.,#1023,'center'); +#1025=IFCCARTESIANPOINT((0.,0.,0.)); +#1026=IFCDIRECTION((0.,0.,1.)); +#1027=IFCDIRECTION((1.,0.,0.)); +#1028=IFCAXIS2PLACEMENT3D(#1025,#1026,#1027); +#1029=IFCPLANAREXTENT(1000.,1000.); +#1030=IFCTEXTLITERALWITHEXTENT('{{Description}}',#1028,.RIGHT.,#1029,'center'); +#1031=IFCCARTESIANPOINT((0.,0.,0.)); +#1032=IFCDIRECTION((0.,0.,1.)); +#1033=IFCDIRECTION((1.,0.,0.)); +#1034=IFCAXIS2PLACEMENT3D(#1031,#1032,#1033); +#1035=IFCPLANAREXTENT(1000.,1000.); +#1036=IFCTEXTLITERALWITHEXTENT('``round({{Qto_SpaceBaseQuantities.NetFloorArea}} or 0., 2)``',#1034,.RIGHT.,#1035,'center'); +#1037=IFCSHAPEREPRESENTATION(#19,'Annotation','Annotation2D',(#1024,#1030,#1036)); +#1038=IFCCARTESIANPOINT((0.,0.,0.)); #1039=IFCDIRECTION((1.,0.,0.)); -#1040=IFCAXIS2PLACEMENT3D(#1037,#1038,#1039); -#1041=IFCPLANAREXTENT(1000.,1000.); -#1042=IFCTEXTLITERALWITHEXTENT('{{material.Name}}',#1040,.RIGHT.,#1041,'center'); -#1043=IFCSHAPEREPRESENTATION(#19,'Annotation','Annotation2D',(#1042)); -#1044=IFCCARTESIANPOINT((0.,0.,0.)); -#1045=IFCDIRECTION((1.,0.,0.)); -#1046=IFCDIRECTION((0.,0.,1.)); -#1047=IFCAXIS2PLACEMENT3D(#1044,#1046,#1045); -#1048=IFCREPRESENTATIONMAP(#1047,#1043); -#1049=IFCTYPEPRODUCT('3hqzFtbSb56RjhAZNaB4Vh',$,'TYPE-TAG',$,'IfcAnnotation/TEXT',(#1050),(#1063),$); -#1050=IFCPROPERTYSET('3U7kaKt_nBUvD$U2ryif_H',$,'EPset_Annotation',$,(#1051)); -#1051=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('capsule-tag'),$); -#1052=IFCCARTESIANPOINT((0.,0.,0.)); -#1053=IFCDIRECTION((0.,0.,1.)); +#1040=IFCDIRECTION((0.,0.,1.)); +#1041=IFCAXIS2PLACEMENT3D(#1038,#1040,#1039); +#1042=IFCREPRESENTATIONMAP(#1041,#1037); +#1043=IFCTYPEPRODUCT('3Or$DhaVf6ygGBUpRb2PMs',$,'MATERIAL-TAG',$,'IfcAnnotation/TEXT',(#1044),(#1057),$); +#1044=IFCPROPERTYSET('2YfvIc6dPDdwWjERHZZlof',$,'EPset_Annotation',$,(#1045)); +#1045=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('rectangle-tag'),$); +#1046=IFCCARTESIANPOINT((0.,0.,0.)); +#1047=IFCDIRECTION((0.,0.,1.)); +#1048=IFCDIRECTION((1.,0.,0.)); +#1049=IFCAXIS2PLACEMENT3D(#1046,#1047,#1048); +#1050=IFCPLANAREXTENT(1000.,1000.); +#1051=IFCTEXTLITERALWITHEXTENT('{{material.Name}}',#1049,.RIGHT.,#1050,'center'); +#1052=IFCSHAPEREPRESENTATION(#19,'Annotation','Annotation2D',(#1051)); +#1053=IFCCARTESIANPOINT((0.,0.,0.)); #1054=IFCDIRECTION((1.,0.,0.)); -#1055=IFCAXIS2PLACEMENT3D(#1052,#1053,#1054); -#1056=IFCPLANAREXTENT(1000.,1000.); -#1057=IFCTEXTLITERALWITHEXTENT('{{type.Name}}',#1055,.RIGHT.,#1056,'center'); -#1058=IFCSHAPEREPRESENTATION(#19,'Annotation','Annotation2D',(#1057)); -#1059=IFCCARTESIANPOINT((0.,0.,0.)); -#1060=IFCDIRECTION((1.,0.,0.)); -#1061=IFCDIRECTION((0.,0.,1.)); -#1062=IFCAXIS2PLACEMENT3D(#1059,#1061,#1060); -#1063=IFCREPRESENTATIONMAP(#1062,#1058); -#1064=IFCTYPEPRODUCT('2SnSxJPiD9sh$NDx92OCSS',$,'NAME-TAG',$,'IfcAnnotation/TEXT',(#1065),(#1078),$); -#1065=IFCPROPERTYSET('3Lu86QVuv5nfjkuPLvdQSH',$,'EPset_Annotation',$,(#1066)); -#1066=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('capsule-tag'),$); -#1067=IFCCARTESIANPOINT((0.,0.,0.)); -#1068=IFCDIRECTION((0.,0.,1.)); +#1055=IFCDIRECTION((0.,0.,1.)); +#1056=IFCAXIS2PLACEMENT3D(#1053,#1055,#1054); +#1057=IFCREPRESENTATIONMAP(#1056,#1052); +#1058=IFCTYPEPRODUCT('01Hhk_DbjDROhyr91Hp$aV',$,'TYPE-TAG',$,'IfcAnnotation/TEXT',(#1059),(#1072),$); +#1059=IFCPROPERTYSET('0LyRD7lHr17uJo7XNzCvZq',$,'EPset_Annotation',$,(#1060)); +#1060=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('capsule-tag'),$); +#1061=IFCCARTESIANPOINT((0.,0.,0.)); +#1062=IFCDIRECTION((0.,0.,1.)); +#1063=IFCDIRECTION((1.,0.,0.)); +#1064=IFCAXIS2PLACEMENT3D(#1061,#1062,#1063); +#1065=IFCPLANAREXTENT(1000.,1000.); +#1066=IFCTEXTLITERALWITHEXTENT('{{type.Name}}',#1064,.RIGHT.,#1065,'center'); +#1067=IFCSHAPEREPRESENTATION(#19,'Annotation','Annotation2D',(#1066)); +#1068=IFCCARTESIANPOINT((0.,0.,0.)); #1069=IFCDIRECTION((1.,0.,0.)); -#1070=IFCAXIS2PLACEMENT3D(#1067,#1068,#1069); -#1071=IFCPLANAREXTENT(1000.,1000.); -#1072=IFCTEXTLITERALWITHEXTENT('{{Name}}',#1070,.RIGHT.,#1071,'center'); -#1073=IFCSHAPEREPRESENTATION(#19,'Annotation','Annotation2D',(#1072)); -#1074=IFCCARTESIANPOINT((0.,0.,0.)); -#1075=IFCDIRECTION((1.,0.,0.)); -#1076=IFCDIRECTION((0.,0.,1.)); -#1077=IFCAXIS2PLACEMENT3D(#1074,#1076,#1075); -#1078=IFCREPRESENTATIONMAP(#1077,#1073); +#1070=IFCDIRECTION((0.,0.,1.)); +#1071=IFCAXIS2PLACEMENT3D(#1068,#1070,#1069); +#1072=IFCREPRESENTATIONMAP(#1071,#1067); +#1073=IFCTYPEPRODUCT('0a8MHfTUzA5AV8H6p1bqC9',$,'NAME-TAG',$,'IfcAnnotation/TEXT',(#1074),(#1087),$); +#1074=IFCPROPERTYSET('2EboL9u1j68Q_Mp8dBa7ux',$,'EPset_Annotation',$,(#1075)); +#1075=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('capsule-tag'),$); +#1076=IFCCARTESIANPOINT((0.,0.,0.)); +#1077=IFCDIRECTION((0.,0.,1.)); +#1078=IFCDIRECTION((1.,0.,0.)); +#1079=IFCAXIS2PLACEMENT3D(#1076,#1077,#1078); +#1080=IFCPLANAREXTENT(1000.,1000.); +#1081=IFCTEXTLITERALWITHEXTENT('{{Name}}',#1079,.RIGHT.,#1080,'center'); +#1082=IFCSHAPEREPRESENTATION(#19,'Annotation','Annotation2D',(#1081)); +#1083=IFCCARTESIANPOINT((0.,0.,0.)); +#1084=IFCDIRECTION((1.,0.,0.)); +#1085=IFCDIRECTION((0.,0.,1.)); +#1086=IFCAXIS2PLACEMENT3D(#1083,#1085,#1084); +#1087=IFCREPRESENTATIONMAP(#1086,#1082); ENDSEC; END-ISO-10303-21; diff --git a/src/blenderbim/blenderbim/bim/module/drawing/annotation.py b/src/blenderbim/blenderbim/bim/module/drawing/annotation.py index 9188291f40..a4473764cc 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/annotation.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/annotation.py @@ -92,6 +92,15 @@ class Annotator: return obj + @staticmethod + def add_vertex_to_annotation(obj): + verts_world_space = Annotator.get_placeholder_coords() + vert_local = obj.matrix_world.inverted() @ verts_world_space[0] + bm = tool.Blender.get_bmesh_for_mesh(obj.data, clean=True) + bm.verts.new(vert_local) + tool.Blender.apply_bmesh(obj.data, bm, obj) + return obj + @staticmethod def add_plane_to_annotation(obj, remove_face=False): # default order = bot left, top left, bot right, top right @@ -144,6 +153,8 @@ class Annotator: data = bpy.data.curves.new(object_type, type="CURVE") data.dimensions = "3D" data.resolution_u = 2 + elif data_type == "empty": + data = None obj = bpy.data.objects.new(object_type, data) obj.matrix_world = matrix_world diff --git a/src/blenderbim/blenderbim/bim/module/drawing/prop.py b/src/blenderbim/blenderbim/bim/module/drawing/prop.py index cab0f75ddc..0578ff8105 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/prop.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/prop.py @@ -502,6 +502,8 @@ ANNOTATION_TYPES_DATA = { "PLAN_LEVEL": ("Level (Plan)", "", "SORTBYEXT", "curve"), "SECTION_LEVEL": ("Level (Section)", "", "TRIA_DOWN", "curve"), "BREAKLINE": ("Breakline", "", "FCURVE", "mesh"), + "SYMBOL": ("Symbol", "", "KEYFRAME", "empty"), + "MULTI_SYMBOL": ("Multi-Symbol", "", "OUTLINER_DATA_POINTCLOUD", "mesh"), "LINEWORK": ("Line", "", "SNAP_MIDPOINT", "mesh"), "BATTING": ("Batting", "Add batting annotation.\nThickness could be changed through Thickness property of BBIM_Batting property set", "FORCE_FORCE", "mesh"), "REVISION_CLOUD":("Revision Cloud", "Add revision cloud", "VOLUME_DATA", "mesh"), diff --git a/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py b/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py index a987157c63..23cbf1ab0f 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py @@ -326,11 +326,12 @@ class SvgWriter: # We have to decide whether this should come from Blender or from IFC. # For the moment, for convenience of experimenting with ideas, it comes # from Blender. In the future, it should probably come from IFC. - if not isinstance(obj.data, bpy.types.Mesh): - return - classes = self.get_attribute_classes(obj) - if len(obj.data.vertices) and not len(obj.data.edges): + if obj.data is None: + return self.draw_empty_annotation(obj, classes) + elif not isinstance(obj.data, bpy.types.Mesh): + return + elif len(obj.data.vertices) and not len(obj.data.edges): return self.draw_point_annotation(obj, classes) elif len(obj.data.polygons) == 0: return self.draw_edge_annotation(obj, classes) @@ -862,6 +863,27 @@ class SvgWriter: self.svg.add(tag) line_number += len(tag.elements) + def draw_empty_annotation(self, obj, classes): + x_offset = self.raw_width / 2 + y_offset = self.raw_height / 2 + + point = self.project_point_onto_camera(obj.matrix_world.translation) + + element = tool.Ifc.get_entity(obj) + svg_id = ifcopenshell.util.element.get_pset(element, "EPset_Annotation", "Symbol") + if not svg_id: + # EPset_AnnotationSurveyArea is not standard! See bSI-4.3 proposal #660. + svg_id = ifcopenshell.util.element.get_pset(element, "EPset_AnnotationSurveyArea", "PointType") + if not svg_id: + svg_id = str(ifcopenshell.util.element.get_predefined_type(element)) + if not svg_id: + return + + point = Vector(((x_offset + point.x), (y_offset - point.y))) + symbol_position_svg = point * self.svg_scale + self.svg.add(self.svg.use(f"#{svg_id}", insert=symbol_position_svg)) + + def draw_point_annotation(self, obj, classes): x_offset = self.raw_width / 2 y_offset = self.raw_height / 2 @@ -870,12 +892,14 @@ class SvgWriter: projected_points = [self.project_point_onto_camera(matrix_world @ v.co) for v in obj.data.vertices] element = tool.Ifc.get_entity(obj) - svg_id = str(ifcopenshell.util.element.get_predefined_type(element)) - - # EPset_AnnotationSurveyArea is not standard! See bSI-4.3 proposal #660. - point_type = ifcopenshell.util.element.get_pset(element, "EPset_AnnotationSurveyArea", "PointType") - if point_type: - svg_id += f"-{point_type}" + svg_id = ifcopenshell.util.element.get_pset(element, "EPset_Annotation", "Symbol") + if not svg_id: + # EPset_AnnotationSurveyArea is not standard! See bSI-4.3 proposal #660. + svg_id = ifcopenshell.util.element.get_pset(element, "EPset_AnnotationSurveyArea", "PointType") + if not svg_id: + svg_id = str(ifcopenshell.util.element.get_predefined_type(element)) + if not svg_id: + return for symbol_position in projected_points: symbol_position = Vector(((x_offset + symbol_position.x), (y_offset - symbol_position.y))) diff --git a/src/blenderbim/blenderbim/tool/drawing.py b/src/blenderbim/blenderbim/tool/drawing.py index 36b99fb044..8c2751c4f6 100644 --- a/src/blenderbim/blenderbim/tool/drawing.py +++ b/src/blenderbim/blenderbim/tool/drawing.py @@ -71,6 +71,8 @@ class Drawing(blenderbim.core.tool.Drawing): obj = annotation.Annotator.add_plane_to_annotation(obj) elif object_type == "REVISION_CLOUD": obj = annotation.Annotator.add_plane_to_annotation(obj, remove_face=True) + elif object_type == "MULTI_SYMBOL": + obj = annotation.Annotator.add_vertex_to_annotation(obj) elif object_type == "TEXT_LEADER": co1, _, co2, _ = annotation.Annotator.get_placeholder_coords() obj = annotation.Annotator.add_line_to_annotation(obj, co2, co1) diff --git a/src/blenderbim/scripts/generate_demo_library.py b/src/blenderbim/scripts/generate_demo_library.py index e0017925db..7f5775a39f 100644 --- a/src/blenderbim/scripts/generate_demo_library.py +++ b/src/blenderbim/scripts/generate_demo_library.py @@ -146,6 +146,9 @@ class LibraryGenerator: self.create_type("IfcDoorType", "DT01", {"model_body": "Door", "plan_body": "Door-Plan"}) self.create_type("IfcFurnitureType", "BUN01", {"model_body": "Bunny", "plan_body": "Bunny-Plan"}) + self.create_symbol_type("SETOUT-POINT", "setout-point") + self.create_symbol_type("CONTROL-POINT", "control-point") + self.create_symbol_type("TRAVERSE-POINT", "traverse-point") self.create_line_type("DASHED", "dashed") self.create_line_type("FINE", "fine") self.create_line_type("THIN", "thin") @@ -161,6 +164,12 @@ class LibraryGenerator: self.file.write("IFC4 Demo Library.ifc") + def create_symbol_type(self, name, symbol): + element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcTypeProduct", name=name) + element.ApplicableOccurrence = "IfcAnnotation/SYMBOL" + pset = ifcopenshell.api.run("pset.add_pset", self.file, product=element, name="EPset_Annotation") + ifcopenshell.api.run("pset.edit_pset", self.file, pset=pset, properties={"Symbol": symbol}) + def create_line_type(self, name, classes): element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcTypeProduct", name=name) element.ApplicableOccurrence = "IfcAnnotation/LINEWORK" diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_representation.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_representation.py index 8b458ef777..31bf7f1f98 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_representation.py @@ -823,6 +823,8 @@ class Usecase: def create_annotation2d_representation(self): if isinstance(self.settings["geometry"], bpy.types.Mesh) and len(self.settings["geometry"].polygons): items = self.create_annotation_fill_areas(is_2d=True) + elif isinstance(self.settings["geometry"], bpy.types.Mesh) and not len(self.settings["geometry"].edges): + return self.create_point_cloud_representation(is_2d=True) else: items = [self.file.createIfcGeometricCurveSet(self.create_curves(is_2d=True))] return self.file.createIfcShapeRepresentation(