Или есть какой-то фокус, позволяющий быстро пропускать "пустые" участки номеров?Нет. Судя по всему или этот чертеж был создан не в AutoCAD или создан из dxf-файла, где HANDSEED был установлен. Сам AutoCAD обычно нормально работает с HANDSEED. Обычно команда _WBLOCK всего чертежа позволяет исправить HANDSEED, но при этом вполне возможно, что метки промежуточных объектов тоже будут изменены.
Кстати, однократно проанализировав Database до Handseed ты можешь её исправить - установить Database.Handseed в правильное значение.Не понял, как? Пройтись по всем числам, попробовав получить ObjectId? И это сбросит Handseed на последнее используемое число?
стати, однократно проанализировав Database до Handseed ты можешь её исправить - установить Database.Handseed в правильное значение.Наваял такой код:
А, я понял! В смысле, что я могу задать это значение - оно Writeable.Угу. Есть еще одна мысль для получения HANDSEED. Database.Wblock для создания временной базы и проанализировать её HANDSEED:
Цикл do выполняется всего один-два раза. То есть, в чертеже реально есть объекты с такими Handle :-\Ну тогда возможно был какой-то очень большой чертеж из которого поудаляли 90%
Команда: LAST100HANDSEEDS
Handseed value: 169059631
Last effective handle value: 169059630
1) AcDbXrecord - A13A52D
2) AcDbXrecord - A13A52C
3) AcDbXrecord - A13A52B
4) AcDbXrecord - A13A52A
5) AcDbXrecord - A13A529
6) AcDbXrecord - A13A528
7) AcDbXrecord - A13A527
8) AcDbXrecord - A13A526
9) AcDbXrecord - A13A525
10) AcDbXrecord - A13A524
11) AcDbXrecord - A13A523
12) AcDbXrecord - A13A522
13) AcDbXrecord - A13A521
14) AcDbXrecord - A13A520
15) AcDbXrecord - A13A51F
16) AcDbXrecord - A13A51E
17) AcDbXrecord - A13A51D
18) AeccDbUserDefinedAttributeClassification - A13A51C
19) AeccDbClassNode - A13A51B
20) AcMapGWSUndoRecorder - A13A51A
21) AcDbDimStyleTableRecord - A13A519
22) AcDbFontTableRecord - A13A518
23) AcDbFontTableRecord - A13A517
24) AcDbFontTableRecord - A13A516
25) AcDbImpNonPersistentObjectsCollection - A13A515
26) AecDbNotificationTracker - A13A514
27) AcDbFontTableRecord - A13A513
28) AcDbFontTableRecord - A13A512
29) AcDbFontTableRecord - A13A511
30) AcDbFontTableRecord - A13A510
31) AcDbFontTableRecord - A13A50F
32) AcDbFontTableRecord - A13A50E
33) AcDbFontTableRecord - A13A50D
34) AcDbFontTableRecord - A13A50C
35) AcDbFontTableRecord - A13A50B
36) AcDbFontTableRecord - A13A50A
37) AcDbFontTableRecord - A13A509
38) AcDbFontTableRecord - A13A508
39) AcDbFontTableRecord - A13A507
40) AcDbFontTableRecord - A13A506
41) AcDbVXTableRecord - A13A505
42) AcDbVXTableRecord - A13A504
43) AcDbVXTableRecord - A13A503
44) AcDbVXTable - A13A502
45) AcDbFontTable - A13A501
46) AcRxObject - A13A500
Команда: LAST100HANDSEEDS
Handseed value: 169059678
Last effective handle value: 169059677
1) AcDbXrecord - A13A55C
2) AcDbXrecord - A13A55B
3) AcDbXrecord - A13A55A
4) AcDbXrecord - A13A559
5) AcDbXrecord - A13A558
6) AcDbXrecord - A13A557
7) AcDbXrecord - A13A556
8) AcDbXrecord - A13A555
9) AcDbXrecord - A13A554
10) AcDbXrecord - A13A553
11) AcDbXrecord - A13A552
12) AcDbXrecord - A13A551
13) AcDbXrecord - A13A550
14) AcDbXrecord - A13A54F
15) AcDbXrecord - A13A54E
16) AcDbXrecord - A13A54D
17) AcDbXrecord - A13A54C
18) AeccDbUserDefinedAttributeClassification - A13A54B
19) AeccDbClassNode - A13A54A
20) AcMapGWSUndoRecorder - A13A549
21) AcDbDimStyleTableRecord - A13A548
22) AcDbFontTableRecord - A13A547
23) AcDbFontTableRecord - A13A546
24) AcDbFontTableRecord - A13A545
25) AcDbImpNonPersistentObjectsCollection - A13A544
26) AecDbNotificationTracker - A13A543
27) AcDbFontTableRecord - A13A542
28) AcDbFontTableRecord - A13A541
29) AcDbFontTableRecord - A13A540
30) AcDbFontTableRecord - A13A53F
31) AcDbFontTableRecord - A13A53E
32) AcDbFontTableRecord - A13A53D
33) AcDbFontTableRecord - A13A53C
34) AcDbFontTableRecord - A13A53B
35) AcDbFontTableRecord - A13A53A
36) AcDbFontTableRecord - A13A539
37) AcDbFontTableRecord - A13A538
38) AcDbFontTableRecord - A13A537
39) AcDbFontTableRecord - A13A536
40) AcDbFontTableRecord - A13A535
41) AcDbVXTableRecord - A13A534
42) AcDbVXTableRecord - A13A533
43) AcDbVXTableRecord - A13A532
44) AcDbVXTable - A13A531
45) AcDbFontTable - A13A530
46) AcDbXrecord - A13A52F
47) AcDbXrecord - A13A52E
48) AcDbXrecord - A13A52D
49) AcRxObject - A13A52C
Команда: LAST100HANDSEEDS
Handseed value: 169059732
Last effective handle value: 169059731
1) AcDbXrecord - A13A592
2) AcDbXrecord - A13A591
3) AcDbXrecord - A13A590
4) AcDbXrecord - A13A58F
5) AcDbXrecord - A13A58E
6) AcDbXrecord - A13A58D
7) AcDbXrecord - A13A58C
8) AcDbXrecord - A13A58B
9) AcDbXrecord - A13A58A
10) AcDbXrecord - A13A589
11) AcDbXrecord - A13A588
12) AcDbXrecord - A13A587
13) AcDbXrecord - A13A586
14) AcDbXrecord - A13A585
15) AcDbXrecord - A13A584
16) AcDbXrecord - A13A583
17) AcDbXrecord - A13A582
18) AeccDbUserDefinedAttributeClassification - A13A581
19) AeccDbClassNode - A13A580
20) AcMapGWSUndoRecorder - A13A57F
21) AcDbDimStyleTableRecord - A13A57E
22) AcDbFontTableRecord - A13A57D
23) AcDbFontTableRecord - A13A57C
24) AcDbFontTableRecord - A13A57B
25) AcDbImpNonPersistentObjectsCollection - A13A57A
26) AecDbNotificationTracker - A13A579
27) AcDbFontTableRecord - A13A578
28) AcDbFontTableRecord - A13A577
29) AcDbFontTableRecord - A13A576
30) AcDbFontTableRecord - A13A575
31) AcDbFontTableRecord - A13A574
32) AcDbFontTableRecord - A13A573
33) AcDbFontTableRecord - A13A572
34) AcDbFontTableRecord - A13A571
35) AcDbFontTableRecord - A13A570
36) AcDbFontTableRecord - A13A56F
37) AcDbFontTableRecord - A13A56E
38) AcDbFontTableRecord - A13A56D
39) AcDbFontTableRecord - A13A56C
40) AcDbFontTableRecord - A13A56B
41) AcDbVXTableRecord - A13A56A
42) AcDbVXTableRecord - A13A569
43) AcDbVXTableRecord - A13A568
44) AcDbVXTable - A13A567
45) AcDbFontTable - A13A566
46) AcRxObject - A13A565
Нет, не примитивы :(Но у нее же есть владелец?
Надо найти настройку, которая хранится в базе данных.
Эх... Оптимизировал свои методы и "сканирование" базы данных выполнилось за несколько десятков секунд! ::)О! Т.е. в сто раз. Неплохо! :D
То есть, при каждом сохранении-закрытии-открытии чертежа, Civil "накидывает" +50 объектов. Причём, похоже, что накидывает он их всегда в самый конец."накидывает" объекты даже чистый AutoCAD, даже если чертеж открыть-сохранить.
Поэтому, легко образуются вот такие "пустоты" из сотен миллионов чисел...50 и сотен миллионов слишком отличаются, так что не из-за этого. Предполагаю что, при импорте точек и создании поверхности происходит основное накидывание Handle.
Обычно команда _WBLOCK всего чертежа позволяет исправить HANDSEED, но при этом вполне возможно, что метки промежуточных объектов тоже будут изменены._WBLOCK к сожалению не всегда применима, особенно к топографии, геологии, генпланам и т.д.
"накидывает" объекты даже чистый AutoCAD, даже если чертеж открыть-сохранить.Да, скорее всего так и есть.
Объекты предполагаю всегда добавляются в конец, т.е. идет приращение Handle.
50 и сотен миллионов слишком отличаются, так что не из-за этого.Ну я и не писал, что именно из-за этого ;) Мысль была такая, что если уж на простом открытии-сохранении столько объектов добавляется (а впоследствии удаляется), то неудивительно что при долгой работе с чертежом в течение нескольких месяцев образуются такие пустоты и значение Handseed растёт до сотен миллионов.
Команда: FINDHANDSEEDSGROUPS
Handseed value: 169059631
Empty space finded: from 168902180 to 168920706
Empty space finded: from 168824584 to 168838858
Empty space finded: from 168721414 to 168736519
Empty space finded: from 168697116 to 168708368
Empty space finded: from 168685672 to 168697050
Empty space finded: from 168655742 to 168666241
Empty space finded: from 168587469 to 168603814
Empty space finded: from 168522944 to 168534231
Empty space finded: from 151647956 to 168434286
Empty space finded: from 134803404 to 151589888
Empty space finded: from 117963460 to 134749484
Empty space finded: from 117906000 to 117934478
Empty space finded: from 101122047 to 117899263
Empty space finded: from 67421639 to 101113061
Empty space finded: from 33738858 to 67421638
Empty space finded: from 16901946 to 33738856
Empty space finded: from 119645 to 16896864
Empty space finded: from 15837 to 26444
То есть, промежутки в 16 млн - вполне нормальное явление :D_WBLOCK к сожалению не всегда применима, особенно к топографии, геологии, генпланам и т.д.Да, на самом деле, я никогда не стану WBLOCK делать для чертежа Civil 3D. Он и в стандартных режимах работы иногда "разваливается", а уж такую нетипичную для него операцию он вряд ли переживёт.
О! Т.е. в сто раз. Неплохо!А сможете угадать, что я переделал в одном из тех методов в первом посте, что дало основной прирост скорости? :)
Да, на самом деле, я никогда не стану WBLOCK делать для чертежа Civil 3D. Он и в стандартных режимах работы иногда "разваливается", а уж такую нетипичную для него операцию он вряд ли переживёт.У меня была несколько иная идея. Я смотрел в сторону Database.Wblock и получения IdMapping. В результирующей базе промежутков нет и в IdMapping есть информация об исходных Handle. Поэтому найдя в клонированной базе нужный элемент можно найти его оригинал в исходной базе. Но тестирование показало, что в AutoCAD .NET API (в отличие от ObjectARX) соответствующие события при Database.Wblock не срабатывают (хотя при команде _WBLOOCK срабатывают) и получить правильный IdMapping нельзя.
А сможете угадать, что я переделал в одном из тех методов в первом посте, что дало основной прирост скорости? :)
Предполагаю, что:О! Т.е. в сто раз. Неплохо!А сможете угадать, что я переделал в одном из тех методов в первом посте, что дало основной прирост скорости? :)
Ну, в общем-то, угадали!Тут и гадать не нужно было. В первую очередь следовало отсечь невалидные ObjectId. Я еще вчера подумал, что у тебя не очень рационально это сделано. Но не думал, что прирост скорости будет столь значительным.
Я еще вчера подумал, что у тебя не очень рационально это сделано.Это я ещё не выложил метод SafeOpen... ::)
Там тоже проверка валидности ObjectId происходит не сразу? ;)Я еще вчера подумал, что у тебя не очень рационально это сделано.Это я ещё не выложил метод SafeOpen... ::)
Там повторный вызов CheckObjectIdFor 8)Главное, что ты уже разобрался!