Bugsplat using followme tool
-
Hi there,
follow me tool makes Sketchup (2016, 2017, at least windows) choke.
copy-paste the following script to the ruby console and press enter to reproduce:
` require 'sketchup.rb'
module BUGREPRODUCE
def self.run()
points = [];points << Geom::Point3d.new(0.0, 0.0, 15.536701375817504);
points << Geom::Point3d.new(0.0, 0.1455402865170477, 16.06675105539755);
points << Geom::Point3d.new(2.719013278138669e-07, 0.14554017490918456, 16.06675087539852);
points << Geom::Point3d.new(-3.2744502844393166e-07, 0.14554064565457897, 16.06675021430346);
points << Geom::Point3d.new(-0.02123124756131191, 0.1668122822181994, 16.08646506708478);
points << Geom::Point3d.new(-0.021769667428890884, 0.17891246196634392, 16.100796013701032);
points << Geom::Point3d.new(-0.024828723773793752, 0.1790746885799052, 16.099949997730295);
points << Geom::Point3d.new(-0.02494299885008788, 0.18614040534209242, 16.115179179976455);
points << Geom::Point3d.new(-0.020734400531846667, 0.20977747417850726, 16.152517450871446);
points << Geom::Point3d.new(-0.014647437273319667, 0.2699754058150877, 16.23649272341899);
points << Geom::Point3d.new(-0.027523341977185957, 0.3490327994612702, 16.384121146341734);
points << Geom::Point3d.new(-0.022198351358655645, 0.4305920894240949, 16.51344997117194);
points << Geom::Point3d.new(-0.02874957694059978, 0.4648922724241097, 16.57935230427668);
points << Geom::Point3d.new(-0.023203948967161173, 0.5452487542221559, 16.74606444711391);
points << Geom::Point3d.new(-0.010704430377387405, 0.63496170043671, 16.966398678564296);
points << Geom::Point3d.new(0.0007576625752319971, 0.7278976286529141, 17.21670946629168);
points << Geom::Point3d.new(0.0041848521711958095, 0.8348042221622771, 17.491070988920132);
points << Geom::Point3d.new(0.003907440348870358, 0.9507069442368434, 17.790614477725285);
points << Geom::Point3d.new(0.0023504294633596994, 1.0713813609641223, 18.114190742737147);
points << Geom::Point3d.new(0.000976919949907374, 1.1935580486102733, 18.459579533835484);
points << Geom::Point3d.new(0.00025384540472028267, 1.3153084028293316, 18.82453507345195);
points << Geom::Point3d.new(3.877173896975206e-05, 1.435912727981743, 19.206974588085153);
points << Geom::Point3d.new(-6.495769241591236e-05, 1.555121975383521, 19.60501521826036);
points << Geom::Point3d.new(-0.00018816549373112552, 1.6726192979900383, 20.016991621576935);
points << Geom::Point3d.new(-0.0002996825560126547, 1.7878617560411263, 20.441433012720474);
points << Geom::Point3d.new(-0.0003844481854876557, 1.9003309425714006, 20.876963276436953);
points << Geom::Point3d.new(-0.0004225620994784744, 2.009719296697121, 21.322254501066723);
points << Geom::Point3d.new(-0.0004261611079732261, 2.1158062964334943, 21.77607314165695);
points << Geom::Point3d.new(-0.00042915585228664845, 2.218403643096096, 22.237297924109328);
points << Geom::Point3d.new(-0.00044111939018472065, 2.3173804359494237, 22.704911284706526);
points << Geom::Point3d.new(-0.00045113084656019103, 2.4126402590776843, 23.17799852248581);
points << Geom::Point3d.new(-0.00045319789265006223, 2.50410043543964, 23.65574377344935);
points << Geom::Point3d.new(-0.0004505302263106896, 2.5917000089287248, 24.1374198383653);
points << Geom::Point3d.new(-0.00044649162378089107, 2.6754053756155725, 24.622379749469797);
points << Geom::Point3d.new(-0.00044087161316097557, 2.755206851553207, 25.1100508758748);
points << Geom::Point3d.new(-0.0004322076475345324, 2.831112802141766, 25.59992985200044);
points << Geom::Point3d.new(-0.0004197323141423617, 2.903143106568622, 26.091577940878555);
points << Geom::Point3d.new(-0.0004032592223930364, 2.971324835085403, 26.584616400234918);
points << Geom::Point3d.new(-0.00038262337584432735, 3.0356916318222784, 27.078721753512713);
points << Geom::Point3d.new(-0.0003576353637216534, 3.096284317287839, 27.573621448738884);
points << Geom::Point3d.new(-0.0003283189797823874, 3.1531503346553786, 28.069090221961265);
points << Geom::Point3d.new(-0.00029497735230204873, 3.2063420632014483, 28.564947091217213);
points << Geom::Point3d.new(-0.000257982384450314, 3.2559150449566454, 29.06105283925429);
points << Geom::Point3d.new(-0.00021748959321216165, 3.3019267190177493, 29.557307948652756);
points << Geom::Point3d.new(-0.00017330875760924232, 3.3444355881477854, 30.053650998479302);
points << Geom::Point3d.new(-0.00012499843816578474, 3.383500570761029, 30.550057518066325);
points << Geom::Point3d.new(-7.208138263162825e-05, 3.4191804406943245, 31.046539297178438);
points << Geom::Point3d.new(-1.4199468588330353e-05, 3.4515333570685165, 31.54314417467103);
points << Geom::Point3d.new(4.8891866209191895e-05, 3.4806165106052984, 32.03995633382591);
points << Geom::Point3d.new(0.00011742136629336917, 3.506485853632938, 32.53709711605202);
points << Geom::Point3d.new(0.0001916839704873506, 3.5291958588266406, 33.03472631645356);
points << Geom::Point3d.new(0.00027206254456804224, 3.548799254400635, 33.53304389955728);
points << Geom::Point3d.new(0.0003590168493198209, 3.565346685778866, 34.0322920995674);
points << Geom::Point3d.new(0.0004530771981446183, 3.5788863294099817, 34.53275790991975);
points << Geom::Point3d.new(0.0005548273651954422, 3.5894635062525313, 35.0347759608105);
points << Geom::Point3d.new(0.0006648746629731387, 3.597120283637328, 35.538731753318444);
points << Geom::Point3d.new(0.0007838526255079047, 3.6018950822512648, 36.04506520233846);
points << Geom::Point3d.new(0.0009124695034510758, 3.6038223363148374, 36.5542744201175);
points << Geom::Point3d.new(0.0010515338220411805, 3.6029320672658343, 37.06691966618542);
points << Geom::Point3d.new(0.0012019066309225356, 3.5992492095741486, 37.58362741657054);
points << Geom::Point3d.new(0.0013644150153662902, 3.5927928443576764, 38.10509453186442);
points << Geom::Point3d.new(0.001539797802850731, 3.583575663254682, 38.63209249917592);
points << Geom::Point3d.new(0.0017287432708559842, 3.571603814743944, 39.16547169744606);
points << Geom::Point3d.new(0.001932044651863068, 3.556876991487376, 39.706165614754255);
points << Geom::Point3d.new(0.0021508309115887887, 3.53938853502529, 40.25519494388838);
points << Geom::Point3d.new(0.0023866986812358104, 3.51912543908636, 40.81367149688645);
points << Geom::Point3d.new(0.0026415421628975485, 3.4960682724320034, 41.38280189865228);
points << Geom::Point3d.new(0.0029170974378886876, 3.4701912610319914, 41.96389102545289);
points << Geom::Point3d.new(0.003214463654428134, 3.4414626905200207, 42.5583450987337);
points << Geom::Point3d.new(0.003534209023669325, 3.4098459863472317, 43.1676742435361);
points << Geom::Point3d.new(0.003878029013559309, 3.3753028155918936, 43.7934942955934);
points << Geom::Point3d.new(0.004251244293461213, 3.3377963880113706, 44.43752760255171);
points << Geom::Point3d.new(0.00466302928099528, 3.2972885469173425, 45.101602739027065);
points << Geom::Point3d.new(0.005125479118841679, 3.2537372815826293, 45.78765445022414);
points << Geom::Point3d.new(0.005651458343970818, 3.207100444820471, 46.4977249798707);
points << Geom::Point3d.new(0.006238120128795286, 3.1573099124237918, 47.233963073066654);
points << Geom::Point3d.new(0.006866884682290008, 3.104277861460362, 47.99862136133696);
points << Geom::Point3d.new(0.007579061318889981, 3.0480839152274712, 48.794062289489595);
points << Geom::Point3d.new(0.008337297017733775, 2.988556934319748, 49.622722309865836);
points << Geom::Point3d.new(0.009101815156304652, 2.9255616806221543, 50.48713043407896);
points << Geom::Point3d.new(0.00974871793168255, 2.858854515433238, 51.389901175044564);
points << Geom::Point3d.new(0.009873556828524786, 2.788175726468552, 52.33376003490443);
points << Geom::Point3d.new(0.009167291292393989, 2.7138520577504237, 53.32161451374409);
points << Geom::Point3d.new(0.008249910053624738, 2.6364364035755044, 54.35639386901754);
points << Geom::Point3d.new(0.0070578132296502, 2.5561119372514454, 55.44072015908173);
points << Geom::Point3d.new(0.005447198986546794, 2.473766828443217, 56.577769134272614);
points << Geom::Point3d.new(0.0037768634107846156, 2.390042850319739, 57.77338287378068);
points << Geom::Point3d.new(0.001988953410314857, 2.3037253416739323, 59.033661088198826);
points << Geom::Point3d.new(4.614086363614581e-15, 2.2240648363009856, 60.3991803873057);
points << Geom::Point3d.new(4.194623966922347e-15, 2.021877123909987, 60.910311257808026);
points << Geom::Point3d.new(-0.00011512588956522799, 1.8894938049011412, 61.17492504928469);
points << Geom::Point3d.new(0.00012570409648253626, 1.7337114814757928, 61.50965292617816);
points << Geom::Point3d.new(3.9481810275111706e-05, 1.560121331968628, 61.9027595807801);
points << Geom::Point3d.new(-0.00010795998382080503, 1.369691319049431, 62.354695114571825);
points << Geom::Point3d.new(-7.033727636626745e-06, 1.163986824316707, 62.86589543887034);
points << Geom::Point3d.new(-0.0003641019629735987, 0.9452564369673448, 63.43678902948206);
points << Geom::Point3d.new(0.0005683186039710072, 0.7140993541140415, 64.06850634750532);
points << Geom::Point3d.new(8.948429893972367e-05, 0.4697288791790583, 64.76098241277798);
points << Geom::Point3d.new(4.194623966922387e-16, 0.20218771239100042, 65.51048909232898);
points << Geom::Point3d.new(0.0, 0.0, 66.02161996283131);edges = Sketchup.active_model.entities.add_curve points; cirlce = Sketchup.active_model.entities.add_circle points[0], points[0] - points[1], 0.125 face = Sketchup.active_model.entities.add_face cirlce face.followme(edges)
end
end
BUGREPRODUCE::run()`
-
I found this this discussion: https://sketchucation.com/forums/viewtopic.php?f=180%26amp;t=16734
TIG says:
@unknownuser said:
SketchUp's FollowMe tool fails on paths with short lengths where the faces it would make on the innermost part of the turns very small.
Do we know what the exact condition is that the curve needs to fulfill for the followme tool to succeed?
If this one is indeed a Sketchup product issue is there a chance sketchup team looks into this and fixes it?
-
Any opinion on this maybe from the Sketchup team would be highly appreciated! Thx!
Also, is there any developer platform for reporting Sketchup issues? I reported this over bugsplat but i could not send the script reproducing the issue in the bugsplat form. Thus some bugzilla or jira reference would be nice to file the bug report properly...
-
Please note this example is an artificial one created for reproducing the issue - that is why it has such garbage near the end of the line. The first fixed segment is vertical, which is hardly ever the case in realistic uses.
-
FollowMe works even without scaling up when using it manually over Sketchup UI. It chokes only when calling it over the ruby API.
Some more background: some customers of mine detected this issue when using my Ropefall plugin. So the obvious (already known) workaround is to only draw midline of the rope with Ropefall and use FollowMe manually around it.
To implement your scaling workaround in the plugin is hardly viable since it is hard to guess how much scaling would be enough.
Also, I think the right place to fix this is in the core product. Sketchup should handle weird wire shapes in a graceful way, it should never crash. At least not when the API contract is respected (I mean the script above uses the API properly, yet Sketchup chokes on it).
-
**>>
Dave made some investigations which got deleted by moving this thread to the developers forum. I give here a short summary of his findings:- he tried to reproduce the issue on the attached model by manually using the FollowMe tool. He suggested to scale up the model before applying FollowMe to eliminate small scale issues such as edges should be longer than 0.001 in.
- he also found weird irregular segments on the line
<<**
Dave, thanks for looking into this!
I uploaded the skp (created by commenting out "face.followme(edges)" line in the script above). Interestingly, Sketchup can use the FollowMe tool normally if I use it manually on the model (select the line -> select FollowMe tool -> select disc at the end of the line). There is no bugsplat report in this case.
The issue seems to arise when FollowMe is run over the API. And I checked the edge lengths : none of them is less than 0.001 inches, the smallest being 0.0031780318151616855 inches. See the list of edge lengths below.
Thus the situation seems to be different from what you describe above because:
- Sketchup chokes (!), its not just some small faces won't get created
- the edge lengths are longer than 0.001 inches (Sketchup crashes even if I remove that shortest edge of length 0.003 inches)
0.5496677522125282
0.03594309295155075
0.018763802301480795
0.0031780318151616855
0.01678884760914955
0.04439110041899742
0.10350211830908297
0.1679583628960666
0.15299090899883527
0.07458242835351943
0.1851509025793843
0.2382264138006202
0.2672526085578301
0.2944741252865965
0.3211850239771088
0.3453495886987467
0.36636381719397354
0.3847287583298275
0.4010055259657017
0.4155083617644397
0.42840424004615574
0.4398082890187205
0.44981766941388596
0.4585303569048452
0.46605344122018955
0.472498164546082
0.4779734936956884
0.4825826028280455
0.4864211022176622
0.48957687526628785
0.49213077917050796
0.49415726557699746
0.495724847732813
0.49689657697448725
0.49773052024101844
0.4982802274682186
0.4985952090536824
0.49872141525022456
0.49870171032962585
0.49857636839721664
0.4983835966338117
0.49816004357814353
0.4979412695177626
0.497762205183359
0.4976576322108056
0.49766269227690346
0.4978134037542148
0.49814713784494336
0.498703031080701
0.4995223621216723
0.5006489370094015
0.5021294757761189
0.5040139672197974
0.5063559760228643
0.5092128811427165
0.5126460379578697
0.5167208969654833
0.5215071077115799
0.5270785944591776
0.5335135705907125
0.5408944747996273
0.5493078355770263
0.5588440828524932
0.569597324513963
0.5816650831325503
0.5951479349123885
0.610148936674865
0.6267727550037728
0.6451246173191341
0.6653095833082033
0.6874328163599263
0.7116006100825648
0.737920030329306
0.7664953304454787
0.7974236872385437
0.8307956823114301
0.8667008663212854
0.9052321664160643
0.9465014813143349
0.9906467472849756
1.0376715950626214
1.0872980016120022
1.1400279308006114
1.1985427437660388
1.2632320003300945
1.3678423550560435
0.5496677522125274
0.2958814205816631
0.369203117349373
0.4297282738342088
0.4904175142295599
0.5510354987677838
0.6113612693402046
0.6726821212518339
0.7343298027982678
0.7958257011590709
0.5496677522125281
-
a ticket has been filed here
-
Dan, thank you for the your comment! I answered it in the bug report, I suggest we continue the discussion there.
-
As I mentioned in a reply the bug report (it is ridiculous and should be closed.)
Some of the coordinates are in MILLIONTHS (or smaller) of inches !
One near the end has a -16th exponent:
points << Geom::Point3d.new( 4.194623966922387e-16, 0.20218771239100042, 65.51048909232898 );
That is about 42 femtoinches. In other words,
42 millionths of a nanoinch !
(42 millionths of a millionth of an inch.)Does the OP (@torel) understand that SketchUp has an internal coordinate tolerance of only 1 one thousandth of an inch ?
Why would anyone want to be passing SketchUp coordinate floats with up to 19 decimal places ?
Advertisement