bugsplat using followme tool

bugsplat using followme tool

Postby torel » Thu Aug 17, 2017 12:49 pm

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()
0
Ropefall - plugin to easily draw ropes, wires, cables
www.sketchrope.com
(with non-expiring licence, no subscription)

torel 
 

Re: bugsplat using followme tool

Postby torel » Thu Aug 17, 2017 1:00 pm

I found this this discussion: https://sketchucation.com/forums/viewtopic.php?f=180%26amp;t=16734

TIG says:

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? :-P
0
Last edited by torel on Thu Aug 17, 2017 1:01 pm, edited 1 time in total.
Ropefall - plugin to easily draw ropes, wires, cables
www.sketchrope.com
(with non-expiring licence, no subscription)

torel 
 

Re: bugsplat using followme tool

Postby torel » Thu Aug 17, 2017 3:24 pm

>>
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
0
Last edited by torel on Thu Aug 17, 2017 5:35 pm, edited 4 times in total.
Ropefall - plugin to easily draw ropes, wires, cables
www.sketchrope.com
(with non-expiring licence, no subscription)

torel 
 

Re: bugsplat using followme tool

Postby torel » Thu Aug 17, 2017 4:25 pm

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).
0
Last edited by torel on Thu Aug 17, 2017 5:32 pm, edited 1 time in total.
Ropefall - plugin to easily draw ropes, wires, cables
www.sketchrope.com
(with non-expiring licence, no subscription)

torel 
 

Re: bugsplat using followme tool

Postby torel » Thu Aug 17, 2017 4:31 pm

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.
0
Last edited by torel on Thu Aug 17, 2017 5:24 pm, edited 1 time in total.
Ropefall - plugin to easily draw ropes, wires, cables
www.sketchrope.com
(with non-expiring licence, no subscription)

torel 
 

Re: bugsplat using followme tool

Postby torel » Thu Aug 17, 2017 5:23 pm

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... ;)
0
Ropefall - plugin to easily draw ropes, wires, cables
www.sketchrope.com
(with non-expiring licence, no subscription)

torel 
 

Re: bugsplat using followme tool

Postby torel » Fri Dec 08, 2017 2:22 pm

0
Ropefall - plugin to easily draw ropes, wires, cables
www.sketchrope.com
(with non-expiring licence, no subscription)

torel 
 

Re: bugsplat using followme tool

Postby Dan Rathbun » Sat Dec 09, 2017 4:46 am

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 ?
0
Last edited by Dan Rathbun on Mon Dec 11, 2017 4:02 am, edited 1 time in total.
    I'm not here much anymore. But a PM will fire email notifications.
    User avatar
    Dan Rathbun 
    PluginStore Author
    PluginStore Author
     

    Re: bugsplat using followme tool

    Postby torel » Sun Dec 10, 2017 1:03 pm

    Dan, thank you for the your comment! I answered it in the bug report, I suggest we continue the discussion there.
    1
    Ropefall - plugin to easily draw ropes, wires, cables
    www.sketchrope.com
    (with non-expiring licence, no subscription)

    torel 
     

    SketchUcation One-Liner Adverts

    by Ad Machine » 5 minutes ago



    Ad Machine 
    Robot
     



     

    Return to Developers' Forum

    Who is online

    Users browsing this forum: arisspiridakis and 3 guests

    Visit our sponsors: