Visar inlägg med etikett Surface. Visa alla inlägg
Visar inlägg med etikett Surface. Visa alla inlägg

måndag 7 oktober 2019

What the eff eller Extract en halvmeters Solid from Surface

Ibland stöter man på buggar som bara är löjliga. Detta är en sådan.

Jag har tidigare noterat att när man Exporterar Solider från Surfaces så kan man inte skriva punkt som decimalavgränsare när man vill extrahera en solid med specifikt djup. Men du kan skriva ett kommatecken så jag har skrivit kommatecken och gått vidare.



Idag hade jag en kund som hade detta problemet och sa att det fungerar i alla fall inte när man skriver in kommatecken, soliden som ska vara 0.4 blir 0! What gives?

Jag fick granska lite och ja, extraheringen tog ingen hänsyn till decimalen. Om jag skrev in 2,4 så blev soliden 2 meter tjock. Ok, Civil 3D bugg.

Lite googling vidare gav mig tipset att skriva 2.4 (med punkt som decimalavgränsare) i ett annat dokument och klistra in 2.4 i Extract Solids-dialogen istället för att skriva in det. Och 'lo and behold - det fungerade.

(Valfri Facepalm-gif här)

Så lösningen är alltså, öppna Notepad, skriv ditt värde med punkt som decimalavgränsare, kopiera texten, högerklicka i Depth-rutan och klistra in värdet, och klicka på Create Solid så får du vilken solidtjocklek du vill. Working as Intended!


torsdag 27 juni 2019

Hide and Show eller Hide and Seek

Surface-redigering kan vara himla roligt eller en riktig PITA. Men oavsett på vilken sida du faller så kommer du förmodligen alltid behöva hantera det.

En specifik surface-metod som jag ska beskriva nedan är när man vill ha en surface i delar, alltså en yta som hänger ihop som ett objekt, men består av "öar". 

När vill vi ha det här då?

Ett exempel är när man har underlag från en bergsinmätning, då vill man ha en surface som bara finns där inmätningspunkten finns, för utanför det vet man inte var berget finns.
Ett annat exempel är om man gör en projektering av ett större område där man vill ha området uppdelat i olika ytor beroende på beläggningstyp (asfalt, gräs, plattor osv) men de olika beläggningarna är uppdelade i "öar". Hantering och framförallt volymberäkning är enklast om ytan är ett objekt i alla fall.

För att få till det här så gör man en en Hide-boundary och flera Show-boundaries.

Steg ett är att göra själva ytan, den görs på vanligt sätt, beroende på vilken typ av underlag du har.

Sedan ritas Hide-boundary, det ska vara en sluten polylinje som ligger utanför hela ytan så att den döljer hela ytan. Lägg till linjen som en Hide

Sedan skapas slutna polylinjer, eller cirklar som jag har gjort nedan, för varje "ö" och dessa linjer/cirklar läggs sedan till som Show-boundaries.




Slutresultatet blir en surface som består av flera områden, och därifrån kan du beräkna volym mellan ytor och bara få volym där de överlappar med öarna, och när du visar den upphackade ytan i profilen så visas den bara där den finns. 


tisdag 22 januari 2019

Surface Styles eller En EXAKT höjd? Du kan inte visa en EXAKT höjd, det förstår du väl...

Dagens inlägg, första för i år faktiskt, sponsras av Skrik och Panik. Mest Panik, men Skrik kommer som en nära tvåa. Men mitt i all panik så fick jag en fråga från en kund som hade redigerat en surface style men surfacen visade inte alla nivåkurvor på alla ställen. Mycket störigt.

Innan jag förklara lösningen så tänkte jag dra lite kort om Surface Styles.

Första att tänka på är att det faktiska utseendet på ytan har inget med stylen att göra. Ytan är en triangelmodell, stylen som du har på din yta är bara ett visningsläge. Ytan består av trianglar, hur du än gör (vi ignorerar rutnätsmodeller just nu). Så Surface Style = Visningsläge.

Styles som visar Nivåkurvor lägger ut linjer på din yta där den når vissa nivåer. Linjerna kan alltså ligga mitt i trianglar, linjerna är bara en visualisering av ytan. Du kan extrahera dessa linjer om du skulle vilja, men när du enbart har de i din style så är linjerna inte individuella linjer, du kan inte dra i dessa linjer för att förändra din yta.

Hur tätt linjerna visas, och hur de ser ut bestäms i Surface Stylen. (Här får jag en deja vu och inser att jag beskrev hur Contour Interval fungerar i senaste inlägget)

Du kan alltså ställa in vilka intervall du vill ha på Contour-fliken och sätta färger på dessa contours på Display-fliken. Det var detta min kund hade gjort, men när hen sparade sin style och gick tillbaka till ritningen och syntes inte alla Major Interval höjderna.

Förklaringen blev, i sann Civil 3D-anda: höjden var för exakt.

Ytan var skapad av featurelines och den högsta featurelinen låg på exakt 17.5 meter - och Major Interval var på 0.5m så ytan borde ha en Major Interval som högst punkt. Men så exakt fungerade det inte. När vi ändrade den högsta Featurelinen till 17.501 - då kom det fram en Major Interval-kurva på 17.5.

Sedan finjusterade vi lösningen till att lägga till en linje strax ovanför 17.5-linjen som låg på 17.501 för att få nivåkurvan på rätt ställe i alla fall.

Det är såna här fel som jag blir glad av att lösa, men så är jag kanske lite konstig också :)


tisdag 18 december 2018

User Contours eller Du vill veta var din yta når +5.3m? Varför?

Ett litet tips idag, det är ju vecka-före-julvecka så det är inte det allra högsta tempot för mig. Jag inser att det troligen är panik för de flesta av mina kunder (som det brukar vara sista veckan innan ledighet) men ju mer panik det är hos er, dessto lugnare är det hos mig. Jag klurar just nu på en assembly med mittremsa - men det är ett annan inlägg. Idag tänkte jag på User Contours.

Först lite kort angående Contours eller nivåkurvor. Om du ser nivåkurvorna på din surface eller inte beror på vilken stil du har, och vad den stilen säger ska visas. På Display-fliken i Surface Style ställer du inte om nivåkurvorna ska visas eller inte. Intervallet för nivåkurvorna ställer du in på på Contours-fliken under Contour Intervals. Tänk på att Minor Interval måste vara en faktor av Major Interval - alltså om Minor Interval är 3m så måste Major Interval vara dividerbart med 3. Du kan inte göra fel här, om du skriver in ett värde som inte fungerar så kommer Civil 3D skriva ett annat värde åt dig.



Liten notering här, detta gäller generellt för alla styles. Du kan släcka objekt i styles utan att släcka lagret, men om du släcker lagret, då släcker du objektet också. Här får man bestämma sig lite hur man ska göra, vill man jobba mycket med lager, då har man "mycket" tänt i styles och använder lager för att släcka och tända objekt. I mitt tycke så har man då missat styrkan i Civil 3Ds styles. Min rekommendation är att ha alla lager tända och ha styles för alla olika visnings-lägen. Det är alltid enklare att byta style på just de objekt du vill visa/släcka än att hålla på med lager.

Men tillbaka till contours. I Stylen så ändrar du alla contours, men om du vill se en specifik höjd, kan man göra det? Såklart! (Annars skulle jag inte nämna det...)

Det första du behöver göra är att se till att User Contours är tänt i Stylen. Så i den Surface style som du vill använda, se till att User Contours är tänt på Display-fliken (och ligger på ett lager som du vill ha).

Sedan ska du använda en analys-metod för att ta fram en enskild nivåkurva. Analyser gör du i Surface Properties, på Analysis-fliken. Välj User-defined contours högst upp, välj antalet och klicka på Run Analysis.


Sist får du skriva in vilken Elevation du vill ha din(a) nivåkurva på, och klicka Apply. Nu ska du se en eller flera linjer i din surface där din angivna elevation finns. 

Vad finns det för användningsområde för detta? 
Förutom att det ibland kan vara bra att se en specifik nivå på sin surface så visar jag oftast denna metoden när jag pratar schakt och fyll-planer och får frågan: Hur kan jag få fram gränsen mellan schakt och fyll?

Hela metodiken blir då:
- Du behöver ha två surfaces som du ska beräkna volym mellan
- Skapa en volymyta (Tin Volume Surface) mellan de två ytorna
- Ta fram en User Contour för elevation=0 på volymytan
- Om du vill få ut den linjen som en "lös" linje kan du sedan använda Extract Objects from Surface och bara bocka i User Contour.

tisdag 3 juli 2018

Kopiera marklinje eller Måtte jag inte lägga mina ledningar för grunt!

Tips och tricks.

Det tillhör den vanligaste begäran jag får när jag ska träffa kunder, och ibland också det svåraste. Typ som "säg något roligt" - och man får tunghäfta.
Jag kan massor av tips och tricks, men bara rassla av dom är svårt - och förmodligen inte speciellt värdefullt för kunden.

Men idag blir det faktiskt ett tips om hur man kan visa marktäckning i profil och sektion.

Jag har två metoder på hur man kan göra detta, en som jag har använt i flera år och en som jag fick lära mig av en kund på en kurs.

Metod 1 - kopiera en yta.

För att kopiera en surface så skapar du en ny yta och använder sedan Paste Surface (Toolspace > Surface > Definition > Edits) för att klistra på den gamla ytan på den nya ytan. Nu har du en exakt kopia av ytan, alla förändringar i den gamla ytan slår igenom på kopian.
Använd sedan Raise/Lower Surface, också under Edits för att sänka ytan valfritt avstånd.

Om du har en befintlig profil, så använder du Create Surface Profile för att lägga till din nya yta (som du har döpt till något mycket intelligent såklart!) i den profilen - sätt en annan stil på den gärna för att se tydligt vilken linje som är vilken i profilen.

Metod 2 - Kopiera profillinje.

I en redan skapad profil så börjar du med att kopiera marklinjen med vanliga AutoCAD-kommandot Copy. Du kommer inte kunna flytta kopian någonstans utan bara kopiera marklinjen och använd baspunkten som insättningspunkt.

Markera sedan den kopierade marklinjen och öppna den vanliga Properties-paletten. Du kan se att det är den kopierade marklinjen eftersom den heter Marknamn (1). En bit ner i Properties så finns ett alternativ som heter Update Mode, sätt den till Static. Då kommer linjen i profilen att ändras så du ser alla noder på linjen.

Sedan kan du använda vanliga Move-kommandot för att flytta linjen till det djup du behöver. Kom ihåg vilken höjdförställning du har på din profil, när du flyttar linjen så behöver du ange det beräknade avstånd - alltså, om du vill flytta linjen 1.7 meter nedåt och du har en höjdförställning på 1:10 så behöver du flytta linjen 17 enheter nedåt.


Det finns säkert fler metoder men dessa två är de jag brukar visa. Vilken ska man använda då?

Fördel med metod 1 är det skapas ett faktiskt objekt som finns kvar i din ritning, man kan gå tillbaka till det objektet och se hur mycket det är flyttat uppåt eller nedåt. Det går att använda objektet till annat om det behövs, det går att redigera den kopierade ytan på alla sätt som vi är vana vid. Nackdel är att det finns ytterligare ett objekt i filen som vi kanske inte behöver, den kan ta onödig plats. Det tar några steg att skapa den vilket kan kännas onödigt.

Fördel med metod 2 är att den är enkel att använda, den kopierade ytan är enkel att ta bort och enkel att flytta på. Den tynger inte ner filen. Nackdel är att man måste ha koll själv på hur mycket man har flyttat linjen, det finns en viss felkälla i att göra för mycket själv.

Som vanligt så finns det för- och nackdelar med båda alternativen. Vilken man använder handlar mer om vilken metod man tycker om själv och vilken man är van vid.

tisdag 20 mars 2018

Flödesriktning! eller Rikta den där pilen åt nåt annat håll.

Etiketter. Detta gissel. Ibland är de helt underbar, när de gör som man vill! Men ibland är det mest bara ett härke utan dess like.

(Härke? Ni måste väl hört ordet härke? okejdå, Språk och Folkminnen to the rescue! Så? Alla är med på härke nu? Bra, då fortsätter vi)

Dagens inlägg handlar om en liten aspekt hos etiketter, och det är när vi vill göra en flödespil som alltid pekar nedåt. Eller uppåt, jag är inte känslig. Men jag vill att den ska ändra riktning när linjen ändrar riktning.

Lösningen är Expressions. Jag är inte den största stjärnan på expressions ska jag erkänna, men expressions kan vi använda när vi behöver ha/använda någon information i etiketter som inte finns som en standard property. T.ex. plushöjd för en pipes underkant finns inte som standard property (i 2018) men vi kan räkna fram det med hjälp av diameter och godstjocklek i ett expression.

Under General > Label Styles > Line > Expressions finns ett färdigt expression för FlowArrowRotation och om man högerklickar och väljer Edit på den så ser man detta:


Jag kan inte förklara matematiken bakom detta, men jag kan säga att det fungerar. I mitt fall så pekade denna etikett konsekvent uppåt istället för nedåt, då ändrade jag < till > och pilen pekade konsekvent nedåt. Det fungerade även att ändra 0,pi,0 till 0,0,pi - men varför? No clue. 

För att detta Expression ska vara tillgängligt för t.ex. Surface-labels så kopierade jag ovanstående text, och gick sedan ner till Surface > Surface Styles > Slope > Högerklick på Expressions > New och klistrade in texten. Jag fick sedan ändra General Segment Grade (som är specifikt för en linje) till Surface Slope (som är specifik för ytan) - enklast var att klicka på den lilla Properties-knappen på höger sida och lägga till Surface Slope.


När expressionet är klart så går jag in i Stylen som jag vill rotera och istället för att ange ett värde för rotation på pilen så kan jag nu välja mitt Expression som rotation. 


måndag 9 maj 2016

Surface-redigering eller Lek med Ytor.

Min specialgren in Civil 3D är ledningsprojektering. Det är det jag håller på med mest och känner att jag har bäst koll på.

Fördelen med ledningsproj är att man behöver oftast inte bekymra sig så väldigt mycket ytan som man ska utgå ifrån. Antingen så får man den från en Väg eller Mark-projektör, eller så har man underlag från nivåkurvor eller laserskanning som oftast inte är så svårt att få ihop till något hyfsat fungerande underlag.

Plus att ledningsprojektering per definition ligger en bit under marken så skulle någon triangel vara knasig så gör det inte så mycket.

Men som med alla delar i Civil 3D så dyker man ibland, även inom ledningsprojektering, på tillfällen då man måste börja fippla med sin yta. Jag tänkte gå igenom några vanliga frågeställningar och hur jag skulle lösa det.


Jag har en yta som fungerar, men min projektering går på ett ställe precis utanför ytan, hur löser jag det snabbt?

Om det är en längre sträcka som man saknar yta på, eller om man misstänker att ytan förändras väldigt mycket utanför sin gräns så ska man få fram mer inmätning.
Men om det är precis en liten bit man saknar och man vill bara expandera sin yta lite grann så har jag en enklare metod för det.

Se till att du har en Style på din yta som visar den yttre gränsen (Border), markera sedan din yta. På Surface-ribbonet som kommer upp finns funktionen Extract Objects (eller skriv SurfaceExtractObjects på kommandoraden). Bocka för Border och klicka på Ok. Nu har du en 3DPoly som följer den yttre gränsen på din yta.
Starta sedan kommandot OffsetFeature. Skriv in hur mycket du vill offsetta din linje - detta är alltså hur mycket större ska din yta bli. Välj din 3DPoly och klicka utanför ytan för att visa vilken sida du vill offsetta linjen på. Sista alternativet är Elevation Difference. Om du vill förstora ytan på samma nivå som den slutar på så skriver du inte in någon höjdskillnad. Om du vill få lite lutning på den förstorade delen så kan du skriva in höjdskillnad eller Grade/Slope.
Sista steget är att lägga in den offsettade 3DPolyn i din yta som Breakline. Om du bara vill förstora ytan på ett ställe kan du såklart Trimma din 3DPoly så att den inte sträcker sig runt hela ytan.


Jag har en befintlig yta men nu har jag fått inmätning och vill att inmätningen ska vara prioriterad!

Ta in den nya inmätningen i din fil och skapa en ny yta från inmätningen. Kontrollera trianglarna på din yta så att den inte har överdrivet långa trianglar i sidan, ta bort dem om det behövs.

Sen är det frågan om du vill ändra i den befintliga ytan eller om du vill ha kvar den intakt och skapa en kopia.

Om du vill skapa en kopia så skapar du en ny yta och under Definition > Edits på den nya ytan väljer du Paste Surface och sedna klistrar du först på den befintliga ytan. Sedan kör du Paste Surface igen och väljer då din inmätningsyta.

Om du vill redigera i den befintliga ytan så går du in under Definition > Edits på den ytan och kör Paste Surface och klistrar på din nya yta.

Obs! Det spelar roll i vilken ordning du klistrar på ytorna på varandra. Den ytan som ska vara prioriterad ska klistras på sist!


Just precis här saknas det en triangel/nod, Just precis här är det en triangel/nod för mycket, Just precis här är triangeln felvänd?

Civil 3D gör en triangulering som oftast är ganska bra. Men man kommer alltid hitta någon triangel eller nod som har hamnat fel eller som fattas. När det är bara en eller två såna fel så är det ganska enkelt att åtgärda.

Se till att du har en stil på ytan så att du ser trianglarna. Markera sedan ytan och på Surface-Ribbonet hittar du då Edit Surface-knappen. Under den så finns Add Line och Add Point för att lägga till en linje eller en nod. Det finns Delete Line och Delete Point för att ta bort en triangelsida eller en nod. Swap Edge används för att vända på en triangel. Med hjälp av dessa funktioner kan man finlira till sin yta.

Ajdå. Jag tror jag gjorde lite för mycket. Kan jag göra Undo?

Nej!

Mjo, du kan göra Undo, om du har lite tur. Jag rekommenderar det inte däremot. Jag rekommenderar att aldrig använda Undo när vi håller på med Civil-objekt. Hitta hellre hur du använder Civil 3Ds funktioner för att få ordning på det.

Alla de funktioner som jag har skrivit om här kan reverteras enkelt i Surface Properties på din yta.

I Surface Properties (finns på högerklicksmenyn) på Build-fliken finns en lista med allt som du har gjort med din yta. Du kan välja mellan att bocka ur ändringen, alltså tillfälligt kolla hur det såg ut innan du gjorde ändringen, eller att ta bort ändringen permanent.

Du kan här även ändra ordningen på de ändringar du har gjort med hjälp av pilarna på vänster sida. Detta kan spela roll om du t.ex. har klistrat ytor på varandra. Du kan också här ändra på var i ordningen som Boundary-linjen läggs till, i de flesta fall vill man att den linjen ska läggas till sist av allt.

tisdag 8 september 2015

Begränsa ytor! Eller Varför skapar Civil 3D så många trianglar?

Någon sa någon gång att en dag som man har lärt sig något nytt är en bra dag. Så om jag har lärt mig något nytt innan 9 på morgonen så måste det vara en riktigt bra dag!

En grundsten i att hantera ytor (Surfaces) i Civil 3D är att programmet vill triangulera så mycket den bara kan. Detta är oftast en bra inställning, när vi får in punkter så gör programmet en vild triangulering och sen får användaren gå in och peka ut var det inte ska vara någon triangulering.

Specialfallet av detta är när man får 3DFaces som underlag. 3DFaces ser väldigt mycket ut som en färdig triangulering, man vill oftast bara duplicera samma triangulering till en surface. Då blir det oftast problem när Civil 3D gör en egen triangulering, baserad på alla ändpunkterna av 3DFaces-trianglarna.

Det finns en inställning och en funktion som hjälper med detta.

Inställningen är Maintain edges from objects och du hittar den när du lägger in 3DFaces i ytan.

Den gör att Civil 3D skapar trianglar efter 3DFaces-trianglarna.

Det som är kvar då är de långa trianglarna  i ytterkanterna på Surfacen. Det finns några olika metoder för att begränsa triangellängden. Den enklaste metoden är att begränsa triangellängden. Det gör man i Surface Properties, på Definition-fliken, under Build-avdelningen. Denna begränsning slår på alla trianglar, så har man långa trianglar mitt i en yta så fungerar inte denna metod speciellt bra. Jag tycker denna metoden passar som en första, grov trimning av ytan.

Man kan gå in och ta bort triangel för triangel, det gör man med DeleteSurfaceLine (Surface-ribbonet > Edit). Det är den mest tidskrävande och mest finlirande av metoder. Jag rekommenderar det som en sista finputsning eller om det bara är några få trianglar som ska bort.

Metoden som jag föredrar är att lägga in en begränsningslinje på en yta. Det gör man med AddSurfaceBoundaries (Surface-ribbonet > Add Data > Boundaries). Först behöver man rita en linje som kommer att fungera som den nya yttersta linjen för ytan. Den linjen kan vara en platt 2D Polylinje utan någon nivå, men den behöver vara sluten.

Nu till det nya jag har lärt mig idag!

Just för 3DFaces är det lite unikt för man har i princip redan en yttre gräns, man vill oftast inte att ytan ska sträcka sig utanför de objekt man har. Då finns det ett kommando som heter LineWorkShrinkWrap som skapar en linje runt de objekt man väljer, vilket då blir en perfekt ny yttre gräns för ytan.