ID: | 3422 |
From: | ge...@igor2.repo.hu |
Date: | Fri, 27 Sep 2019 13:09:03 +0200 (CEST) |
Subject: | [pcb-rnd] poly-clear-poly detail (was: Re: "donut" rats) |
in-reply-to: | 3421 from Gabriel Paubert <pa...@iram.es> |
This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --0-548111325-1569582543=:2358 Content-Type: TEXT/PLAIN; charset=US-ASCII On Fri, 27 Sep 2019, Gabriel Paubert wrote: >> theory a poly-clearing poly inside another poly that it should connect to, >> would need to produce a "donut" rat, just like lines, arcs and padstacks; >> but I would find that too confusing so at the momeny any poly-poly rat >> is drawn as a rat line > >Fine with me. In practice I avoid using explicit (non-padstacks) >polygons with polygon-clears-polygon flag set. > >I never tested it, but what happens if two polygons (or a polygon and >a padstack) with this flag set overlap ? > >The answer might well be: don't do that! You can do that and it's perfectly predictable. First, a padstack is an object, not a polygon (even if it features a polygon shape on a layer). So what happens between a padstack and a polygon is really just the same as what happens between a line and a polygon, it's not the poly-clear-poly case. So what a padstack does to a poly should not depend on the polygons clearpolypoly flag. The poly-clear-poly case happens only between two polygon objects located on the same layer group, if one polygon allows to be cleared (has the clearpoly flag) and the other polygon has the clearpolypoly flag. In any other combination, the clearance will not happen. We normally assume every polygon has the clearpoly flag. During my 15+ years around PCB and pcb-rnd, I can't recall a single case seeing a polygon without the clearpoly flag. So below I will assume it's set for all polygons. Now if you have two polygons with the clearpolypoly flag, they will not clear into eachother but overlap as regular polygons, and together they clear into other polygons that do not have the clearpolypoly flag. If you have two polygons without the clearpolypoly flag, they will also overlap without affecting eachother. The only case when this flag does anything is when one poly has it and the other does not. This is an ugly special case of a 2-level Z buffer: on each layergroup bottom level is the no-clearpolypoly-flag polygons, and then comes the upper level for all the clearpolypoly polygons. Within each level polygons just overlap, but the upper level clears the lower level. So conceptually clipping goes like this: we first lay down the bottom level, then start clipping those bottom level polygons with the higher level clearpolypoly ones. The decision for this special casing was computational complexity. With this setup the code doesn't really need to mantain a Z-buffer or levels of any sort: if two polygons meet, the code can decide locally, just by looking at 2 flags of 2 objects. So order of clipping calculation can be arbitrary and the result always would be the same. If we had a real, generic Z-buffer with levels, for each clipping we'd need to sort all polygons in the layer group and potentially re-clip other polygons that happen to have overlapping bounding box. (At the moment one of the most CPU intensive things pcb-rnd ever does is polygon clipping.) Bonus: poly-vs-padstack try-it-yourself example (attached): The smaller, horizontal poly has the clearpolypoly flag, so it clears into the biggish poygon that does not have it, but has the clearpoly flag. The padstack in the big poly has a clearance because of the clearpoly flag. The same padstack placed within the smaller poly does not have a clearance, because the clearpoly flag in the smaller one is off. Both padstacks have a global clearance, so they both want to clear, but the smaller polygon doesn't allow to be cleared. If you right click, "edit flags" on the smaller poly and tick in the clearpoly flag, the padstack's clearance appears, but the poly-vs-poly behavior is not changed. If you edit the bigger poly's flags to have clearpolypoly, the two polygons merge; if you instead untick the clearpoly flag, all clearances within that polygon disappear. HTH, Igor2 --0-548111325-1569582543=:2358 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=poly.lht Content-Transfer-Encoding: BASE64 Content-ID: <alpine.DEB.2.00.1909271309030.2358@igor2priv> Content-Description: Content-Disposition: attachment; filename=poly.lht aGE6cGNiLXJuZC1ib2FyZC12NiB7DQoNCiBoYTptZXRhIHsNCiAgIGhhOnNp emUgew0KICAgIHRoZXJtYWxfc2NhbGUgPSAwLjUwMDAwMA0KICAgIHggPSAx LjYyNWluDQogICAgeSA9IDQ1LjA4NW1tDQogICB9DQogICBoYTpncmlkIHsN CiAgICBzcGFjaW5nID0gMjUuMG1pbA0KICAgIG9mZnNfeCA9IDAuMA0KICAg IG9mZnNfeSA9IDAuMA0KICAgfQ0KIH0NCg0KIGhhOmRhdGEgew0KICBsaTpw YWRzdGFja19wcm90b3R5cGVzIHsNCg0KICAgaGE6cHNfcHJvdG9fdjYuMCB7 DQogICAgIGhkaWE9MzEuNW1pbDsgaHBsYXRlZD0xOyBodG9wPTA7IGhib3R0 b209MDsNCiAgICAgbGk6c2hhcGUgew0KDQogICAgICAgaGE6cHNfc2hhcGVf djQgew0KICAgICAgICBoYTpwc19jaXJjIHsgeD0wLjA7IHk9MC4wOyBkaWE9 Mi4wbW07ICAgICAgICB9DQogICAgICAgIGhhOmNvbWJpbmluZyB7ICAgICAg ICB9DQogICAgICAgIGhhOmxheWVyX21hc2sgew0KICAgICAgICAgY29wcGVy ID0gMQ0KICAgICAgICAgdG9wID0gMQ0KICAgICAgICB9DQogICAgICAgIGNs ZWFyYW5jZT0wLjANCiAgICAgICB9DQoNCiAgICAgICBoYTpwc19zaGFwZV92 NCB7DQogICAgICAgIGhhOnBzX2NpcmMgeyB4PTAuMDsgeT0wLjA7IGRpYT0y LjBtbTsgICAgICAgIH0NCiAgICAgICAgaGE6Y29tYmluaW5nIHsgICAgICAg IH0NCiAgICAgICAgaGE6bGF5ZXJfbWFzayB7DQogICAgICAgICBib3R0b20g PSAxDQogICAgICAgICBjb3BwZXIgPSAxDQogICAgICAgIH0NCiAgICAgICAg Y2xlYXJhbmNlPTAuMA0KICAgICAgIH0NCg0KICAgICAgIGhhOnBzX3NoYXBl X3Y0IHsNCiAgICAgICAgaGE6cHNfY2lyYyB7IHg9MC4wOyB5PTAuMDsgZGlh PTIuMG1tOyAgICAgICAgfQ0KICAgICAgICBoYTpjb21iaW5pbmcgeyAgICAg ICAgfQ0KICAgICAgICBoYTpsYXllcl9tYXNrIHsNCiAgICAgICAgIGNvcHBl ciA9IDENCiAgICAgICAgIGludGVybiA9IDENCiAgICAgICAgfQ0KICAgICAg ICBjbGVhcmFuY2U9MC4wDQogICAgICAgfQ0KICAgICB9DQogICB9DQogIH0N Cg0KICAgbGk6b2JqZWN0cyB7DQogICAgaGE6cGFkc3RhY2tfcmVmLjE0IHsN CiAgICAgcHJvdG89MDsgeD02MDAuMG1pbDsgeT02NzUuMG1pbDsgcm90PTAu MDAwMDAwOyB4bWlycm9yPTA7IHNtaXJyb3I9MDsgY2xlYXJhbmNlPTIwLjBt aWw7DQogICAgIGhhOmZsYWdzIHsNCiAgICAgIGNsZWFybGluZT0xDQogICAg IH0NCg0KICAgICBsaTp0aGVybWFsIHsNCiAgICAgfQ0KICAgIH0NCiAgICBo YTpwYWRzdGFja19yZWYuMTUgew0KICAgICBwcm90bz0wOyB4PTYyNS4wbWls OyB5PTk3NS4wbWlsOyByb3Q9MC4wMDAwMDA7IHhtaXJyb3I9MDsgc21pcnJv cj0wOyBjbGVhcmFuY2U9MjAuMG1pbDsNCiAgICAgaGE6ZmxhZ3Mgew0KICAg ICAgY2xlYXJsaW5lPTENCiAgICAgfQ0KDQogICAgIGxpOnRoZXJtYWwgew0K ICAgICB9DQogICAgfQ0KICAgfQ0KICAgbGk6bGF5ZXJzIHsNCg0KICAgIGhh OnRvcC1zaWcgew0KICAgICBsaWQ9MA0KICAgICBncm91cD0zDQogICAgIGhh OmNvbWJpbmluZyB7ICAgICB9DQoNCiAgICAgIGxpOm9iamVjdHMgew0KICAg ICAgIGhhOnBvbHlnb24uNCB7IGNsZWFyYW5jZT00MC4wbWlsOw0KICAgICAg ICBsaTpnZW9tZXRyeSB7DQogICAgICAgICAgdGE6Y29udG91ciB7DQogICAg ICAgICAgIHsgMjUuMG1pbDsgMjUuMG1pbCB9DQogICAgICAgICAgIHsgOTI1 LjBtaWw7IDI1LjBtaWwgfQ0KICAgICAgICAgICB7IDkyNS4wbWlsOyAxLjcy NWluIH0NCiAgICAgICAgICAgeyAyNS4wbWlsOyAxLjcyNWluIH0NCiAgICAg ICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBoYTpmbGFncyB7DQogICAg ICAgICBjbGVhcnBvbHk9MQ0KICAgICAgICB9DQogICAgICAgfQ0KICAgICAg IGhhOnBvbHlnb24uOSB7IGNsZWFyYW5jZT00MC4wbWlsOw0KICAgICAgICBs aTpnZW9tZXRyeSB7DQogICAgICAgICAgdGE6Y29udG91ciB7DQogICAgICAg ICAgIHsgNDAuMDA1bW07IDgwMC4wbWlsIH0NCiAgICAgICAgICAgeyAzNTAu MG1pbDsgODAwLjBtaWwgfQ0KICAgICAgICAgICB7IDM1MC4wbWlsOyA1NTAu MG1pbCB9DQogICAgICAgICAgIHsgNDAuMDA1bW07IDU1MC4wbWlsIH0NCiAg ICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBoYTpmbGFncyB7DQog ICAgICAgICBjbGVhcnBvbHlwb2x5PTENCiAgICAgICAgfQ0KICAgICAgIH0N CiAgICAgIH0NCiAgICAgIGNvbG9yID0geyM4YjIzMjN9DQogICAgfQ0KDQog ICAgaGE6Ym90dG9tLXNpZyB7DQogICAgIGxpZD0xDQogICAgIGdyb3VwPTEw DQogICAgIGhhOmNvbWJpbmluZyB7ICAgICB9DQoNCiAgICAgIGxpOm9iamVj dHMgew0KICAgICAgfQ0KICAgICAgY29sb3IgPSB7IzNhNWZjZH0NCiAgICB9 DQoNCiAgICBoYTp0b3AtZ25kIHsNCiAgICAgbGlkPTINCiAgICAgZ3JvdXA9 Mw0KICAgICBoYTpjb21iaW5pbmcgeyAgICAgfQ0KDQogICAgICBsaTpvYmpl Y3RzIHsNCiAgICAgIH0NCiAgICAgIGNvbG9yID0geyMxMDRlOGJ9DQogICAg fQ0KDQogICAgaGE6Ym90dG9tLWduZCB7DQogICAgIGxpZD0zDQogICAgIGdy b3VwPTEwDQogICAgIGhhOmNvbWJpbmluZyB7ICAgICB9DQoNCiAgICAgIGxp Om9iamVjdHMgew0KICAgICAgfQ0KICAgICAgY29sb3IgPSB7I2NkMzcwMH0N CiAgICB9DQoNCiAgICBoYTppbnQtc2lnMiB7DQogICAgIGxpZD00DQogICAg IGdyb3VwPTcNCiAgICAgaGE6Y29tYmluaW5nIHsgICAgIH0NCg0KICAgICAg bGk6b2JqZWN0cyB7DQogICAgICB9DQogICAgICBjb2xvciA9IHsjNTQ4YjU0 fQ0KICAgIH0NCg0KICAgIGhhOmludC1zaWcxIHsNCiAgICAgbGlkPTUNCiAg ICAgZ3JvdXA9NQ0KICAgICBoYTpjb21iaW5pbmcgeyAgICAgfQ0KDQogICAg ICBsaTpvYmplY3RzIHsNCiAgICAgIH0NCiAgICAgIGNvbG9yID0geyM4Yjcz NTV9DQogICAgfQ0KDQogICAgaGE6b3V0bGluZSB7DQogICAgIGxpZD02DQog ICAgIGdyb3VwPTkNCiAgICAgaGE6Y29tYmluaW5nIHsgICAgIH0NCg0KICAg ICAgbGk6b2JqZWN0cyB7DQogICAgICB9DQogICAgICBjb2xvciA9IHsjMDA4 NjhifQ0KICAgIH0NCg0KICAgIGhhOmJvdHRvbS1zaWxrIHsNCiAgICAgbGlk PTcNCiAgICAgZ3JvdXA9MTINCiAgICAgaGE6Y29tYmluaW5nIHsgYXV0bz0x OyAgICAgfQ0KDQogICAgICBsaTpvYmplY3RzIHsNCiAgICAgIH0NCiAgICAg IGNvbG9yID0geyMwMDAwMDB9DQogICAgfQ0KDQogICAgaGE6dG9wLXNpbGsg ew0KICAgICBsaWQ9OA0KICAgICBncm91cD0xDQogICAgIGhhOmNvbWJpbmlu ZyB7IGF1dG89MTsgICAgIH0NCg0KICAgICAgbGk6b2JqZWN0cyB7DQogICAg ICB9DQogICAgICBjb2xvciA9IHsjMDAwMDAwfQ0KICAgIH0NCg0KICAgIGhh OnRvcC1wYXN0ZSB7DQogICAgIGxpZD05DQogICAgIGdyb3VwPTANCiAgICAg aGE6Y29tYmluaW5nIHsgYXV0bz0xOyAgICAgfQ0KDQogICAgICBsaTpvYmpl Y3RzIHsNCiAgICAgIH0NCiAgICAgIGNvbG9yID0geyNjZDAwY2R9DQogICAg fQ0KDQogICAgaGE6dG9wLW1hc2sgew0KICAgICBsaWQ9MTANCiAgICAgZ3Jv dXA9Mg0KICAgICBoYTpjb21iaW5pbmcgeyBzdWI9MTsgYXV0bz0xOyAgICAg fQ0KDQogICAgICBsaTpvYmplY3RzIHsNCiAgICAgIH0NCiAgICAgIGNvbG9y ID0geyNmZjAwMDB9DQogICAgfQ0KDQogICAgaGE6Ym90dG9tLW1hc2sgew0K ICAgICBsaWQ9MTENCiAgICAgZ3JvdXA9MTENCiAgICAgaGE6Y29tYmluaW5n IHsgc3ViPTE7IGF1dG89MTsgICAgIH0NCg0KICAgICAgbGk6b2JqZWN0cyB7 DQogICAgICB9DQogICAgICBjb2xvciA9IHsjZmYwMDAwfQ0KICAgIH0NCg0K ICAgIGhhOmJvdHRvbS1wYXN0ZSB7DQogICAgIGxpZD0xMg0KICAgICBncm91 cD0xMw0KICAgICBoYTpjb21iaW5pbmcgeyBhdXRvPTE7ICAgICB9DQoNCiAg ICAgIGxpOm9iamVjdHMgew0KICAgICAgfQ0KICAgICAgY29sb3IgPSB7I2Nk MDBjZH0NCiAgICB9DQoNCiAgICBoYTpzbG90LXBsYXRlZCB7DQogICAgIGxp ZD0xMw0KICAgICBncm91cD0xNA0KICAgICBoYTpjb21iaW5pbmcgeyBhdXRv PTE7ICAgICB9DQoNCiAgICAgIGxpOm9iamVjdHMgew0KICAgICAgfQ0KICAg ICAgY29sb3IgPSB7IzhiNzM1NX0NCiAgICB9DQoNCiAgICBoYTpzbG90LXVu cGxhdGVkIHsNCiAgICAgbGlkPTE0DQogICAgIGdyb3VwPTE1DQogICAgIGhh OmNvbWJpbmluZyB7IGF1dG89MTsgICAgIH0NCg0KICAgICAgbGk6b2JqZWN0 cyB7DQogICAgICB9DQogICAgICBjb2xvciA9IHsjMDA4NjhifQ0KICAgIH0N Cg0KICAgIGhhOnRvcC1hc3N5IHsNCiAgICAgbGlkPTE1DQogICAgIGdyb3Vw PTE2DQogICAgIGhhOmNvbWJpbmluZyB7ICAgICB9DQoNCiAgICAgIGxpOm9i amVjdHMgew0KICAgICAgfQ0KICAgICAgY29sb3IgPSB7IzQ0NDQ0NH0NCiAg ICB9DQoNCiAgICBoYTpib3QtYXNzeSB7DQogICAgIGxpZD0xNg0KICAgICBn cm91cD0xNw0KICAgICBoYTpjb21iaW5pbmcgeyAgICAgfQ0KDQogICAgICBs aTpvYmplY3RzIHsNCiAgICAgIH0NCiAgICAgIGNvbG9yID0geyM0NDQ0NDR9 DQogICAgfQ0KDQogICAgaGE6ZmFiIHsNCiAgICAgbGlkPTE3DQogICAgIGdy b3VwPTE4DQogICAgIGhhOmNvbWJpbmluZyB7IGF1dG89MTsgICAgIH0NCg0K ICAgICAgbGk6b2JqZWN0cyB7DQogICAgICB9DQogICAgICBjb2xvciA9IHsj MjIyMjIyfQ0KICAgIH0NCiAgIH0NCiB9DQogaGE6bGF5ZXJfc3RhY2sgew0K ICBsaTpncm91cHMgew0KICAgaGE6MCB7DQogICAgbmFtZSA9IHRvcF9wYXN0 ZQ0KICAgIGhhOnR5cGUgeyB0b3A9MTsgcGFzdGU9MTsgICAgfQ0KICAgIGxp OmxheWVycyB7IDk7ICAgIH0NCiAgIH0NCiAgIGhhOjEgew0KICAgIG5hbWUg PSB0b3Bfc2lsaw0KICAgIGhhOnR5cGUgeyBzaWxrPTE7IHRvcD0xOyAgICB9 DQogICAgbGk6bGF5ZXJzIHsgODsgICAgfQ0KICAgfQ0KICAgaGE6MiB7DQog ICAgbmFtZSA9IHRvcF9tYXNrDQogICAgaGE6dHlwZSB7IHRvcD0xOyBtYXNr PTE7ICAgIH0NCiAgICBsaTpsYXllcnMgeyAxMDsgICAgfQ0KICAgfQ0KICAg aGE6MyB7DQogICAgbmFtZSA9IHRvcF9jb3BwZXINCiAgICBoYTp0eXBlIHsg Y29wcGVyPTE7IHRvcD0xOyAgICB9DQogICAgbGk6bGF5ZXJzIHsgMDsgMjsg ICAgfQ0KICAgfQ0KICAgaGE6NCB7DQogICAgbmFtZSA9IGdycF80DQogICAg aGE6dHlwZSB7IHN1YnN0cmF0ZT0xOyBpbnRlcm49MTsgICAgfQ0KICAgIGxp OmxheWVycyB7ICAgIH0NCiAgIH0NCiAgIGhhOjUgew0KICAgIG5hbWUgPSBJ bnRlcm4NCiAgICBoYTp0eXBlIHsgY29wcGVyPTE7IGludGVybj0xOyAgICB9 DQogICAgbGk6bGF5ZXJzIHsgNTsgICAgfQ0KICAgfQ0KICAgaGE6NiB7DQog ICAgbmFtZSA9IGdycF82DQogICAgaGE6dHlwZSB7IHN1YnN0cmF0ZT0xOyBp bnRlcm49MTsgICAgfQ0KICAgIGxpOmxheWVycyB7ICAgIH0NCiAgIH0NCiAg IGhhOjcgew0KICAgIG5hbWUgPSBJbnRlcm4NCiAgICBoYTp0eXBlIHsgY29w cGVyPTE7IGludGVybj0xOyAgICB9DQogICAgbGk6bGF5ZXJzIHsgNDsgICAg fQ0KICAgfQ0KICAgaGE6OCB7DQogICAgbmFtZSA9IGdycF84DQogICAgaGE6 dHlwZSB7IHN1YnN0cmF0ZT0xOyBpbnRlcm49MTsgICAgfQ0KICAgIGxpOmxh eWVycyB7ICAgIH0NCiAgIH0NCiAgIGhhOjkgew0KICAgIG5hbWUgPSBnbG9i YWxfb3V0bGluZQ0KICAgIGhhOnR5cGUgeyBib3VuZGFyeT0xOyAgICB9DQog ICAgbGk6bGF5ZXJzIHsgNjsgICAgfQ0KICAgIHB1cnBvc2UgPSB1cm91dGUN CiAgIH0NCiAgIGhhOjEwIHsNCiAgICBuYW1lID0gYm90dG9tX2NvcHBlcg0K ICAgIGhhOnR5cGUgeyBib3R0b209MTsgY29wcGVyPTE7ICAgIH0NCiAgICBs aTpsYXllcnMgeyAxOyAzOyAgICB9DQogICB9DQogICBoYToxMSB7DQogICAg bmFtZSA9IGJvdHRvbV9tYXNrDQogICAgaGE6dHlwZSB7IGJvdHRvbT0xOyBt YXNrPTE7ICAgIH0NCiAgICBsaTpsYXllcnMgeyAxMTsgICAgfQ0KICAgfQ0K ICAgaGE6MTIgew0KICAgIG5hbWUgPSBib3R0b21fc2lsaw0KICAgIGhhOnR5 cGUgeyBzaWxrPTE7IGJvdHRvbT0xOyAgICB9DQogICAgbGk6bGF5ZXJzIHsg NzsgICAgfQ0KICAgfQ0KICAgaGE6MTMgew0KICAgIG5hbWUgPSBib3R0b21f cGFzdGUNCiAgICBoYTp0eXBlIHsgYm90dG9tPTE7IHBhc3RlPTE7ICAgIH0N CiAgICBsaTpsYXllcnMgeyAxMjsgICAgfQ0KICAgfQ0KICAgaGE6MTQgew0K ICAgIG5hbWUgPSBwbWVjaA0KICAgIGhhOnR5cGUgeyBtZWNoPTE7ICAgIH0N CiAgICBsaTpsYXllcnMgeyAxMzsgICAgfQ0KICAgIHB1cnBvc2UgPSBwcm91 dGUNCiAgIH0NCiAgIGhhOjE1IHsNCiAgICBuYW1lID0gdW1lY2gNCiAgICBo YTp0eXBlIHsgbWVjaD0xOyAgICB9DQogICAgbGk6bGF5ZXJzIHsgMTQ7ICAg IH0NCiAgICBwdXJwb3NlID0gdXJvdXRlDQogICB9DQogICBoYToxNiB7DQog ICAgbmFtZSA9IHRvcC1hc3N5DQogICAgaGE6dHlwZSB7IHRvcD0xOyBkb2M9 MTsgICAgfQ0KICAgIGxpOmxheWVycyB7IDE1OyAgICB9DQogICAgaGE6YXR0 cmlidXRlcyB7DQogICAgIGluaXQtaW52aXM9MQ0KICAgIH0NCiAgICBwdXJw b3NlID0gYXNzeQ0KICAgfQ0KICAgaGE6MTcgew0KICAgIG5hbWUgPSBib3Qt YXNzeQ0KICAgIGhhOnR5cGUgeyBib3R0b209MTsgZG9jPTE7ICAgIH0NCiAg ICBsaTpsYXllcnMgeyAxNjsgICAgfQ0KICAgIGhhOmF0dHJpYnV0ZXMgew0K ICAgICBpbml0LWludmlzPTENCiAgICB9DQogICAgcHVycG9zZSA9IGFzc3kN CiAgIH0NCiAgIGhhOjE4IHsNCiAgICBuYW1lID0gZmFiDQogICAgaGE6dHlw ZSB7IHRvcD0xOyBkb2M9MTsgICAgfQ0KICAgIGxpOmxheWVycyB7IDE3OyAg ICB9DQogICAgaGE6YXR0cmlidXRlcyB7DQogICAgIGluaXQtaW52aXM9MQ0K ICAgIH0NCiAgICBwdXJwb3NlID0gZmFiDQogICB9DQogIH0NCiB9DQp9DQo= --0-548111325-1569582543=:2358--
Reply subtree:
3422 [pcb-rnd] poly-clear-poly detail (was: Re: "donut" rats) from ge...@igor2.repo.hu