Witam, mam pewien problem w pisaniu skryptu do AutoCAD w C#. Otóż w LISP mogłem tworzyć zmienne globalne np. wspolczynnikSkali, który był ustalany na początku skryptu i był stały przez cały czas jego wykonania. Służył do wyliczania wielkości tworzonego tekstu opisów oraz do wyliczania długości użytych kabli, rur, etc. Dlatego stworzyłem instancję PrzestrzenSkaliTegoRysunku, który ten współczynnik przechowuje, ale używanie go nie jest tak wygodne jak tego bym sobie życzył. Czy istnieje jakieś inne rozwiązanie niż przekazywanie tej zmiennej do metod przez wartość? Tak żeby klasy, które korzystają z współczynnika referowały do niego... Gdyby tak się dało to klasa RysowanieObiektow mogłaby być statyczna, a ciągłe powielanie tej zmiennej w przyszłych klasach będzie trochę dziwne. Proszę o sugestie. Poniżej poglądowy wycinek kodu, jak to mam rozwiązane obecnie.
public class MyCommands // program
{
private PrzestrzenModelu przestrzenTegoModelu;
private RysowanieObiektow rysowanieObiektow;
private void MyCommand()// odpowiednik Main()
{
przestrzenTegoModelu = new PrzestrzenModelu();
przestrzenTegoModelu.UstawSkaleIWspolczynnikSkali(100);// ustal wspolczynnikSkali
rysowanieObiektow = new RysowanieObiektow(przestrzenTegoModelu.DzielnikSkaliModelu());
rysowanieObiektow.RysujTekstDB(punktBazowy2d, 2.0, "Test");
}
}
public class PrzestrzenModelu
{
private int skalaModelu;
private int wspolczynnikSkali;
public void UstawSkaleIWspolczynnikSkali(int skalaPobrana)
{
skalaModelu = skalaPobrana;
wspolczynnikSkali = 1000 / skalaModelu;
}
public int SkalaModelu()
{
return skalaModelu;
}
public int WspolczynnikSkali()
{
return wspolczynnikSkali;
}
}
public class RysowanieObiektow
{
public RysowanieObiektow(int DzielnikSkaliModelu) { mnoznikRysowania = DzielnikSkaliModelu; }
private int mnoznikRysowania;
public void RysujTekstDB(Point2d punktBazowy, double wysokoscTekstu, string tekstString)
{
double wysokoscTekstuXMnoznik = wysokoscTekstu * mnoznikRysowania;
DBText acText = new DBText();
acText.Position = punktBazowy3d;
acText.Height = wysokoscTekstuXMnoznik;
acText.TextString = tekstString;
rekordyTabeliBlokow.AppendEntity(acText);
acTrans.AddNewlyCreatedDBObject(acText, true);
acTrans.Commit();
}
}