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!


fredag 6 september 2019

LUPREC? Not LUPREC?

Ibland får jag anledning att gräva sig ner i inställningar som jag bara accepterar tidigare, men när man har kunder som gör roliga saker så får man ju göra sitt bästa för att assistera!

Idag diskuterade jag en subassembly med en kund som är som ett pussel. Den består egentligen bara av 8 länkar och 1 shape. Men alla länkar kan ändras i bredd, riktning och lutning så med den subassen kan du skapa i princip vilken shape som helst. 

En effekt av dens uppbyggnad är att om man vill ha en vertikal länk så ställer man lutningen till ett högt värde (jag brukar använda 1000 eller -1000) och då styr bredden av länken (som alltid mäts horisontellt) istället höjden på länken, men multiplicerat med en faktor 1000. 

Jag gjorde ett litet exempel för att visa. I bilden nedan är Lutningen för vertikala länken satt till -50 och Bredden till 0.0001, höjden blir alltså 0.0001x50 = 0.005. 



Men det var inte det här jag skulle skriva om, det var en effekt av detta, nämligen att man vill skriva in väldigt låga värden på en parameter i Properties för en subassembly, och som standard ser jag bara 3 decimaler på dessa. 

Normalt i AutoCAD så styrs detta av varibeln LUPREC, men såklart måste Civil 3D vara lite speciellt. Så detta styrs i Drawing Settings (EditDrawingSettings på kommandoraden) på fliken Ambient Settings och under Unitless. Logiskt right? 



torsdag 4 juli 2019

Profile Labels

Idag tänkte jag skriva några rader om Profile View Labels, mera en genomgång av hur de hänger ihop.

Profile Label och Profile View Label - What's the difference?

Profile Label sätter vi ut på en profil-linje, en projekterad linje eller en marklinje t.ex. Profile View label sätter vi ut i själva en profil-vyn, de hänger ihop med vyn och kan referera till alignmentens längdmätning men inte mycket mer än så.

Sätta ut från början eller i efterhand.

När du ritar ut en profil-linje så kan du välja ett profile label set att appliceras automatiskt när du ritar ut din linje. Då kommer ett antal labels att placeras så fort du är klar med din profillinje, dessa kan du ta bort eller redigera i efterhand.
För färdiga profil-linjer (som mark-linjer) så kan man sätta ut etiketter på dem när man ritar ut profil vyn, i Create Profile View-wizarden på Profile Display Options-sidan - eller så sätter man ut de i efterhand.

Placera Labels i efterhand

Enklaste vägen att komma åt att placera labels i efterhand är att markera profil-linjen som du vill ha etiketter på och klicka på Ribbonet > Edit Profile Labels


Dialogen ovan är från Civil 3D 2020. Om du har ett färdigt label set så klickar du på Import label set... nere till höger. Om du vill lägga till individuella labels så väljer du Type först, alltså vilken typ av linje-segement label ska placeras på. De olika segmenten kan få fram olika typer av information, och har alltså olika Label Styles. När du valt Type så väljer du Label Style till höger och sedan Add för att lägga till labeln i din profil-vy.


En sak att tänka på är Major Stations och Minor Stations. i den här dialogen kan du sätta vad som ska vara Major Station Increment och vad som är Minor Station Increment. Detta hänger alltså på Alignmentens längdmätning. Horizontal Geometry Points är där något händer på Alignmenten, brytpunkt, början/slutet av en båge osv. De övriga alternativen är delar av linjen. 

Beroende på vilken mallfil du arbetar med så kan du ha olika typer av Label Styles tillgängliga och som vanligt, om du bara har Standard-styles tillgängliga så är du i fel mallfil!

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 30 april 2019

Macro för rotera viewport eller Let's twist again!

Idag blir det ett rent AutoCAD-tips faktiskt, även om vi använder det i Civil 3D.

Jag fick en fråga igår från en kund om hur ritningshanteringen går till i Civil 3d, och tyvärr så måste jag svara att ritningshanteringen i det stora hela går till precis som den gör i AutoCAD.

Ritningshanteringen i AutoCAD är inte svår, den är mest omständlig och kräver att man gör allt i rätt ordning och alltid gör samma sak. Det finns dessutom många sätt att hantera sina ritningar på, som mycket annat i AutoCAD så leder alla vägar till Rom, men det finns många vägar till Rom. (jag rekommenderar med tåg över/genom bergen genom Österrike, men igen, eget inlägg)

Idag diskuterade jag också ritningshantering, speciellt hur man roterar sin modell för ritdeffen och de kommandona jag använde insåg jag snabbt att man kan lägga ihop till ett macro, så det är dagens inlägg: ett macro för att rotera din modell och zooma in i en viewport. Och jag tänkte använda detta för att visa lite hur man kan göra macros generellt- jag har skrivit om detta tidigare, så det blir säkert en liten repetition för en del av er.

Några frågar du kan ställa dig innan du börjar:

Kan jag göra detta till ett macro?

Alla funktioner som lever på kommandoraden är enkla att göra om till macro, så så länge du inte blandar in några dialogboxar så kommer det gå galant.

Är det lönt att göra ett macro?

Om det är en serie av kommandon som du gör upprepade gånger så är det oftast lönt att göra macrot. Både för att spara tid och för att komma ihåg att alltid göra funktionerna i rätt ordning. Angående tids-aspekten så gillar jag XKCDs diagram över tidsvinst: https://xkcd.com/1205/


Hur du börjar:

Gör de funktioner du vill sätta ihop och skriv ner hur du gör. I mitt fall vill jag ställa in ett eget UCS längs en utsnittsruta, vrida vyn till det UCS, ställa tillbaka UCS till World och sist zooma till utsnittsrutan. Jag börjar med att skriva alla kommandon på kommandoraden, och medan jag skriver det på kommandoraden så skriver jag samma saker i ett Notepad/Anteckningar-fönster. Notepad är kung för detta, det minimerar risken för att formattering av text bråkar med dig.

Varje mellanslag/enter skriver jag som ett
Varje gång jag behöver klicka något på skärmen skriver jag ett \
Mitt första utkast på macro blev då UCS;\;plan;;ucs;w;zoom \\

Om ni testar det så kommer ni se att det inte fungerar. Den enklaste metoden för att testa sitt macro är att klistra in texten på kommandoraden och se vad som händer. Jag behöver väl inte säga att ni ska se till att spara ritningen och helst inte ha en "riktig" ritning uppe medan ni gör det här? Bra.

För att testa ett macro är det enklast att ta det i steg. Jag började med att få UCS-delen att fungera, tog alltså bara UCS;\; och klistrade in på kommandoraden och ändrade i macrot tills jag fick in alla enter-slag och \ på rätt ställe.

Till slut, efter lite testande, så fick jag detta: ^C^CUCS;\\;plan;;UCS;w;zoom;
Notera att det numera också börjar med ^C^C, det är för att macrot ska avbryta eventuell funktion som är igång innan den startar själva macrot.

För att sedan skapa en knapp så är det CUI-dialogen som gäller, skapa funktion, lägga in macrot, skapa en panel, lägga in knappen på panelen, lägga panelen på en tab, badabing badaboom!


Det är riktigt tillfredställande att få ihop ett riktigt snyggt macro som gör precis det man vill!

måndag 25 mars 2019

Dagens Irritation eller Bubbles! Bubbles! Bubbles!

Dagens irritationsobjekt är snarare fredags irritation, men fredagen försvann i en dimma av tandläkar-besök och textskrivande.

Jag fick en fråga från en kund i fredags om att den lilla noterings-bubblan som ska komma upp när en Data Shortcut eller en X-ref har ändrats inte dök upp för henne. Det fungerade för hennes kollega och de kunde inte se någon skillnad mellan sina datorer.

Det blev ännu mera intressant när jag märkte att jag inte heller fick upp noterings-bubblan på min dator!

Efter mycket letande och testande hittade jag lösningen, och lärde mig ett antal nya variabler på köpet. (spoiler: variablerna var inte lösningen)

Kommandot TRAYSETTINGS öppnar en dialogruta där man kan välja hur den notis-ballongen ska bete sig, om den ska auto-stänga sig och hur länge den ska visas. Dialogen styr variablerna TRAYICONS, TRAYTIMEOUT och TRAYNOTIFY alltså.
Men, spoiler spoiler, allt var ibockat hos mig och jag såg fortfarande inte notis-ballongen.

Nästa steg var att undersöka grafikkort och hardware acceleration, men inget där påverkade ballongen.

Det är nu jag läser djupt ner i alla forum-trådar jag kan hitta om det här och till slut fanns en kommentar om att ballongen dyker inte upp om man har programmet på den skärmen som inte är den primära skärmen. Och ja, när jag startade om programmet, och hade den på den primära skärmen istället, så får jag upp ballongen - och idag bekräftade min kund att det samma lösning fungerade hos henne.

Irriterande javisst, men nu vet jag vad det är iaf.

(Detta problem påminde mig om ett annat problem som jag har haft ibland. Vissa dialogrutor visas ibland som blanka om man har ett program igång som kan ta över ens skärm, t.ex. Teamviewer eller Skype. Jag hade det konstant för några år sen, och jag tycker jag märker det ibland numera också. Ytterligare ett irriterande problem)

onsdag 6 mars 2019

Code Set Style eller One style to rule them all

Code Set Styles. Detta gissel. På ett sätt är det bra, code set style (eller ska vi förkorta det till CSS?) styr många olika objekt och innehåller mycket information så vi kan använda samma CSS på flera ställen. Å andra sidan så är det lättare att ha koll när man har en individuell stil för varje objekt.

Jag tänkte rada upp en del information angånde CSS som kan vara bra att ha koll på. Jag kommer säkert missa något så du fär gärna återkomma till mig om du vet något som inte jag vet, eller återkom med mer frågor så kan jag fylla på med information.

Vad är en Code Set Style och vilka objekt styr den? 

En CSS styr vilka linjer, punkter och shapes (skraffering/hatcher) som visas i subassemblies och korridorer. Det gäller även alla ställen där korridorer visas, som Section Editor och tvärsektioner. CSSn definierar även hur linjer och hatcher ska visas, vilka linjetyper och hatchmönster som ska användas.

Vilken information finns i en Code Set Style och hur styr den utseendet?

I CSSen skiljer vi på Points, Links och Shapes:

Points visas som cirklar i subassemblyn med namn inom paranteser och blir linjer i korridoren. (Alltså styr Styles från Point-avdelningen hur linjerna i Korridoren ser ut, även om det känns ologiskt.)
Links visas som linjer i subassemblyn med namn inom hak-paranteser och blir ytor i korridoren.
Shapes visas som areor i subassemblyn med namn inom vinkel-paranteser och blir volymer i korridoren.

De olika delarna har några gemensamma inställningar och några unika:

Namn    Namn på objekten, punktkoden, linkkoden eller shapekoden. Det är här du har kopplingen till subassemblyns kodning.
Description    ytterligare information, fri text
Classification Code ytterligare information

Pay Item (Links och Points) Anger vilket pay item som areorna och linjerna ska få i korridoren, för att sedan kunna mängda via QTO.

Link
Link Style / Link Label Style  Linjetyp för länken i sektioner och vilken label som länken ska få
Render Material   Render material för arean i modellvy
Material Area Fill Style skraffering/hatching av arean in planläge

Point
Marker Style / Marker Label Style Markeringsstil för punkten i sektioner och vilken label texten ska ha
Featureline Style Linjetyp för linjen i korridoren i plan

Shape
Shape Style / Shape Label Style Skraffering/hatch för arean i sektion och vilken label som placeras ut


Hur redigerar jag en Code Set Style?

Du kommer åt CSS från några olika ställen men på vissa ställen kan du bara visa CSSn och på andra så görs någon form av overrride så jag rekommenderar en endaste väg för att redigera CSSn: Gå till Settings-fliken i din Tool Space, gå ner under General > Multipurpose Styles > Code Set Style och högerklicka på den stilen du vill ändra, alternativt välj Copy för att göra en kopia av CSSn.

När du är inne i din CSS så kan du sedan högerklicka på överskrifterna i tabellen för att lägga till nya koder, och sedan kan du ställa in settings för den koden.

Om du ska lägga in många koder från en subassembly så kan du använda Import Codes... i dialogens nedre högra hörn. Tänk på att den funktionen enbart importerar koder som just nu visas i subassemblyn så om du t.ex. använder Display Mode för att enbart visa fyll-läge för en slänt, så kommer du enbart att importera fyll-släntens koder i CSSen.

Var det allt?

Det finns mycket egenheter med CSSer som kan vara bra att ha koll på
- Om en kod finns i subassemblyn men inte finns med i CSSn så syns den. Default-värde är alltså att visa objekt. (Teorin säger att man ska kunna ändra det här i Settings, jag tycker inte alltid att det fungerar). Så vill du ha sten-koll på vad du ser och inte ser så ska din CSS innehålla alla koder.
- Du kommer åt CSSn t.ex. innifrån Corridor Properties och det ser ut som om du kan redigera den därifrån - det fungerar inte alltid. Min bestämda rekommendation är att enbart gå in via Settings-fliken och redigera din CSS

onsdag 30 januari 2019

Structure Label For Each eller Allas Vår Favoritdialog.

Liten instruktion idag, där jag ska försöka skaka fram lite snygga bilder också. Eller så snygga bilder som Civil 3Ds dialogboxar kan ge oss.

Etiketter, eller Labels, i Civil 3D ger oss en fantastisk möjlighet att sätta ut automatisk populerad information på alla möjliga Civil 3D-objekt. Eller så ger de oss en fantastisk möjlighet att bli helt vilse i dialogrutor. Either way, när man väl får ordning på dom så är de ganska underbara.

Idag ska jag skriva lite om structure-etiketter och framförallt alternativen Text For Each.

Första tipset, starta med en label som är så nära ditt mål som möjligt och gör en kopia av den stilen. Enklast är att hitta etiketten på Settings-fliken i din Tool Space och högerklicka och välja Copy. Döp din nya etikett till något bra, om sedan börjar du ändra i den. På fliken Layout så ändrar du allt innehåll i din etikett.


Högst upp har du Component-listan. Här har du alla de individuella objekten som din etikett består av. När du har valt en komponent så ser du sedan all info om den komponenten i rutan nedanför, och en förhandsvisning av etiketten till höger. 
För att lägga till en ny komponent så klickar du på A-knappen bredvid komponent-listan. Just idag ska jag lägga till en komponent som heter Text For Each. Structure-labels kan använda Text For Each-alternativet för att lägga till en text för varje ledning som ansluter till brunnen, eller enbart för utgående ledningar, eller enbart ingående ledningar. 

Nästa steg är att lägga till vilken information som ska visas i etiketten, det gör du på Contents-raden. I nästa dialogruta har du en lista med den information som du kan lägga till för varje anslutande ledning. Denna listan är alltså all information som vi kan läsa av objektet, i detta fallet anslutande ledning. I mitt fall så vill jag ha Connected Pipe Invert Elevation eftersom jag vill ha vattengångsnivån för alla anslutande ledningar. 


När jag valt vilken information jag vill ha så ställer jag in hur den informationen ska visas och klickar sedan på pilen för att läsa in mina val till högersidan, där du "ser" vad etiketten kommer innehålla. Och nej, du ser det förmodligen inte. Oavsett om man har vit eller svart bakgrund så ser man knappt något i den rutan. Om du markerar din text så ser du kanske lite bättre.

När du har ställt in vilken information du vill ha i etiketten så går du tillbaka till första dialogen. Ställ in Anchor-point för din text (var den ska ansluta i förhållande till structuren alltså), text height, text offset osv.

Om du tänker att du kommer att placera ut etiketten och sedan flytta etiketten så behöver du titta på Dragged State-fliken också. Man kan alltså ha olika text-höjd och placering av texter när du drar i den, så om du ändrar text höjd på Layout-fliken, glöm inte att ändra text-höjd på Dragged State-fliken också. Det är även här som du bestämmer om du ska få en Leader när du drar i etiketten.
Du kan även ställa in Dragged State att vara As Composed, då blir texten som Layout-fliken säger.

När du tror du är klar klickar du på Apply och OK och kollar hur din etikett ser ut i din ritning. Förmodligen behöver du göra lite ändringar, då är det bara in i Label Style Composer igen (markera din etikett, högerklick och Edit Label Style brukar vara snabbast) men glöm inte att klicka Apply innan du går tillbaka till ritningen igen, ibland så slår inte ändringar igenom annars.

Dela med sig av egna macro-knappar eller Captain Buttonbeard!

Detta blir till en viss del en uppdatering av ett gammalt inlägg, hur man skapar en egen knapp i Autocad med tillagd information om hur du delar med dig av den supergrymma knappen som du just gjorde!

Allt detta görs inne i en och samma dialog som du kommer till med funktionen CUI

Skapa funktionen: 
Du skapar ett kommando först, med den rödmarkerad stjärn-knappen. På höger sida får du då fylla i allt om hur du vill att din funktion ska fungera. Vad den ska heta, vad som ska visas i Tooltipet (förslagsvis hur funktionen ska användas) och vilken ikon funktionen ska ha. Du kan ha flera funktioner med samma ikon så du kan utan problem välja en bild i övre delen av dialogen - eller så har du en egen bild förberedd.
I Macro-rutan ska du skriva in din funktion, i mitt exempel använder jag Mitt Favorit Macro.


Lägga in funktionen på en panel, lägga panelen på en flik: 

När kommandot är klart så ska det läggas på en panel. Jag har skapat en egen panel här genom att högerklicka på Panels och välja New. Sedan klickar och drar du funktionen från nedre vänstra avdelningen upp till din panel. När knappen väl ligger på panelen så bestämmer du till höger hur knappen ska se ut på panelen.
Sedan lägger jag panelen på en flik eller tab. Samma förfarande, skapa en tab genom att högerklicka på Tabs och dra sedan panelen från Panel-avdelningen till din nyskapade Tab. Du behöver inte skapa en tab, du kan lägga in panelen på en befintlig tab också. 


Ska du bara använda din funktion på din dator så är du klar nu, men om du ska dela med dig av din super-duper fina funktion (eller spara ut din funktion om du ska installera om Civil 3D) så är det några steg till: 

Spara funktionen, panelen och fliken till en CUI: 

I CUI-funktionen finns också en Transfer-tab högst upp. Där har du dina tabs och paneler på vänster sida och på höger sida har du en tom CUIx-fil. Hitta din tab eller panel och dra över den från vänster sida till höger sida, klicka sedan på Spara-knappen högst upp. Om du drar tabben så får du med panelen och funktionen så du behöver bara flytta det högsta objektet så att säga. 

Det är denna CUIx-fil som du kan skicka till dina kollegor eller spara på något lämpligt ställe inför ominstallation av din egen dator. 


Läs in din flik, panel och funktion till en ny dator.

Öppna CUI-dialogen på den andra datorn. Om du tog en hel en tab så kan du ladda in CUIx-filen genom att högerklicka på Partial Customization File och hitta din CUIx-fil. 
Om du bara gjorde en panel så behöver du gå till Transfer-fliken och göra tvärtom hur du gjorde alldeles nyss, alltså öppna din egna CUIx-fil på högersida, dra panelen från höger till vänster och lägg den under Panels. Till sist gå till första fliken och lägga panelen på den befintliga fliken där du vill ha panelen. 




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å :)