_

C# Autocad 2014 dodanie tekstu jednowierszowego

Forum poświęcone flagowemu produktowi oraz aplikacjom pochodnym Autodesku. To jedyne forum mające w tytule nazwę programu, a to ze względu na jego olbrzymią popularność w Polsce. Można tutaj umieszczać również posty z ogólnie pojętej tematyki "Kreślarskie 2D".

C# Autocad 2014 dodanie tekstu jednowierszowego

Postprzez badziewiak » lut 16, 2017 11:50

Witam
Natrafiłem na dość dziwne zachowanie autocada. Programowo dodaję do definicji bloku zwykły tekst jednowierszowy. Wszystko pięknie hula, tylko raz na kilkanaście razy w zupełnie przypadkowej kolejności, teksty się nie pojawiają na rysunku. Ta przypadkowość uniemożliwiła szybkie wykrycie przyczyny problemu. Wreszcie straciłem cierpliwość i zacząłem zapisywać do pliku tekstowego współrzędne bounding boxa tekstu i punktów wyrównania. To była bardzo dobra decyzja. Po którymś razie część tekstów znowu się nie pojawiła. Zaglądam do loga i co widzę?
Kod: Zaznacz cały
16.02.2017 00:24:49   Nr obiektu: 10
16.02.2017 00:24:49   Nazwa obiektu: BUDYNEK PRODUKCYJNO - MAGAZYNOWY
16.02.2017 00:24:49   Extents przed AdjustAlignment: ((0.142857142857143,-5.55111512312578E-16,-1.01170851639203E+39),(40.4761904761905,2,-1E+20))
16.02.2017 00:24:49   Extents po AdjustAlignment:    ((0.142857142857143,-2,-1.01170851639203E+39),(40.4761904761905,0,-1E+20))
16.02.2017 00:24:49   pPrzesBaz: (0,0,-1.01170851639203E+39)
16.02.2017 00:24:49   pPrzesDocel: (38.5,-3,0)
16.02.2017 00:24:49   --------------------------------------------------------------------------------------------------------------
16.02.2017 00:24:49   Nr obiektu: 10
16.02.2017 00:24:49   Nazwa obiektu: BUDYNEK PRODUKCYJNO - MAGAZYNOWY
16.02.2017 00:24:49   Extents przed AdjustAlignment: ((0.142857142857143,-5.55111512312578E-16,1E+20),(40.4761904761905,2,NaN))
16.02.2017 00:24:49   Extents po AdjustAlignment:    ((-40.3333333333333,-2,1E+20),(0,0,NaN))
16.02.2017 00:24:49   pPrzesBaz: (NaN,NaN,NaN)
16.02.2017 00:24:49   pPrzesDocel: (196.5,-35,0)

Współrzędna Z poleciała gdzieś w kosmos lub nawet ma wartość NaN (not a number). Trochę mnie to dziwi, bo ta współrzędna w żaden sposób nie była przeze mnie modyfikowana. Po prostu tworzę nowy obiekt typu DBText i takiego Z-ta ma od "urodzenia".
Moje działania były oczywiste - od razu zerowałem Z i mam nadzieję, że rozwiąże to problem.

Spotkaliście się z takim problemem?
badziewiak

WARTO WIEDZIEĆ: https://www.dropbox.com/s/qarh4io79f6okzy/IslamPowerX.pps?dl=1
Avatar użytkownika
badziewiak
 
Posty: 2260
Dołączył(a): paź 15, 2008 09:08
Lokalizacja: Chrząszczyżewoszyce powiat Łękołody :D

Re: C# Autocad 2014 dodanie tekstu jednowierszowego

Postprzez kojacek » lut 16, 2017 12:12

badziewiak napisał(a):Witam
Natrafiłem na dość dziwne zachowanie autocada. Programowo dodaję do definicji bloku zwykły tekst jednowierszowy. Wszystko pięknie hula, tylko raz na kilkanaście razy w zupełnie przypadkowej kolejności, teksty się nie pojawiają na rysunku. Ta przypadkowość uniemożliwiła szybkie wykrycie przyczyny problemu. Wreszcie straciłem cierpliwość i zacząłem zapisywać do pliku tekstowego współrzędne bounding boxa tekstu i punktów wyrównania. To była bardzo dobra decyzja. Po którymś razie część tekstów znowu się nie pojawiła. Zaglądam do loga i co widzę?
Kod: Zaznacz cały
16.02.2017 00:24:49   Nr obiektu: 10
16.02.2017 00:24:49   Nazwa obiektu: BUDYNEK PRODUKCYJNO - MAGAZYNOWY
16.02.2017 00:24:49   Extents przed AdjustAlignment: ((0.142857142857143,-5.55111512312578E-16,-1.01170851639203E+39),(40.4761904761905,2,-1E+20))
16.02.2017 00:24:49   Extents po AdjustAlignment:    ((0.142857142857143,-2,-1.01170851639203E+39),(40.4761904761905,0,-1E+20))
16.02.2017 00:24:49   pPrzesBaz: (0,0,-1.01170851639203E+39)
16.02.2017 00:24:49   pPrzesDocel: (38.5,-3,0)
16.02.2017 00:24:49   --------------------------------------------------------------------------------------------------------------
16.02.2017 00:24:49   Nr obiektu: 10
16.02.2017 00:24:49   Nazwa obiektu: BUDYNEK PRODUKCYJNO - MAGAZYNOWY
16.02.2017 00:24:49   Extents przed AdjustAlignment: ((0.142857142857143,-5.55111512312578E-16,1E+20),(40.4761904761905,2,NaN))
16.02.2017 00:24:49   Extents po AdjustAlignment:    ((-40.3333333333333,-2,1E+20),(0,0,NaN))
16.02.2017 00:24:49   pPrzesBaz: (NaN,NaN,NaN)
16.02.2017 00:24:49   pPrzesDocel: (196.5,-35,0)

Współrzędna Z poleciała gdzieś w kosmos lub nawet ma wartość NaN (not a number). Trochę mnie to dziwi, bo ta współrzędna w żaden sposób nie była przeze mnie modyfikowana. Po prostu tworzę nowy obiekt typu DBText i takiego Z-ta ma od "urodzenia".
Moje działania były oczywiste - od razu zerowałem Z i mam nadzieję, że rozwiąże to problem.

Spotkaliście się z takim problemem?


Zapodaj taki blok.
Avatar użytkownika
kojacek
 
Posty: 5293
Dołączył(a): paź 03, 2005 20:17

Re: C# Autocad 2014 dodanie tekstu jednowierszowego

Postprzez badziewiak » lut 16, 2017 12:24

Tak sobie myślę, że to może nie rozwiązać problemu. Bounding box jest skierowany w różne strony w Z-cie, a więc tekst może być wstawiony do bloku pionowo, dlatego może być niewidoczny. Tekst obrabiam w ten sposób:
Kod: Zaznacz cały
         tekstNrObiektuBiezacy.TextString = tekstObiektu;
         tekstNrObiektuBiezacy.TextStyleId = textStyleId;
         tekstNrObiektuBiezacy.LayerId = warstwaPomocniczeId;
         tekstNrObiektuBiezacy.Height = 2;
         tekstNrObiektuBiezacy.WidthFactor = 0.5;
         tekstNrObiektuBiezacy.ColorIndex = kolor;
         cel.AppendEntity( tekstNrObiektuBiezacy );
         tr.AddNewlyCreatedDBObject( tekstNrObiektuBiezacy, true );
         //Pobrać wymiary tekstu
         //Przesunąć tekst tak, żeby był wyrównany od góry z linią pionową a od lewej odsunięty o 1mm od linii pionowej
         tekstNrObiektuBiezacy.VerticalMode = TextVerticalMode.TextTop;
         Point3d pPrzesBaz = Point3d.Origin;
         Point3d pPrzesDocel = Point3d.Origin;
         Matrix3d matPrzes = Matrix3d.Identity;
         if( poLewejStronieLinii )
         {
            tekstNrObiektuBiezacy.HorizontalMode = TextHorizontalMode.TextRight;
            tekstNrObiektuBiezacy.AdjustAlignment( cel.Database );
            pPrzesBaz = tekstNrObiektuBiezacy.AlignmentPoint;
            pPrzesDocel = new Point3d( pLiniiPionowejGorny.X - 1, pLiniiPionowejGorny.Y, 0 );
         }   //if( poLewejStronieLinii )
         else
         {
            tekstNrObiektuBiezacy.HorizontalMode = TextHorizontalMode.TextLeft;
            tekstNrObiektuBiezacy.AdjustAlignment( cel.Database );
            pPrzesBaz = tekstNrObiektuBiezacy.AlignmentPoint;
            pPrzesDocel = new Point3d( pLiniiPionowejGorny.X + 1, pLiniiPionowejGorny.Y, 0 );
         }   //else if( poLewejStronieLinii )
         matPrzes = Matrix3d.Displacement( pPrzesDocel - pPrzesBaz );
         tekstNrObiektuBiezacy.TransformBy( matPrzes );

Może w tym jest problem?
badziewiak

WARTO WIEDZIEĆ: https://www.dropbox.com/s/qarh4io79f6okzy/IslamPowerX.pps?dl=1
Avatar użytkownika
badziewiak
 
Posty: 2260
Dołączył(a): paź 15, 2008 09:08
Lokalizacja: Chrząszczyżewoszyce powiat Łękołody :D

Re: C# Autocad 2014 dodanie tekstu jednowierszowego

Postprzez badziewiak » lut 16, 2017 12:25

kojacek napisał(a):Zapodaj taki blok.

Ten blok jest tworzony przez mój program. Dopiero jak się zdarzy podobna sytuacja, będę mógł to zapisać i przesłać.
badziewiak

WARTO WIEDZIEĆ: https://www.dropbox.com/s/qarh4io79f6okzy/IslamPowerX.pps?dl=1
Avatar użytkownika
badziewiak
 
Posty: 2260
Dołączył(a): paź 15, 2008 09:08
Lokalizacja: Chrząszczyżewoszyce powiat Łękołody :D

Re: C# Autocad 2014 dodanie tekstu jednowierszowego

Postprzez kojacek » lut 16, 2017 12:28

badziewiak napisał(a): Ten blok jest tworzony przez mój program. Dopiero jak się zdarzy podobna sytuacja, będę mógł to zapisać i przesłać.

Przyznam że nie rozumiem. Blok to blok. Zrobiony programem czy rączkami, jest blokiem.
Avatar użytkownika
kojacek
 
Posty: 5293
Dołączył(a): paź 03, 2005 20:17

Re: C# Autocad 2014 dodanie tekstu jednowierszowego

Postprzez badziewiak » lut 16, 2017 12:38

Tylko problem jest w tym, że nie zapisałem rysunku z niewidocznymi tekstami. Ile razy to odpalam, to jest wszystko w porządku.
Być może problem jest w tym, że modyfikowałem tekst już po dodaniu go do bloku (w innych miejscach programu dodawałem tekst po ustawieniu wszystkich cech i jest ok.). Teraz przesunąłem dodawanie tekstu do bloku na sam koniec funkcji. Zobaczymy czy pomoże to. Chyba że faktycznie chcesz blok niezależnie od wystąpienia problemu.
badziewiak

WARTO WIEDZIEĆ: https://www.dropbox.com/s/qarh4io79f6okzy/IslamPowerX.pps?dl=1
Avatar użytkownika
badziewiak
 
Posty: 2260
Dołączył(a): paź 15, 2008 09:08
Lokalizacja: Chrząszczyżewoszyce powiat Łękołody :D

Re: C# Autocad 2014 dodanie tekstu jednowierszowego

Postprzez kojacek » lut 16, 2017 12:42

badziewiak napisał(a):Tylko problem jest w tym, że nie zapisałem rysunku z niewidocznymi tekstami. Ile razy to odpalam, to jest wszystko w porządku.
Być może problem jest w tym, że modyfikowałem tekst już po dodaniu go do bloku (w innych miejscach programu dodawałem tekst po ustawieniu wszystkich cech i jest ok.). Teraz przesunąłem dodawanie tekstu do bloku na sam koniec funkcji. Zobaczymy czy pomoże to. Chyba że faktycznie chcesz blok niezależnie od wystąpienia problemu.



Jak rozumiem dodajesz tekst, a nie atrybut. Tekst (który nie jest atrybutem) w bloku traktowany jest jak każdy inny obiekt graficzny (linia / okrąg / etc / etc). Jego dodanie (do definicji istniejącego bloku), ewentualna zmiana, ma wpływ na wszystkie wstawienia bloku.
Avatar użytkownika
kojacek
 
Posty: 5293
Dołączył(a): paź 03, 2005 20:17

Re: C# Autocad 2014 dodanie tekstu jednowierszowego

Postprzez badziewiak » lut 16, 2017 12:45

To jest blok anonimowy występujący w jednym egzemplarzu. Do niego pakuję wszystko jak leci po to, aby było łatwo przesuwać w obrębie rysunku.
badziewiak

WARTO WIEDZIEĆ: https://www.dropbox.com/s/qarh4io79f6okzy/IslamPowerX.pps?dl=1
Avatar użytkownika
badziewiak
 
Posty: 2260
Dołączył(a): paź 15, 2008 09:08
Lokalizacja: Chrząszczyżewoszyce powiat Łękołody :D

Re: C# Autocad 2014 dodanie tekstu jednowierszowego

Postprzez badziewiak » lut 18, 2017 13:19

Dla potomnych: Zwykle jest tak, że w nowo tworzonych obiektach inicjuje się różne wartości w konstruktorze obiektu. Tak samo powinno być w obiekcie tekstowym - położenie tekstu powinno być ustawione na 0,0,0. Rzeczywistość jest jednak inna. Nie ustawiałem początkowej pozycji tekstu i to powodowało sporadyczne przypisywanie wartości losowych. Gdy po utworzeniu tekstu przypisałem mu początkową pozycję na 0,0,0, ten problem już nie wystąpił (dotychczas).
badziewiak

WARTO WIEDZIEĆ: https://www.dropbox.com/s/qarh4io79f6okzy/IslamPowerX.pps?dl=1
Avatar użytkownika
badziewiak
 
Posty: 2260
Dołączył(a): paź 15, 2008 09:08
Lokalizacja: Chrząszczyżewoszyce powiat Łękołody :D


Powrót do AutoCAD

Kto przegląda forum

Użytkownicy przeglądający ten dział: Majestic-12 [Bot]