Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  C# - Overruling DimensionText

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  C# - Overruling DimensionText (2243 mal gelesen)
RoSiNiNo
Mitglied
Konstrukteur


Sehen Sie sich das Profil von RoSiNiNo an!   Senden Sie eine Private Message an RoSiNiNo  Schreiben Sie einen Gästebucheintrag für RoSiNiNo

Beiträge: 1126
Registriert: 09.10.2002

Revit Structure 2011
Acad 2011-deutsch, Express Tools
3ds Max 2011
Win 7-Professional
HP Workstation Z400, 6GB
GeForce GTX 470

erstellt am: 20. Mrz. 2010 11:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,
ich habe ein Problem mit Overruling DimensionText.
Ich möchte bei einer Bemaßung den Text überschreiben. Allerdings nur die Sichtbarkeit und nicht die Bemaßung selber.
Overruling sollte da die Beste Lösung sein, dachte ich.
Interessanterweise hatte es schon einmal funktioniert, jetzt aber bekomme ich es nicht mehr hin. Ich bekomme bei der Rückgabe "result" im Beispiel immer false zurück. Weiß jemand wieso und wie ich es umgehen kann? Ich habe nun schon mehrere Stunden damit verbracht und komme nicht dahinter. Bei Kreisen ist es kein Problem, wie man anhand des Beispiels erkennen kann.
Ich bin für jede Hilfe sehr dankbar.

Code:
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.GraphicsInterface;
using Autodesk.AutoCAD.Runtime;

[assembly: CommandClass(typeof(RSNNAcadApp.DimensionCommands.OverruleTemp))]
namespace RSNNAcadApp.DimensionCommands
{
    internal class DimOverrule : DrawableOverrule
    {

        public DimOverrule()
        {
            Overrule.Overruling = true;  // if you don't do this, nothing works
        }

        public override bool WorldDraw(Drawable drawable, WorldDraw wd)
        {
            bool result = true;
            Dimension dim = drawable as Dimension;
            if (dim != null)
            {
                using (Dimension clone = (Dimension)dim.Clone())
                {
                    //clone.DimensionText = ChangeStyle.GetDimTextExponent(clone);
                    clone.Prefix = "Prefix Test ";

                    result &= base.WorldDraw(clone, wd);
                }
            }
            else
                result &= base.WorldDraw(drawable, wd);
            return result;
        }
    }


    internal class CircleOverrule : DrawableOverrule
    {

        public CircleOverrule()
        {
            Overrule.Overruling = true;  // if you don't do this, nothing works
        }

        public override bool WorldDraw(Drawable drawable, WorldDraw wd)
        {
            bool result = true;
            Circle dim = drawable as Circle;
            if (dim != null)
            {
                using (Circle clone = (Circle)dim.Clone())
                {
                    //clone.DimensionText = ChangeStyle.GetDimTextExponent(clone);
                    clone.Radius = 10;

                    result &= base.WorldDraw(clone, wd);
                }
            }
            else
                result &= base.WorldDraw(drawable, wd);
            return result;
        }
    }


    class OverruleTemp
    {
        private static CircleOverrule myCircOverrule = null;

        [CommandMethod("CircOVERRULE")]
        public static void OverruleCommand()
        {
            if (myCircOverrule == null)
            {
                myCircOverrule = new CircleOverrule();
                Overrule.AddOverrule(RXObject.GetClass(typeof(Circle)), myCircOverrule, false);
                //Overrule.Overruling = true;
            }
            else
            {
                // Toggle Overruling on/off
                Overrule.Overruling ^= true;
            }

            Application.DocumentManager.MdiActiveDocument.Editor.Regen();
        }

       
       
        private static DimOverrule myDimOverrule = null;

        [CommandMethod("DimOVERRULE")]
        public static void DimOverruleCommand()
        {
            if (myDimOverrule == null)
            {
                myDimOverrule = new DimOverrule();
                Overrule.AddOverrule(RXObject.GetClass(typeof(Dimension)), myDimOverrule, false);
                //Overrule.Overruling = true;
            }
            else
            {
                // Toggle Overruling on/off
                Overrule.Overruling ^= true;
            }

            Application.DocumentManager.MdiActiveDocument.Editor.Regen();
        }

    }
}


------------------
Roland Feletic
PCD ZT-GmbH

Acad 2010-deutsch Update 1, Express Tools, Advantage Pack 1
3ds Max 2010
WinXP-Professional
HP Workstation xw4400, 3GB
Quadro FX1500

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 20. Mrz. 2010 11:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

bei mir funkt Dein Beispiel EINS-A.

Damit könnte ich mal annehmen, dass
a) die Projekteigenschaften zwischen unseren Projekten unterschiedlich sein könnten
b) Ich mit Civil3D(32bit) probiert hab, Du ev. mit anderem AutoCAD-Produkt/ServicePack/Betriebssystem

...und wahrscheinlich noch mehr Varianten.

Kannst Du ev. mal Dein DLL (das fertig kompilierte uploaden), damit gleichen wir mal die möglichen Projekteinstellungsunterschiede aus.

- alfred -

------------------
www.hollaus.at

RoSiNiNo
Mitglied
Konstrukteur


Sehen Sie sich das Profil von RoSiNiNo an!   Senden Sie eine Private Message an RoSiNiNo  Schreiben Sie einen Gästebucheintrag für RoSiNiNo

Beiträge: 1126
Registriert: 09.10.2002

Revit Structure 2011
Acad 2011-deutsch, Express Tools
3ds Max 2011
Win 7-Professional
HP Workstation Z400, 6GB
GeForce GTX 470

erstellt am: 20. Mrz. 2010 13:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Das ist jetzt aber sehr interessant. Bei mir hat es nämlich auch funktioniert und auf einmal nicht mehr.

------------------
Roland Feletic
PCD ZT-GmbH

Acad 2010-deutsch Update 1, Express Tools, Advantage Pack 1
3ds Max 2010
WinXP-Professional
HP Workstation xw4400, 3GB
Quadro FX1500

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 20. Mrz. 2010 13:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

hast Du mal probiert, dieses auf einem anderen Rechner anzustarten? Funktioniert's dann schon oder dort auch nicht? Oder tritt der Fehler gar nur während des Debugen's auf?

Ich kann auch davon ausgehen, dass Du keine andere Überschreibung (in anderen Modulen, ev. auch Reaktor in LISP) für den Objekttyp Bemassung geladen hast?

Wenn Du nach dieser Funktion in AutoCAD den Befehl _AUDIT startest, werden Fehler gefunden oder ist die Zeichnung stabil?

- alfred -

------------------
www.hollaus.at

RoSiNiNo
Mitglied
Konstrukteur


Sehen Sie sich das Profil von RoSiNiNo an!   Senden Sie eine Private Message an RoSiNiNo  Schreiben Sie einen Gästebucheintrag für RoSiNiNo

Beiträge: 1126
Registriert: 09.10.2002

Revit Structure 2011
Acad 2011-deutsch, Express Tools
3ds Max 2011
Win 7-Professional
HP Workstation Z400, 6GB
GeForce GTX 470

erstellt am: 20. Mrz. 2010 14:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ich denke mal ich werde das ganze mal in einem neuen Projekt testen.
Ich danke dir erstmal fürs testen. Ich werde meine Lösung dann mal hier reinstellen.

------------------
Roland Feletic
PCD ZT-GmbH

Acad 2010-deutsch Update 1, Express Tools, Advantage Pack 1
3ds Max 2010
WinXP-Professional
HP Workstation xw4400, 3GB
Quadro FX1500

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

RoSiNiNo
Mitglied
Konstrukteur


Sehen Sie sich das Profil von RoSiNiNo an!   Senden Sie eine Private Message an RoSiNiNo  Schreiben Sie einen Gästebucheintrag für RoSiNiNo

Beiträge: 1126
Registriert: 09.10.2002

Revit Structure 2011
Acad 2011-deutsch, Express Tools
3ds Max 2011
Win 7-Professional
HP Workstation Z400, 6GB
GeForce GTX 470

erstellt am: 20. Mrz. 2010 16:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Alfred,
da bin ich nochmal. Kannst du vielleicht einmal probieren ob das Programm auch mit dieser Funktion funktioniert?
Es sollte die Bemaßung mit Hochzahlen schreiben. Irgendwie bekomme ich es nicht hin. Bei mir geht es einfach nicht.
Kannst du die kompilierte Datei dann mal schicken oder hier anhängen.
Es würde mich interessieren ob die bei mir auch funktioniert.
Danke im voraus.

Code:
        public static string GetDimTextExponent(Dimension dim)
        {
            Type dimType = dim.GetType();

            // Es werden nur Längenmaße überschrieben
            if ((dimType == typeof(LineAngularDimension2)) | (dimType == typeof(OrdinateDimension)) | (dimType == typeof(Point3AngularDimension)))
                return null;

            // Wenn keine Nachkommastellen vorhanden sind, können wir auch abbrechen
            if (dim.Dimdec == 0)
                return null;

            string dimText = dim.DimensionText;

            // Ist der Bemaßungstext überschrieben und beinhaltet kein Maß, können wir abbrechen
            if (dimText != "")
            {
                if (!dimText.Contains("<>"))
                    return null;
            }


            double dimMeasurement = dim.Measurement;
            double dimRound = dim.Dimrnd;
            int dimDec = dim.Dimdec;

            if (dimRound != 0)
                dimMeasurement = Utils.MyUtils.RoundedValue(dimMeasurement, dimRound);

            // Wir setzten den Text für die Bemaßungslänge
            string dimTextMeasurement = dimMeasurement.ToString("F" + dimDec.ToString());

            // Wenn die Zeichnung in Metern un der Dimsclae 1 ist, das Maß ebenfalls kleiner als 1 ist, ...
            if (HostApplicationServices.WorkingDatabase.Insunits == UnitsValue.Meters & dim.Dimscale == 1 & dimMeasurement < 1)
            {
                // ... wandeln wir in cm um und reduzieren die Nachkommastellen.
                dimDec -= 2;
                dimTextMeasurement = (dimMeasurement * 100).ToString("F" + dimDec.ToString());
            }

            StringBuilder sbDim = new StringBuilder(dimTextMeasurement);

            if (dimTextMeasurement.EndsWith("0"))
            {
                if (dimDec < 2)
                    sbDim.Remove(sbDim.Length - 2, 2);
                else
                    sbDim.Remove(sbDim.Length - 1, 1);
            }
            else
            {
                if (dimDec < 2)
                    sbDim.Remove(sbDim.Length - 2, 1);
                       
                sbDim.Insert(sbDim.Length - 1, @"{\A1;\H0.7x;\S");
                sbDim.Insert(sbDim.Length, @"^;}");
            }

            if (dim.Prefix != "")
                sbDim.Insert(0, dim.Prefix);
            if (dim.Suffix != "")
                sbDim.Insert(sbDim.Length, dim.Suffix);
            if (dimText != "")
            {
                int Wo = dimText.IndexOf("<>");
                if (Wo > 0)
                    sbDim.Insert(0, dimText.Substring(0, Wo));
                if (Wo < dimText.Length - 2)
                    sbDim.Insert(sbDim.Length, dimText.Substring(Wo + 2));
            }


            return sbDim.ToString();
        }


------------------
Roland Feletic
PCD ZT-GmbH

Acad 2010-deutsch Update 1, Express Tools, Advantage Pack 1
3ds Max 2010
WinXP-Professional
HP Workstation xw4400, 3GB
Quadro FX1500

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 20. Mrz. 2010 17:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

was soll denn funktionieren? Ich sehe zwar, dass Du eine Bemassung in die Funktion übergibst, aber Du änderst in dieser Funktion die Bemassung nicht.

Welchen Rückgabewert erwartest Du und welchen erhältst Du?

- alfred -

PS: folgende Zeile wird bei einem Versuch von mir nicht funktionieren:
...Utils.MyUtils.RoundedValue(...

PPS: eine Zeichnung mit den Voreinstellungen, die mit diesem Code etwas bewirken, wäre auch vorteilhaft, da z.B. INSUNITS, Bemassungsstileinstellungen, ..? scheinbar Voraussetzungen für die Lauffähigkeit dieses Codes darstellen.

------------------
www.hollaus.at

RoSiNiNo
Mitglied
Konstrukteur


Sehen Sie sich das Profil von RoSiNiNo an!   Senden Sie eine Private Message an RoSiNiNo  Schreiben Sie einen Gästebucheintrag für RoSiNiNo

Beiträge: 1126
Registriert: 09.10.2002

Revit Structure 2011
Acad 2011-deutsch, Express Tools
3ds Max 2011
Win 7-Professional
HP Workstation Z400, 6GB
GeForce GTX 470

erstellt am: 20. Mrz. 2010 18:30    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


_Bemaßungstest-m.zip

 
OK, hier ist eine Datei die ich zum Testen gemacht habe. Es sollten einfach nur Hochzahlen erstellt werden, mehr nicht. Ich habe den Code noch einmal hier zusammengefügt und es sollte nun alles ohne Probleme funktionieren, hoffe ich nun mal. Ich danke dir in jedem Fall für deine Bemühungen. Ich denke mal das dieses Tool für manch andere auch recht interessant wäre.
Code:
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.GraphicsInterface;
using Autodesk.AutoCAD.Runtime;
using System.Text;
using System;

[assembly: CommandClass(typeof(RSNNAcadApp.DimensionCommands.Hochzahlen))]
namespace RSNNAcadApp.DimensionCommands
{
    internal class DimOverrule : DrawableOverrule
    {

        public DimOverrule()
        {
            Overrule.Overruling = true;  // if you don't do this, nothing works
        }

        public override bool WorldDraw(Drawable drawable, WorldDraw wd)
        {
            bool result = true;
            Dimension dim = drawable as Dimension;
            if (dim != null)
            {
                using (Dimension clone = (Dimension)dim.Clone())
                {
                    clone.DimensionText = Hochzahlen.GetDimTextExponent(clone);
                    //clone.Prefix = "Prefix Test ";

                    result &= base.WorldDraw(clone, wd);
                }
            }
            else
                result &= base.WorldDraw(drawable, wd);
            return result;
        }
    }


    internal class CircleOverrule : DrawableOverrule
    {

        public CircleOverrule()
        {
            Overrule.Overruling = true;  // if you don't do this, nothing works
        }

        public override bool WorldDraw(Drawable drawable, WorldDraw wd)
        {
            bool result = true;
            Circle dim = drawable as Circle;
            if (dim != null)
            {
                using (Circle clone = (Circle)dim.Clone())
                {
                    //clone.DimensionText = ChangeStyle.GetDimTextExponent(clone);
                    clone.Radius = 10;

                    result &= base.WorldDraw(clone, wd);
                }
            }
            else
                result &= base.WorldDraw(drawable, wd);
            return result;
        }
    }


    class Hochzahlen
    {
        private static CircleOverrule myCircOverrule = null;

        [CommandMethod("CircOVERRULE")]
        public static void OverruleCommand()
        {
            if (myCircOverrule == null)
            {
                myCircOverrule = new CircleOverrule();
                Overrule.AddOverrule(RXObject.GetClass(typeof(Circle)), myCircOverrule, false);
                //Overrule.Overruling = true;
            }
            else
            {
                // Toggle Overruling on/off
                Overrule.Overruling ^= true;
            }

            Application.DocumentManager.MdiActiveDocument.Editor.Regen();
        }

      
      
        private static DimOverrule myDimOverrule = null;

        [CommandMethod("DimOVERRULE")]
        public static void DimOverruleCommand()
        {
            if (myDimOverrule == null)
            {
                myDimOverrule = new DimOverrule();
                Overrule.AddOverrule(RXObject.GetClass(typeof(Dimension)), myDimOverrule, false);
                //Overrule.Overruling = true;
            }
            else
            {
                // Toggle Overruling on/off
                Overrule.Overruling ^= true;
            }

            Application.DocumentManager.MdiActiveDocument.Editor.Regen();
        }


        public static string GetDimTextExponent(Dimension dim)
        {
            Type dimType = dim.GetType();

            // Es werden nur Längenmaße überschrieben
            if ((dimType == typeof(LineAngularDimension2)) | (dimType == typeof(OrdinateDimension)) | (dimType == typeof(Point3AngularDimension)))
                return null;

            // Wenn keine Nachkommastellen vorhanden sind, können wir auch abbrechen
            if (dim.Dimdec == 0)
                return null;

            string dimText = dim.DimensionText;

            // Ist der Bemaßungstext überschrieben und beinhaltet kein Maß, können wir abbrechen
            if (dimText != "")
            {
                if (!dimText.Contains("<>"))
                    return null;
            }


            double dimMeasurement = dim.Measurement;
            double dimRound = dim.Dimrnd;
            int dimDec = dim.Dimdec;

            if (dimRound != 0)
                dimMeasurement = Utils.MyUtils.RoundedValue(dimMeasurement, dimRound);

            // Wir setzten den Text für die Bemaßungslänge
            string dimTextMeasurement = dimMeasurement.ToString("F" + dimDec.ToString());

            // Wenn die Zeichnung in Metern un der Dimsclae 1 ist, das Maß ebenfalls kleiner als 1 ist, ...
            if (HostApplicationServices.WorkingDatabase.Insunits == UnitsValue.Meters & dim.Dimscale == 1 & dimMeasurement < 1)
            {
                // ... wandeln wir in cm um und reduzieren die Nachkommastellen.
                dimDec -= 2;
                dimTextMeasurement = (dimMeasurement * 100).ToString("F" + dimDec.ToString());
            }

            StringBuilder sbDim = new StringBuilder(dimTextMeasurement);

            if (dimTextMeasurement.EndsWith("0"))
            {
                if (dimDec < 2)
                    sbDim.Remove(sbDim.Length - 2, 2);
                else
                    sbDim.Remove(sbDim.Length - 1, 1);
            }
            else
            {
                if (dimDec < 2)
                    sbDim.Remove(sbDim.Length - 2, 1);

                sbDim.Insert(sbDim.Length - 1, @"{\A1;\H0.7x;\S");
                sbDim.Insert(sbDim.Length, @"^;}");
            }

            if (dim.Prefix != "")
                sbDim.Insert(0, dim.Prefix);
            if (dim.Suffix != "")
                sbDim.Insert(sbDim.Length, dim.Suffix);
            if (dimText != "")
            {
                int Wo = dimText.IndexOf("<>");
                if (Wo > 0)
                    sbDim.Insert(0, dimText.Substring(0, Wo));
                if (Wo < dimText.Length - 2)
                    sbDim.Insert(sbDim.Length, dimText.Substring(Wo + 2));
            }


            return sbDim.ToString();
        }

    }
}


------------------
Roland Feletic
PCD ZT-GmbH

Acad 2010-deutsch Update 1, Express Tools, Advantage Pack 1
3ds Max 2010
WinXP-Professional
HP Workstation xw4400, 3GB
Quadro FX1500

[Diese Nachricht wurde von RoSiNiNo am 20. Mrz. 2010 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 20. Mrz. 2010 18:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

was soll die Funktion:

Utils.MyUtils.RoundedValue(dimMeasurement, dimRound)

liefern? Normale Rundung oder steckt da was spezielles dahinter?

- alfred -

------------------
www.hollaus.at

RoSiNiNo
Mitglied
Konstrukteur


Sehen Sie sich das Profil von RoSiNiNo an!   Senden Sie eine Private Message an RoSiNiNo  Schreiben Sie einen Gästebucheintrag für RoSiNiNo

Beiträge: 1126
Registriert: 09.10.2002

Revit Structure 2011
Acad 2011-deutsch, Express Tools
3ds Max 2011
Win 7-Professional
HP Workstation Z400, 6GB
GeForce GTX 470

erstellt am: 20. Mrz. 2010 18:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Oh, die hab ich vergessen, stell den Code gleich nochmal rein.

------------------
Roland Feletic
PCD ZT-GmbH

Acad 2010-deutsch Update 1, Express Tools, Advantage Pack 1
3ds Max 2010
WinXP-Professional
HP Workstation xw4400, 3GB
Quadro FX1500

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 20. Mrz. 2010 18:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

und gleich noch was, die Function 'GetDimTextExponent' wird nirgends aufgerufen, damit steh ich leider wieder bei dem Punkt, es wird ein Returnwert aus der Function geliefert, aber wo/wie wird diese verwendet?

Oder bin ich ein klein wenig blind am Wochenende     

[EDIT] ==> ich bin blind und hab meine Suchfunktion falsch eingestellt gehabt, sorry  [/EDIT]

- alfred -

------------------
www.hollaus.at

RoSiNiNo
Mitglied
Konstrukteur


Sehen Sie sich das Profil von RoSiNiNo an!   Senden Sie eine Private Message an RoSiNiNo  Schreiben Sie einen Gästebucheintrag für RoSiNiNo

Beiträge: 1126
Registriert: 09.10.2002

Revit Structure 2011
Acad 2011-deutsch, Express Tools
3ds Max 2011
Win 7-Professional
HP Workstation Z400, 6GB
GeForce GTX 470

erstellt am: 20. Mrz. 2010 18:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hoffe nun ist alles dran.
Code:
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.GraphicsInterface;
using Autodesk.AutoCAD.Runtime;
using System.Text;
using System;

[assembly: CommandClass(typeof(RSNNAcadApp.DimensionCommands.Hochzahlen))]
namespace RSNNAcadApp.DimensionCommands
{
    internal class DimOverrule : DrawableOverrule
    {

        public DimOverrule()
        {
            Overrule.Overruling = true;  // if you don't do this, nothing works
        }

        public override bool WorldDraw(Drawable drawable, WorldDraw wd)
        {
            bool result = true;
            Dimension dim = drawable as Dimension;
            if (dim != null)
            {
                using (Dimension clone = (Dimension)dim.Clone())
                {
                    clone.DimensionText = Hochzahlen.GetDimTextExponent(clone);
                    //clone.Prefix = "Prefix Test ";

                    result &= base.WorldDraw(clone, wd);
                }
            }
            else
                result &= base.WorldDraw(drawable, wd);
            return result;
        }
    }


    internal class CircleOverrule : DrawableOverrule
    {

        public CircleOverrule()
        {
            Overrule.Overruling = true;  // if you don't do this, nothing works
        }

        public override bool WorldDraw(Drawable drawable, WorldDraw wd)
        {
            bool result = true;
            Circle dim = drawable as Circle;
            if (dim != null)
            {
                using (Circle clone = (Circle)dim.Clone())
                {
                    //clone.DimensionText = ChangeStyle.GetDimTextExponent(clone);
                    clone.Radius = 10;

                    result &= base.WorldDraw(clone, wd);
                }
            }
            else
                result &= base.WorldDraw(drawable, wd);
            return result;
        }
    }


    class Hochzahlen
    {
        private static CircleOverrule myCircOverrule = null;

        [CommandMethod("CircOVERRULE")]
        public static void OverruleCommand()
        {
            if (myCircOverrule == null)
            {
                myCircOverrule = new CircleOverrule();
                Overrule.AddOverrule(RXObject.GetClass(typeof(Circle)), myCircOverrule, false);
                //Overrule.Overruling = true;
            }
            else
            {
                // Toggle Overruling on/off
                Overrule.Overruling ^= true;
            }

            Application.DocumentManager.MdiActiveDocument.Editor.Regen();
        }

     
     
        private static DimOverrule myDimOverrule = null;

        [CommandMethod("DimOVERRULE")]
        public static void DimOverruleCommand()
        {
            if (myDimOverrule == null)
            {
                myDimOverrule = new DimOverrule();
                Overrule.AddOverrule(RXObject.GetClass(typeof(Dimension)), myDimOverrule, false);
                //Overrule.Overruling = true;
            }
            else
            {
                // Toggle Overruling on/off
                Overrule.Overruling ^= true;
            }

            Application.DocumentManager.MdiActiveDocument.Editor.Regen();
        }


        public static string GetDimTextExponent(Dimension dim)
        {
            Type dimType = dim.GetType();

            // Es werden nur Längenmaße überschrieben
            if ((dimType == typeof(LineAngularDimension2)) | (dimType == typeof(OrdinateDimension)) | (dimType == typeof(Point3AngularDimension)))
                return null;

            // Wenn keine Nachkommastellen vorhanden sind, können wir auch abbrechen
            if (dim.Dimdec == 0)
                return null;

            string dimText = dim.DimensionText;

            // Ist der Bemaßungstext überschrieben und beinhaltet kein Maß, können wir abbrechen
            if (dimText != "")
            {
                if (!dimText.Contains("<>"))
                    return null;
            }


            double dimMeasurement = dim.Measurement;
            double dimRound = dim.Dimrnd;
            int dimDec = dim.Dimdec;

            if (dimRound != 0)
                dimMeasurement = RoundedValue(dimMeasurement, dimRound);

            // Wir setzten den Text für die Bemaßungslänge
            string dimTextMeasurement = dimMeasurement.ToString("F" + dimDec.ToString());

            // Wenn die Zeichnung in Metern un der Dimsclae 1 ist, das Maß ebenfalls kleiner als 1 ist, ...
            if (HostApplicationServices.WorkingDatabase.Insunits == UnitsValue.Meters & dim.Dimscale == 1 & dimMeasurement < 1)
            {
                // ... wandeln wir in cm um und reduzieren die Nachkommastellen.
                dimDec -= 2;
                dimTextMeasurement = (dimMeasurement * 100).ToString("F" + dimDec.ToString());
            }

            StringBuilder sbDim = new StringBuilder(dimTextMeasurement);

            if (dimTextMeasurement.EndsWith("0"))
            {
                if (dimDec < 2)
                    sbDim.Remove(sbDim.Length - 2, 2);
                else
                    sbDim.Remove(sbDim.Length - 1, 1);
            }
            else
            {
                if (dimDec < 2)
                    sbDim.Remove(sbDim.Length - 2, 1);

                sbDim.Insert(sbDim.Length - 1, @"{\A1;\H0.7x;\S");
                sbDim.Insert(sbDim.Length, @"^;}");
            }

            if (dim.Prefix != "")
                sbDim.Insert(0, dim.Prefix);
            if (dim.Suffix != "")
                sbDim.Insert(sbDim.Length, dim.Suffix);
            if (dimText != "")
            {
                int Wo = dimText.IndexOf("<>");
                if (Wo > 0)
                    sbDim.Insert(0, dimText.Substring(0, Wo));
                if (Wo < dimText.Length - 2)
                    sbDim.Insert(sbDim.Length, dimText.Substring(Wo + 2));
            }


            return sbDim.ToString();
        }

        public static double RoundedValue(double value, double roundvalue)
        {
            return Math.Floor((value + roundvalue / 2) / roundvalue) * roundvalue;
        }
    }
}


------------------
Roland Feletic
PCD ZT-GmbH

Acad 2010-deutsch Update 1, Express Tools, Advantage Pack 1
3ds Max 2010
WinXP-Professional
HP Workstation xw4400, 3GB
Quadro FX1500

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 20. Mrz. 2010 19:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat


xx_ROSININO_DimOverride_2010_AN01.zip

 
Hi,

solls so aussehen?

dann hier die Zeichnung von mir (Deine konnt ich nicht, siehe PM) mit dem Ergebnis Deines Overrides.
Ich tu mir auch ein wenig schwer, denn ich weiss nicht, was das gewünschte Ziel ist. Mit Deinem Code seh ich zwar jetzt hochgestellte Bemassungszahlen, aber nicht, ob das gemäß Deinem Wunsch ist oder nicht.

- alfred -

------------------
www.hollaus.at


Ex-Mitglied

erstellt am: 20. Mrz. 2010 19:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat


20100320_ROSININO.zip

 
Hi,

dann auch noch das gesamte Projekt samt kompilierter dll in Debug-Verzeichnis

- alfred -

------------------
www.hollaus.at

RoSiNiNo
Mitglied
Konstrukteur


Sehen Sie sich das Profil von RoSiNiNo an!   Senden Sie eine Private Message an RoSiNiNo  Schreiben Sie einen Gästebucheintrag für RoSiNiNo

Beiträge: 1126
Registriert: 09.10.2002

Revit Structure 2011
Acad 2011-deutsch, Express Tools
3ds Max 2011
Win 7-Professional
HP Workstation Z400, 6GB
GeForce GTX 470

erstellt am: 20. Mrz. 2010 20:02    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Genau so soll es aussehen.
Danke dir. Jetzt hoffe ich das ich es auch noch so hinbekommen.
Zur Erklärung: das Programm setzt einfach die letzte Nachkommazahl als Hochzahl. Bei drei Nachkommastellen wird die letzte Nachkommastelle einfach als Hochzahl geschrieben. Wenn die Zeichnung in Metern ist und der Wert unter 1.00m ist, dann wird der Wert in Zentimetern dargestellt (mit einer Hochzahl als letzte Zahl). Das ganze funktioniert dann ähnlich wie die Bemaßung von Soficad.

------------------
Roland Feletic
PCD ZT-GmbH

Acad 2010-deutsch Update 1, Express Tools, Advantage Pack 1
3ds Max 2010
WinXP-Professional
HP Workstation xw4400, 3GB
Quadro FX1500

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 20. Mrz. 2010 20:06    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

>> Jetzt hoffe ich das ich es auch noch so hinbekommen

Oops, Du hast es schon hinbekommen     Denn es ist genau Dein Code, unverändert (ausser ev. die Projekteinstellungen, aber da geht nicht wirklich was schief, oder vielleicht die Zeichnungseinstellungen, da ja schon viele Einschränkungen in der Hochstellungs-Function enthalten sind)!

- alfred -

------------------
www.hollaus.at

RoSiNiNo
Mitglied
Konstrukteur


Sehen Sie sich das Profil von RoSiNiNo an!   Senden Sie eine Private Message an RoSiNiNo  Schreiben Sie einen Gästebucheintrag für RoSiNiNo

Beiträge: 1126
Registriert: 09.10.2002

Revit Structure 2011
Acad 2011-deutsch, Express Tools
3ds Max 2011
Win 7-Professional
HP Workstation Z400, 6GB
GeForce GTX 470

erstellt am: 20. Mrz. 2010 21:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ja, bei dir geht er ja. Nur bei mir muss ich das ganze noch zum laufen brringen. Auch deine dll geht bei mir nicht, leider.
Ich danke dir für deine Bemühungen.

------------------
Roland Feletic
PCD ZT-GmbH

Acad 2010-deutsch Update 1, Express Tools, Advantage Pack 1
3ds Max 2010
WinXP-Professional
HP Workstation xw4400, 3GB
Quadro FX1500

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

RoSiNiNo
Mitglied
Konstrukteur


Sehen Sie sich das Profil von RoSiNiNo an!   Senden Sie eine Private Message an RoSiNiNo  Schreiben Sie einen Gästebucheintrag für RoSiNiNo

Beiträge: 1126
Registriert: 09.10.2002

Revit Structure 2011
Acad 2011-deutsch, Express Tools
3ds Max 2011
Win 7-Professional
HP Workstation Z400, 6GB
GeForce GTX 470

erstellt am: 22. Mrz. 2010 08:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Falls es jemand anderen interessiert. Anscheinend funktioniert das Ganze nur bei Bemaßungen die nicht Beschriftungsobjekte sind. Vielleicht kommt ja einer von euch dahinter wie es bei diesen machbar wäre.

------------------
Roland Feletic
PCD ZT-GmbH

Acad 2010-deutsch Update 1, Express Tools, Advantage Pack 1
3ds Max 2010
WinXP-Professional
HP Workstation xw4400, 3GB
Quadro FX1500

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 22. Mrz. 2010 11:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

vielleich hilft >>>dieses<<< weiter, da war auch die Einstellung der 'Beschriftung' das auslösende Problem.

- alfred -

------------------
www.hollaus.at

RoSiNiNo
Mitglied
Konstrukteur


Sehen Sie sich das Profil von RoSiNiNo an!   Senden Sie eine Private Message an RoSiNiNo  Schreiben Sie einen Gästebucheintrag für RoSiNiNo

Beiträge: 1126
Registriert: 09.10.2002

Revit Structure 2011
Acad 2011-deutsch, Express Tools
3ds Max 2011
Win 7-Professional
HP Workstation Z400, 6GB
GeForce GTX 470

erstellt am: 22. Mrz. 2010 14:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Das könnte sein. Ich habe es allerdings auch einmal mit DeepClone versucht. Damit sollte doch alles, auch die "Beschriftung" mitkopiert werden, oder. Ich werde es trotzdem einmal testen.
Danke erst mal.

------------------
Roland Feletic
PCD ZT-GmbH

Acad 2010-deutsch Update 1, Express Tools, Advantage Pack 1
3ds Max 2010
WinXP-Professional
HP Workstation xw4400, 3GB
Quadro FX1500

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz