public static double GetPipeKOd(Entity ent, PipeSeriesEnum pipeSeries)
        {
            PipeTypeEnum   pipeType   = GetPipeType(ent);
            PipeSystemEnum pipeSystem = GetPipeSystem(ent);

            switch (pipeType)
            {
            case PipeTypeEnum.Ukendt:
                return(0.0);

            case PipeTypeEnum.Twin:
                switch (pipeSystem)
                {
                case PipeSystemEnum.Ukendt:
                    return(0.0);

                case PipeSystemEnum.Stål:
                    return(GetTwinPipeKOd(ent, pipeSeries));

                case PipeSystemEnum.Kobberflex:
                    return(GetCuTwinPipeKOd(ent, pipeSeries));

                case PipeSystemEnum.AluPex:
                    return(GetAluPexTwinPipeKOd(ent, pipeSeries));

                default:
                    return(0.0);
                }

            case PipeTypeEnum.Frem:
            case PipeTypeEnum.Retur:
                switch (pipeSystem)
                {
                case PipeSystemEnum.Ukendt:
                    return(0.0);

                case PipeSystemEnum.Stål:
                    return(GetBondedPipeKOd(ent, pipeSeries));

                case PipeSystemEnum.Kobberflex:
                    return(GetCuEnkeltPipeKOd(ent, pipeSeries));

                case PipeSystemEnum.AluPex:
                    return(GetAluPexEnkeltPipeKOd(ent, pipeSeries));

                default:
                    return(0.0);
                }

            default:
                return(0.0);
            }
        }
        public static double GetPipeOd(Entity ent)
        {
            int            dn     = GetPipeDN(ent);
            PipeSystemEnum system = GetPipeSystem(ent);

            switch (system)
            {
            case PipeSystemEnum.Ukendt:
                return(0);

            case PipeSystemEnum.Stål:
                if (OdsSteel.ContainsKey(dn))
                {
                    return(OdsSteel[dn]);
                }
                else
                {
                    return(0);
                }

            case PipeSystemEnum.Kobberflex:
                if (OdsCu.ContainsKey(dn))
                {
                    return(OdsCu[dn]);
                }
                else
                {
                    return(0);
                }

            case PipeSystemEnum.AluPex:
                if (OdsAluPex.ContainsKey(dn))
                {
                    return(OdsAluPex[dn]);
                }
                else
                {
                    return(0);
                }

            default:
                return(0);
            }
        }
        public static bool IsInSituBent(Entity ent)
        {
            PipeTypeEnum   type   = GetPipeType(ent);
            PipeSystemEnum system = GetPipeSystem(ent);

            //Flexrør er altid insitu bukkede
            if (
                system == PipeSystemEnum.Kobberflex ||
                system == PipeSystemEnum.AluPex
                )
            {
                return(true);
            }

            switch (type)
            {
            case PipeTypeEnum.Ukendt:
                throw new Exception(
                          $"IsInSituBent -> Entity handle {ent.Handle} has invalid layer!");

            case PipeTypeEnum.Twin:
                if (GetPipeDN(ent) < 65)
                {
                    return(true);
                }
                break;

            case PipeTypeEnum.Frem:
            case PipeTypeEnum.Retur:
                if (GetPipeDN(ent) < 100)
                {
                    return(true);
                }
                break;

            default:
                throw new Exception(
                          $"IsInSituBent -> Entity handle {ent.Handle} has invalid layer!");
            }
            return(false);
        }
        public static PipeSeriesEnum GetPipeSeriesV2(Entity ent)
        {
            double         realKod    = ((Polyline)ent).ConstantWidth;
            PipeSystemEnum pipeSystem = GetPipeSystem(ent);
            double         kod;

            switch (pipeSystem)
            {
            case PipeSystemEnum.Ukendt:
                break;

            case PipeSystemEnum.Stål:
                kod = GetPipeKOd(ent, PipeSeriesEnum.S3) / 1000;
                if (Equalz(kod, realKod, 0.0001))
                {
                    return(PipeSeriesEnum.S3);
                }
                kod = GetPipeKOd(ent, PipeSeriesEnum.S2) / 1000;
                if (Equalz(kod, realKod, 0.0001))
                {
                    return(PipeSeriesEnum.S2);
                }
                kod = GetPipeKOd(ent, PipeSeriesEnum.S1) / 1000;
                if (Equalz(kod, realKod, 0.0001))
                {
                    return(PipeSeriesEnum.S1);
                }
                break;

            case PipeSystemEnum.Kobberflex:
            case PipeSystemEnum.AluPex:
                kod = GetPipeKOd(ent, PipeSeriesEnum.S2) / 1000;
                if (Equalz(kod, realKod, 0.0001))
                {
                    return(PipeSeriesEnum.S2);
                }
                kod = GetPipeKOd(ent, PipeSeriesEnum.S1) / 1000;
                if (Equalz(kod, realKod, 0.0001))
                {
                    return(PipeSeriesEnum.S1);
                }
                break;

            default:
                break;
            }

            bool Equalz(double x, double y, double eps)
            {
                if (Math.Abs(x - y) < eps)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }

            return(PipeSeriesEnum.Undefined);
        }
        public static string GetLabel(Entity ent)
        {
            //Test to see if the polyline resides in the correct layer
            int DN = GetPipeDN(ent);

            if (DN == 999)
            {
                prdDbg("Kunne ikke finde dimension på valgte rør! Kontroller lag!");
                return("");
            }
            var type = GetPipeType(ent);

            if (type == PipeTypeEnum.Ukendt)
            {
                prdDbg("Kunne ikke finde systemet på valgte rør! Kontroller lag!");
                return("");
            }
            double od = GetPipeOd(ent);

            if (od < 1.0)
            {
                prdDbg("Kunne ikke finde rørdimensionen på valgte rør! Kontroller lag!");
                return("");
            }
            PipeSystemEnum system = GetPipeSystem(ent);

            if (system == PipeSystemEnum.Ukendt)
            {
                prdDbg("Kunne ikke finde system på valgte rør! Kontroller lag!");
                return("");
            }

            //Build label
            string         labelText = "";
            double         kOd       = 0;
            PipeSeriesEnum series    = GetPipeSeriesV2(ent);

            kOd = GetPipeKOd(ent, series);
            if (kOd < 1.0)
            {
                prdDbg("Kunne ikke finde kappedimensionen på valgte rør! Kontroller lag!");
                return("");
            }

            switch (type)
            {
            case PipeTypeEnum.Twin:
                switch (system)
                {
                case PipeSystemEnum.Stål:
                    labelText = $"DN{DN}-ø{od.ToString("N1")}+ø{od.ToString("N1")}/{kOd.ToString("N0")}";
                    break;

                case PipeSystemEnum.Kobberflex:
                    labelText = $"CU{DN}-ø{od.ToString("N0")}+ø{od.ToString("N0")}/{kOd.ToString("N0")}";
                    break;

                case PipeSystemEnum.AluPex:
                    labelText = $"AluPex{DN}-ø{od.ToString("N0")}+ø{od.ToString("N0")}/{kOd.ToString("N0")}";
                    break;

                default:
                    break;
                }
                break;

            case PipeTypeEnum.Frem:
            case PipeTypeEnum.Retur:
                switch (system)
                {
                case PipeSystemEnum.Stål:
                    labelText = $"DN{DN}-ø{od.ToString("N1")}/{kOd.ToString("N0")}";
                    break;

                case PipeSystemEnum.Kobberflex:
                    labelText = $"CU{DN}-ø{od.ToString("N0")}/{kOd.ToString("N0")}";
                    break;

                case PipeSystemEnum.AluPex:
                    labelText = $"AluPex{DN}-ø{od.ToString("N0")}/{kOd.ToString("N0")}";
                    break;

                default:
                    break;
                }
                break;

            default:
                break;
            }
            return(labelText);
        }
        public static double GetPipeMinElasticRadius(Entity ent, bool considerInSituBending = true)
        {
            if (considerInSituBending && IsInSituBent(ent))
            {
                return(0);
            }

            Dictionary <int, double> cuS1Enkelt = new Dictionary <int, double>
            {
                { 15, 0.6 },
                { 18, 0.7 },
                { 22, 0.8 },
                { 28, 0.8 },
            };
            Dictionary <int, double> cuS2Enkelt = new Dictionary <int, double>
            {
                { 15, 0.8 },
                { 18, 0.8 },
                { 22, 0.8 },
                { 28, 1.0 },
            };
            Dictionary <int, double> cuS1Twin = new Dictionary <int, double>
            {
                { 22, 0.9 },
                { 28, 0.9 },
            };
            Dictionary <int, double> cuS2Twin = new Dictionary <int, double>
            {
                { 22, 1.1 },
                { 28, 1.1 },
            };
            Dictionary <int, double> aluPexS1Enkelt = new Dictionary <int, double>
            {
                { 20, 0.7 },
                { 25, 0.7 },
                { 32, 0.7 },
            };
            Dictionary <int, double> aluPexS2Enkelt = new Dictionary <int, double>
            {
                { 20, 0.7 },
                { 32, 0.9 },
            };
            Dictionary <int, double> aluPexS1Twin = new Dictionary <int, double>
            {
                { 20, 0.9 },
                { 25, 0.9 },
                { 32, 1.1 },
            };
            Dictionary <int, double> aluPexS2Twin = new Dictionary <int, double>
            {
                { 16, 0.9 },
                { 20, 1.0 },
                { 25, 1.0 },
                { 32, 1.5 },
            };
            Dictionary <int, double> steelRadii = new Dictionary <int, double>
            {
                { 20, 13.0 },
                { 25, 17.0 },
                { 32, 21.0 },
                { 40, 24.0 },
                { 50, 30.0 },
                { 65, 38.0 },
                { 80, 44.0 },
                { 100, 57.0 },
                { 125, 70.0 },
                { 150, 84.0 },
                { 200, 110.0 },
                { 250, 137.0 },
                { 300, 162.0 },
                { 350, 178.0 },
                { 400, 203.0 },
                { 999, 0.0 }
            };

            PipeTypeEnum   pipeType   = GetPipeType(ent);
            PipeSeriesEnum pipeSeries = GetPipeSeriesV2(ent);
            PipeSystemEnum pipeSystem = GetPipeSystem(ent);

            switch (pipeSystem)
            {
            case PipeSystemEnum.Ukendt:
                return(0);

            case PipeSystemEnum.Stål:
                return(steelRadii[GetPipeDN(ent)]);

            case PipeSystemEnum.Kobberflex:
                switch (pipeType)
                {
                case PipeTypeEnum.Ukendt:
                    return(0);

                case PipeTypeEnum.Twin:
                    switch (pipeSeries)
                    {
                    case PipeSeriesEnum.Undefined:
                        return(0);

                    case PipeSeriesEnum.S1:
                        return(cuS1Twin[GetPipeDN(ent)]);

                    case PipeSeriesEnum.S2:
                        return(cuS2Twin[GetPipeDN(ent)]);

                    case PipeSeriesEnum.S3:
                        return(0);

                    default:
                        return(0);
                    }

                case PipeTypeEnum.Frem:
                case PipeTypeEnum.Retur:
                    switch (pipeSeries)
                    {
                    case PipeSeriesEnum.Undefined:
                        return(0);

                    case PipeSeriesEnum.S1:
                        return(cuS1Enkelt[GetPipeDN(ent)]);

                    case PipeSeriesEnum.S2:
                        return(cuS2Enkelt[GetPipeDN(ent)]);

                    case PipeSeriesEnum.S3:
                        return(0);

                    default:
                        return(0);
                    }

                default:
                    return(0);
                }

            case PipeSystemEnum.AluPex:
                switch (pipeType)
                {
                case PipeTypeEnum.Ukendt:
                    return(0);

                case PipeTypeEnum.Twin:
                    switch (pipeSeries)
                    {
                    case PipeSeriesEnum.Undefined:
                        return(0);

                    case PipeSeriesEnum.S1:
                        return(aluPexS1Twin[GetPipeDN(ent)]);

                    case PipeSeriesEnum.S2:
                        return(aluPexS2Twin[GetPipeDN(ent)]);

                    case PipeSeriesEnum.S3:
                        return(0);

                    default:
                        return(0);
                    }

                case PipeTypeEnum.Frem:
                case PipeTypeEnum.Retur:
                    switch (pipeSeries)
                    {
                    case PipeSeriesEnum.Undefined:
                        return(0);

                    case PipeSeriesEnum.S1:
                        return(aluPexS1Enkelt[GetPipeDN(ent)]);

                    case PipeSeriesEnum.S2:
                        return(aluPexS2Enkelt[GetPipeDN(ent)]);

                    case PipeSeriesEnum.S3:
                        return(0);

                    default:
                        return(0);
                    }

                default:
                    return(0);
                }

            default:
                return(0);
            }
        }
Exemple #7
0
        internal static void UpdateWidths()
        {
            DocumentCollection docCol  = Application.DocumentManager;
            Database           localDb = docCol.MdiActiveDocument.Database;
            Document           doc     = docCol.MdiActiveDocument;
            Editor             editor  = docCol.MdiActiveDocument.Editor;

            using (DocumentLock docLock = doc.LockDocument())
                using (Transaction tx = localDb.TransactionManager.StartTransaction())
                {
                    try
                    {
                        HashSet <Polyline> pipes = localDb.GetFjvPipes(tx);
                        foreach (Polyline pipe in pipes)
                        {
                            PipeSystemEnum system = GetPipeSystem(pipe);
                            PipeSeriesEnum tempSeries;
                            //Work around the fact that flexible pipes only have 2 series
                            switch (system)
                            {
                            case PipeSystemEnum.Ukendt:
                                tempSeries = CurrentSeries;
                                break;

                            case PipeSystemEnum.Stål:
                                tempSeries = CurrentSeries;
                                break;

                            case PipeSystemEnum.Kobberflex:
                            case PipeSystemEnum.AluPex:
                                if (CurrentSeries == PipeSeriesEnum.S3)
                                {
                                    tempSeries = PipeSeriesEnum.S2;
                                }
                                else
                                {
                                    tempSeries = CurrentSeries;
                                }
                                break;

                            default:
                                tempSeries = CurrentSeries;
                                break;
                            }
                            double kappeOd = GetPipeKOd(pipe, tempSeries);
                            if (kappeOd < 0.1)
                            {
                                continue;
                            }
                            pipe.CheckOrOpenForWrite();
                            pipe.ConstantWidth = kappeOd / 1000;
                        }

                        tx.Commit();
                    }
                    catch (System.Exception e)
                    {
                        prdDbg(e.ToString() + "\n");
                        tx.Abort();
                        return;
                    }
                }
        }