Open technical graphics as four years of AutoCAD.

Each lesson has a method, a dimensioned assignment and a quiz, from the drawing sheet through the exam model.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
pepaskopec-blip 2026-10-11 13:44:38 +02:00
commit 6662eb185e
84 changed files with 3355 additions and 6 deletions

View file

@ -71,6 +71,8 @@ Intel Mac, jiná architektura nebo úpravy kódu → [sestavení ze zdroje](#ses
- **Technické vybavení** — 4 ročníky: 1. ročník má 29 lekcí - **Technické vybavení** — 4 ročníky: 1. ročník má 29 lekcí
(architektura, data, skříň, deska, karty, disky a vstup), (architektura, data, skříň, deska, karty, disky a vstup),
ročníky 2–4 po 8 lekcích (monitory, sestavení, RAID, servery, údržba) ročníky 2–4 po 8 lekcích (monitory, sestavení, RAID, servery, údržba)
- **Technická grafika** — 4 ročníky AutoCADu, v každém 8 lekcí:
výkres a souřadnice, úpravy a kóty, pohledy a tisk, 3D a maturitní zadání
- **Český jazyk a literatura** — literatura (4 ročníky, 32 lekcí podle osnov - **Český jazyk a literatura** — literatura (4 ročníky, 32 lekcí podle osnov
středních škol), mluvnice (20 cvičení) a maturitní četba středních škol), mluvnice (20 cvičení) a maturitní četba
(82 knih: zápisky, kvíz, sestavení děje) (82 knih: zápisky, kvíz, sestavení děje)
@ -90,7 +92,7 @@ Intel Mac, jiná architektura nebo úpravy kódu → [sestavení ze zdroje](#ses
### Použití ### Použití
1. **Úvod** ukáže postup a mřížku předmětů. Otevřený předmět spustí cestu. Zamčené dlaždice zatím nic neotevřou: technická grafika, prezentační grafika, programování a programové vybavení. 1. **Úvod** ukáže postup a mřížku předmětů. Otevřený předmět spustí cestu. Zamčené dlaždice zatím nic neotevřou: prezentační grafika, programování a programové vybavení.
2. U němčiny je učebnice (Neue Freunde, Aus aller Welt, Bei uns zu Hause) a čtyři ročníky. Ostatní otevřené předměty mají ročníky, lekce nebo knihy. 2. U němčiny je učebnice (Neue Freunde, Aus aller Welt, Bei uns zu Hause) a čtyři ročníky. Ostatní otevřené předměty mají ročníky, lekce nebo knihy.
3. Z cesty se otevře výklad, poslech, čtení, psaní nebo kvíz. 3. Z cesty se otevře výklad, poslech, čtení, psaní nebo kvíz.
4. **Statistiky**, **Nastavení** a **Hledat** jsou v postranním panelu na Macu. Na telefonu a v desktopové aplikaci jsou na záložkách, hledání navíc ikonou lupy. Zkratka je `Cmd/Ctrl+K`. 4. **Statistiky**, **Nastavení** a **Hledat** jsou v postranním panelu na Macu. Na telefonu a v desktopové aplikaci jsou na záložkách, hledání navíc ikonou lupy. Zkratka je `Cmd/Ctrl+K`.
@ -259,6 +261,8 @@ Intel Mac, another architecture, or hacking on the code →
- **Computer hardware** — 4 years: year 1 has 29 lessons - **Computer hardware** — 4 years: year 1 has 29 lessons
(architecture, data, case, board, cards, drives and input), (architecture, data, case, board, cards, drives and input),
years 2–4 have 8 lessons each (displays, assembly, RAID, servers, maintenance) years 2–4 have 8 lessons each (displays, assembly, RAID, servers, maintenance)
- **Technical graphics** — 4 years of AutoCAD, 8 lessons each:
the sheet and coordinates, editing and dimensions, views and plotting, 3D and the exam drawing
- **Czech language** — literature (4 years, 32 lessons from the secondary-school - **Czech language** — literature (4 years, 32 lessons from the secondary-school
syllabus), grammar (20 exercises) and required reading syllabus), grammar (20 exercises) and required reading
(82 books: notes, quiz, plot ordering) (82 books: notes, quiz, plot ordering)
@ -279,7 +283,7 @@ Intel Mac, another architecture, or hacking on the code →
### Usage ### Usage
1. **Welcome** shows progress and the subject grid. An open subject starts its path. Locked tiles do nothing yet: technical drawing, presentation graphics, programming and software. 1. **Welcome** shows progress and the subject grid. An open subject starts its path. Locked tiles do nothing yet: presentation graphics, programming and software.
2. German has the textbook (Neue Freunde, Aus aller Welt, Bei uns zu Hause) and four years. The other open subjects have years, lessons or books. 2. German has the textbook (Neue Freunde, Aus aller Welt, Bei uns zu Hause) and four years. The other open subjects have years, lessons or books.
3. A path opens an overview, listening, reading, writing or a quiz. 3. A path opens an overview, listening, reading, writing or a quiz.
4. **Statistics**, **Settings** and **Search** sit in the sidebar on Mac. On the phone and the desktop app they are tabs, with search also on the magnifier. The shortcut is `Cmd/Ctrl+K`. 4. **Statistics**, **Settings** and **Search** sit in the sidebar on Mac. On the phone and the desktop app they are tabs, with search also on the magnifier. The shortcut is `Cmd/Ctrl+K`.

View file

@ -30,6 +30,8 @@ import org.maturita.maturita.ui.HwQuizScreen
import org.maturita.maturita.ui.HwYearsScreen import org.maturita.maturita.ui.HwYearsScreen
import org.maturita.maturita.ui.LessonListScreen import org.maturita.maturita.ui.LessonListScreen
import org.maturita.maturita.ui.FyzQuizScreen import org.maturita.maturita.ui.FyzQuizScreen
import org.maturita.maturita.ui.TgQuizScreen
import org.maturita.maturita.ui.TgYearsScreen
import org.maturita.maturita.ui.MathPracticeScreen import org.maturita.maturita.ui.MathPracticeScreen
import org.maturita.maturita.ui.MatYearsScreen import org.maturita.maturita.ui.MatYearsScreen
import org.maturita.maturita.ui.FyzYearsScreen import org.maturita.maturita.ui.FyzYearsScreen
@ -525,6 +527,63 @@ private fun MaturitaAppBody(vm: AppViewModel) {
} }
} }
is Route.Fyz4Ex -> FyzQuizScreen(vm, 4, r.id) is Route.Fyz4Ex -> FyzQuizScreen(vm, 4, r.id)
Route.TgYears -> TgYearsScreen(vm)
Route.TgMap -> LessonListScreen(
vm, vm.tr("tg_year1"), vm.tr("tg_sub"),
vm.content.tg.map { l ->
val id = l.int("id")
LessonRow(vm.tr(l.str("titleKey")), vm.progress.tgDone(id), Route.TgLesson(id))
},
)
is Route.TgLesson -> {
val l = vm.content.tgLesson(r.id)
if (l != null) SlidesScreen(vm, vm.tr(l.str("titleKey")), vm.tr(l.str("subKey")), l.arr("slides")) {
vm.replace(Route.TgEx(r.id))
}
}
is Route.TgEx -> TgQuizScreen(vm, 1, r.id)
Route.Tg2Map -> LessonListScreen(
vm, vm.tr("tg_year2"), vm.tr("tg2_sub"),
vm.content.tg2.map { l ->
val id = l.int("id")
LessonRow(vm.tr(l.str("titleKey")), vm.progress.tg2Done(id), Route.Tg2Lesson(id))
},
)
is Route.Tg2Lesson -> {
val l = vm.content.tg2Lesson(r.id)
if (l != null) SlidesScreen(vm, vm.tr(l.str("titleKey")), vm.tr(l.str("subKey")), l.arr("slides")) {
vm.replace(Route.Tg2Ex(r.id))
}
}
is Route.Tg2Ex -> TgQuizScreen(vm, 2, r.id)
Route.Tg3Map -> LessonListScreen(
vm, vm.tr("tg_year3"), vm.tr("tg3_sub"),
vm.content.tg3.map { l ->
val id = l.int("id")
LessonRow(vm.tr(l.str("titleKey")), vm.progress.tg3Done(id), Route.Tg3Lesson(id))
},
)
is Route.Tg3Lesson -> {
val l = vm.content.tg3Lesson(r.id)
if (l != null) SlidesScreen(vm, vm.tr(l.str("titleKey")), vm.tr(l.str("subKey")), l.arr("slides")) {
vm.replace(Route.Tg3Ex(r.id))
}
}
is Route.Tg3Ex -> TgQuizScreen(vm, 3, r.id)
Route.Tg4Map -> LessonListScreen(
vm, vm.tr("tg_year4"), vm.tr("tg4_sub"),
vm.content.tg4.map { l ->
val id = l.int("id")
LessonRow(vm.tr(l.str("titleKey")), vm.progress.tg4Done(id), Route.Tg4Lesson(id))
},
)
is Route.Tg4Lesson -> {
val l = vm.content.tg4Lesson(r.id)
if (l != null) SlidesScreen(vm, vm.tr(l.str("titleKey")), vm.tr(l.str("subKey")), l.arr("slides")) {
vm.replace(Route.Tg4Ex(r.id))
}
}
is Route.Tg4Ex -> TgQuizScreen(vm, 4, r.id)
Route.SciMap -> SciMapScreen(vm) Route.SciMap -> SciMapScreen(vm)
Route.ChemMap -> LessonListScreen( Route.ChemMap -> LessonListScreen(
vm, vm.tr("Chemie"), vm.tr("chem_sub"), vm, vm.tr("Chemie"), vm.tr("chem_sub"),

View file

@ -242,6 +242,26 @@ class AppViewModel(val content: Content, val platform: Platform) {
refresh() refresh()
} }
fun markTg(id: Int) {
progress.markTg(id)
refresh()
}
fun markTg2(id: Int) {
progress.markTg2(id)
refresh()
}
fun markTg3(id: Int) {
progress.markTg3(id)
refresh()
}
fun markTg4(id: Int) {
progress.markTg4(id)
refresh()
}
fun markMluv(n: Int) { fun markMluv(n: Int) {
progress.markMluv(n) progress.markMluv(n)
refresh() refresh()

View file

@ -105,6 +105,19 @@ sealed class Route(val page: String) {
data object Fyz4Map : Route("fyz4map") data object Fyz4Map : Route("fyz4map")
data class Fyz4Lesson(val id: Int) : Route("fyz4unit$id") data class Fyz4Lesson(val id: Int) : Route("fyz4unit$id")
data class Fyz4Ex(val id: Int) : Route("fyz4ex$id") data class Fyz4Ex(val id: Int) : Route("fyz4ex$id")
data object TgYears : Route("tgyears")
data object TgMap : Route("tgmap")
data class TgLesson(val id: Int) : Route("tgunit$id")
data class TgEx(val id: Int) : Route("tgex$id")
data object Tg2Map : Route("tg2map")
data class Tg2Lesson(val id: Int) : Route("tg2unit$id")
data class Tg2Ex(val id: Int) : Route("tg2ex$id")
data object Tg3Map : Route("tg3map")
data class Tg3Lesson(val id: Int) : Route("tg3unit$id")
data class Tg3Ex(val id: Int) : Route("tg3ex$id")
data object Tg4Map : Route("tg4map")
data class Tg4Lesson(val id: Int) : Route("tg4unit$id")
data class Tg4Ex(val id: Int) : Route("tg4ex$id")
data object CzechMap : Route("czechmap") data object CzechMap : Route("czechmap")
data object Mluvnice : Route("mluvnice") data object Mluvnice : Route("mluvnice")
data class MluvEx(val n: Int) : Route("mluve$n") data class MluvEx(val n: Int) : Route("mluve$n")
@ -237,6 +250,19 @@ sealed class Route(val page: String) {
Fyz4Map -> listOf(Subjects, FyzYears, Fyz4Map) Fyz4Map -> listOf(Subjects, FyzYears, Fyz4Map)
is Fyz4Lesson -> listOf(Subjects, FyzYears, Fyz4Map, this) is Fyz4Lesson -> listOf(Subjects, FyzYears, Fyz4Map, this)
is Fyz4Ex -> listOf(Subjects, FyzYears, Fyz4Map, Fyz4Lesson(id), this) is Fyz4Ex -> listOf(Subjects, FyzYears, Fyz4Map, Fyz4Lesson(id), this)
TgYears -> listOf(Subjects, TgYears)
TgMap -> listOf(Subjects, TgYears, TgMap)
is TgLesson -> listOf(Subjects, TgYears, TgMap, this)
is TgEx -> listOf(Subjects, TgYears, TgMap, TgLesson(id), this)
Tg2Map -> listOf(Subjects, TgYears, Tg2Map)
is Tg2Lesson -> listOf(Subjects, TgYears, Tg2Map, this)
is Tg2Ex -> listOf(Subjects, TgYears, Tg2Map, Tg2Lesson(id), this)
Tg3Map -> listOf(Subjects, TgYears, Tg3Map)
is Tg3Lesson -> listOf(Subjects, TgYears, Tg3Map, this)
is Tg3Ex -> listOf(Subjects, TgYears, Tg3Map, Tg3Lesson(id), this)
Tg4Map -> listOf(Subjects, TgYears, Tg4Map)
is Tg4Lesson -> listOf(Subjects, TgYears, Tg4Map, this)
is Tg4Ex -> listOf(Subjects, TgYears, Tg4Map, Tg4Lesson(id), this)
CzechMap -> listOf(Subjects, CzechMap) CzechMap -> listOf(Subjects, CzechMap)
Mluvnice -> listOf(Subjects, CzechMap, Mluvnice) Mluvnice -> listOf(Subjects, CzechMap, Mluvnice)
is MluvEx -> listOf(Subjects, CzechMap, Mluvnice, this) is MluvEx -> listOf(Subjects, CzechMap, Mluvnice, this)
@ -289,6 +315,11 @@ fun routeFromPage(page: String): Route? = when (page) {
"fyz2map" -> Route.Fyz2Map "fyz2map" -> Route.Fyz2Map
"fyz3map" -> Route.Fyz3Map "fyz3map" -> Route.Fyz3Map
"fyz4map" -> Route.Fyz4Map "fyz4map" -> Route.Fyz4Map
"tgyears" -> Route.TgYears
"tgmap" -> Route.TgMap
"tg2map" -> Route.Tg2Map
"tg3map" -> Route.Tg3Map
"tg4map" -> Route.Tg4Map
"czechmap" -> Route.CzechMap "czechmap" -> Route.CzechMap
"mluvnice" -> Route.Mluvnice "mluvnice" -> Route.Mluvnice
"readinglist" -> Route.ReadingList "readinglist" -> Route.ReadingList
@ -386,6 +417,30 @@ fun routeFromPage(page: String): Route? = when (page) {
Regex("""fyzex(\d+)""").matchEntire(page)?.let { Regex("""fyzex(\d+)""").matchEntire(page)?.let {
return Route.FyzEx(it.groupValues[1].toInt()) return Route.FyzEx(it.groupValues[1].toInt())
} }
Regex("""tg4unit(\d+)""").matchEntire(page)?.let {
return Route.Tg4Lesson(it.groupValues[1].toInt())
}
Regex("""tg4ex(\d+)""").matchEntire(page)?.let {
return Route.Tg4Ex(it.groupValues[1].toInt())
}
Regex("""tg3unit(\d+)""").matchEntire(page)?.let {
return Route.Tg3Lesson(it.groupValues[1].toInt())
}
Regex("""tg3ex(\d+)""").matchEntire(page)?.let {
return Route.Tg3Ex(it.groupValues[1].toInt())
}
Regex("""tg2unit(\d+)""").matchEntire(page)?.let {
return Route.Tg2Lesson(it.groupValues[1].toInt())
}
Regex("""tg2ex(\d+)""").matchEntire(page)?.let {
return Route.Tg2Ex(it.groupValues[1].toInt())
}
Regex("""tgunit(\d+)""").matchEntire(page)?.let {
return Route.TgLesson(it.groupValues[1].toInt())
}
Regex("""tgex(\d+)""").matchEntire(page)?.let {
return Route.TgEx(it.groupValues[1].toInt())
}
Regex("""lit4unit(\d+)""").matchEntire(page)?.let { Regex("""lit4unit(\d+)""").matchEntire(page)?.let {
return Route.Lit4Lesson(it.groupValues[1].toInt()) return Route.Lit4Lesson(it.groupValues[1].toInt())
} }

View file

@ -56,6 +56,10 @@ class Content(root: JSONObject) {
val fyz2 = raw.arr("fyz2") val fyz2 = raw.arr("fyz2")
val fyz3 = raw.arr("fyz3") val fyz3 = raw.arr("fyz3")
val fyz4 = raw.arr("fyz4") val fyz4 = raw.arr("fyz4")
val tg = raw.arr("tg")
val tg2 = raw.arr("tg2")
val tg3 = raw.arr("tg3")
val tg4 = raw.arr("tg4")
val mat0 = raw.arr("mat0") val mat0 = raw.arr("mat0")
val mat = raw.arr("mat") val mat = raw.arr("mat")
val mat2 = raw.arr("mat2") val mat2 = raw.arr("mat2")
@ -108,6 +112,10 @@ class Content(root: JSONObject) {
fun fyz2Lesson(id: Int) = fyz2.firstOrNull { it.int("id") == id } fun fyz2Lesson(id: Int) = fyz2.firstOrNull { it.int("id") == id }
fun fyz3Lesson(id: Int) = fyz3.firstOrNull { it.int("id") == id } fun fyz3Lesson(id: Int) = fyz3.firstOrNull { it.int("id") == id }
fun fyz4Lesson(id: Int) = fyz4.firstOrNull { it.int("id") == id } fun fyz4Lesson(id: Int) = fyz4.firstOrNull { it.int("id") == id }
fun tgLesson(id: Int) = tg.firstOrNull { it.int("id") == id }
fun tg2Lesson(id: Int) = tg2.firstOrNull { it.int("id") == id }
fun tg3Lesson(id: Int) = tg3.firstOrNull { it.int("id") == id }
fun tg4Lesson(id: Int) = tg4.firstOrNull { it.int("id") == id }
fun mat0Lesson(id: Int) = mat0.firstOrNull { it.int("id") == id } fun mat0Lesson(id: Int) = mat0.firstOrNull { it.int("id") == id }
fun matLesson(id: Int) = mat.firstOrNull { it.int("id") == id } fun matLesson(id: Int) = mat.firstOrNull { it.int("id") == id }
fun mat2Lesson(id: Int) = mat2.firstOrNull { it.int("id") == id } fun mat2Lesson(id: Int) = mat2.firstOrNull { it.int("id") == id }

View file

@ -91,6 +91,14 @@ class ProgressStore(private val prefs: Prefs, content: Content) {
fun markFyz3(id: Int) { mark("fyz3.$id") } fun markFyz3(id: Int) { mark("fyz3.$id") }
fun fyz4Done(id: Int) = done("fyz4.$id") fun fyz4Done(id: Int) = done("fyz4.$id")
fun markFyz4(id: Int) { mark("fyz4.$id") } fun markFyz4(id: Int) { mark("fyz4.$id") }
fun tgDone(id: Int) = done("tg.$id")
fun markTg(id: Int) { mark("tg.$id") }
fun tg2Done(id: Int) = done("tg2.$id")
fun markTg2(id: Int) { mark("tg2.$id") }
fun tg3Done(id: Int) = done("tg3.$id")
fun markTg3(id: Int) { mark("tg3.$id") }
fun tg4Done(id: Int) = done("tg4.$id")
fun markTg4(id: Int) { mark("tg4.$id") }
fun mat0Done(id: Int) = done("mat0.$id") fun mat0Done(id: Int) = done("mat0.$id")
fun markMat0(id: Int) { mark("mat0.$id") } fun markMat0(id: Int) { mark("mat0.$id") }
fun matDone(id: Int) = done("mat.$id") fun matDone(id: Int) = done("mat.$id")
@ -280,6 +288,38 @@ fun summarize(content: Content, p: ProgressStore): ProgressSum {
sum.doneUnits += 1 sum.doneUnits += 1
} }
} }
content.tg.forEach { l ->
sum.totalEx += 1
sum.openUnits += 1
if (p.tgDone(l.int("id"))) {
sum.doneEx += 1
sum.doneUnits += 1
}
}
content.tg2.forEach { l ->
sum.totalEx += 1
sum.openUnits += 1
if (p.tg2Done(l.int("id"))) {
sum.doneEx += 1
sum.doneUnits += 1
}
}
content.tg3.forEach { l ->
sum.totalEx += 1
sum.openUnits += 1
if (p.tg3Done(l.int("id"))) {
sum.doneEx += 1
sum.doneUnits += 1
}
}
content.tg4.forEach { l ->
sum.totalEx += 1
sum.openUnits += 1
if (p.tg4Done(l.int("id"))) {
sum.doneEx += 1
sum.doneUnits += 1
}
}
content.mat0.forEach { l -> content.mat0.forEach { l ->
sum.totalEx += 1 sum.totalEx += 1
sum.openUnits += 1 sum.openUnits += 1

View file

@ -1082,6 +1082,30 @@ fun ChoiceLessonScreen(vm: AppViewModel, lesson: J?, onDone: () -> Unit) {
DispatchExercise(vm, spec, vm.tr(lesson.str("exTitleKey")), onDone) DispatchExercise(vm, spec, vm.tr(lesson.str("exTitleKey")), onDone)
} }
@Composable
fun TgQuizScreen(vm: AppViewModel, year: Int, id: Int) {
val lesson = when (year) {
2 -> vm.content.tg2Lesson(id)
3 -> vm.content.tg3Lesson(id)
4 -> vm.content.tg4Lesson(id)
else -> vm.content.tgLesson(id)
} ?: return
val spec = J(org.json.JSONObject().apply {
put("type", "choice")
put("title", vm.tr(lesson.str("exTitleKey")))
put("sub", lesson.str("quizHeadKey"))
put("questions", lesson.o.optJSONArray("quiz"))
})
DispatchExercise(vm, spec, vm.tr(lesson.str("exTitleKey"))) {
when (year) {
2 -> vm.markTg2(id)
3 -> vm.markTg3(id)
4 -> vm.markTg4(id)
else -> vm.markTg(id)
}
}
}
@Composable @Composable
fun FyzQuizScreen(vm: AppViewModel, year: Int, id: Int) { fun FyzQuizScreen(vm: AppViewModel, year: Int, id: Int) {
val lesson = when (year) { val lesson = when (year) {

View file

@ -25,6 +25,7 @@ import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.automirrored.filled.MenuBook import androidx.compose.material.icons.automirrored.filled.MenuBook
import androidx.compose.material.icons.filled.Architecture
import androidx.compose.material.icons.filled.Bolt import androidx.compose.material.icons.filled.Bolt
import androidx.compose.material.icons.filled.Functions import androidx.compose.material.icons.filled.Functions
import androidx.compose.material.icons.filled.Check import androidx.compose.material.icons.filled.Check
@ -225,6 +226,7 @@ private fun SubjectIcon(icon: String, open: Boolean) {
"flask" -> Icon(Icons.Filled.Science, null, tint = tint, modifier = Modifier.size(26.dp)) "flask" -> Icon(Icons.Filled.Science, null, tint = tint, modifier = Modifier.size(26.dp))
"bolt" -> Icon(Icons.Filled.Bolt, null, tint = tint, modifier = Modifier.size(26.dp)) "bolt" -> Icon(Icons.Filled.Bolt, null, tint = tint, modifier = Modifier.size(26.dp))
"function" -> Icon(Icons.Filled.Functions, null, tint = tint, modifier = Modifier.size(26.dp)) "function" -> Icon(Icons.Filled.Functions, null, tint = tint, modifier = Modifier.size(26.dp))
"ruler" -> Icon(Icons.Filled.Architecture, null, tint = tint, modifier = Modifier.size(26.dp))
else -> Icon(Icons.Filled.Lock, null, tint = tint) else -> Icon(Icons.Filled.Lock, null, tint = tint)
} }
} }
@ -348,6 +350,13 @@ private fun subjectSum(vm: AppViewModel, s: J): ProgressSum {
vm.content.fyz3.count { vm.progress.fyz3Done(it.int("id")) } + vm.content.fyz3.count { vm.progress.fyz3Done(it.int("id")) } +
vm.content.fyz4.count { vm.progress.fyz4Done(it.int("id")) } vm.content.fyz4.count { vm.progress.fyz4Done(it.int("id")) }
} }
"tgyears", "tgmap", "tg2map", "tg3map", "tg4map" -> {
sum.totalEx = vm.content.tg.size + vm.content.tg2.size + vm.content.tg3.size + vm.content.tg4.size
sum.doneEx = vm.content.tg.count { vm.progress.tgDone(it.int("id")) } +
vm.content.tg2.count { vm.progress.tg2Done(it.int("id")) } +
vm.content.tg3.count { vm.progress.tg3Done(it.int("id")) } +
vm.content.tg4.count { vm.progress.tg4Done(it.int("id")) }
}
"czechmap" -> { "czechmap" -> {
val litDone = vm.content.lit.count { vm.progress.litDone(it.int("id")) } + val litDone = vm.content.lit.count { vm.progress.litDone(it.int("id")) } +
vm.content.lit2.count { vm.progress.lit2Done(it.int("id")) } + vm.content.lit2.count { vm.progress.lit2Done(it.int("id")) } +
@ -649,6 +658,27 @@ private fun buildSearch(vm: AppViewModel): List<Hit> {
add(vm.tr(l.str("titleKey")), vm.tr("search_lesson"), "fyz4unit${l.int("id")}", extra = "fyzika") add(vm.tr(l.str("titleKey")), vm.tr("search_lesson"), "fyz4unit${l.int("id")}", extra = "fyzika")
add(vm.tr(l.str("titleKey")), vm.tr("search_exercise"), "fyz4ex${l.int("id")}") add(vm.tr(l.str("titleKey")), vm.tr("search_exercise"), "fyz4ex${l.int("id")}")
} }
add(vm.tr("Technická grafika"), vm.tr("search_lesson"), "tgyears", extra = "autocad grafika")
add(vm.tr("tg_year1"), vm.tr("search_lesson"), "tgmap", extra = "rocnik")
add(vm.tr("tg_year2"), vm.tr("search_lesson"), "tg2map", extra = "rocnik")
add(vm.tr("tg_year3"), vm.tr("search_lesson"), "tg3map", extra = "rocnik")
add(vm.tr("tg_year4"), vm.tr("search_lesson"), "tg4map", extra = "rocnik")
vm.content.tg.forEach { l ->
add(vm.tr(l.str("titleKey")), vm.tr("search_lesson"), "tgunit${l.int("id")}", extra = "autocad")
add(vm.tr(l.str("titleKey")), vm.tr("search_exercise"), "tgex${l.int("id")}")
}
vm.content.tg2.forEach { l ->
add(vm.tr(l.str("titleKey")), vm.tr("search_lesson"), "tg2unit${l.int("id")}", extra = "autocad")
add(vm.tr(l.str("titleKey")), vm.tr("search_exercise"), "tg2ex${l.int("id")}")
}
vm.content.tg3.forEach { l ->
add(vm.tr(l.str("titleKey")), vm.tr("search_lesson"), "tg3unit${l.int("id")}", extra = "autocad")
add(vm.tr(l.str("titleKey")), vm.tr("search_exercise"), "tg3ex${l.int("id")}")
}
vm.content.tg4.forEach { l ->
add(vm.tr(l.str("titleKey")), vm.tr("search_lesson"), "tg4unit${l.int("id")}", extra = "autocad")
add(vm.tr(l.str("titleKey")), vm.tr("search_exercise"), "tg4ex${l.int("id")}")
}
add(vm.tr("Chemie"), vm.tr("search_lesson"), "chemmap", extra = "chemie") add(vm.tr("Chemie"), vm.tr("search_lesson"), "chemmap", extra = "chemie")
add(vm.tr("Biologie"), vm.tr("search_lesson"), "biomap", extra = "biologie") add(vm.tr("Biologie"), vm.tr("search_lesson"), "biomap", extra = "biologie")
vm.content.chem.forEach { l -> vm.content.chem.forEach { l ->
@ -848,6 +878,20 @@ fun MatYearsScreen(vm: AppViewModel) {
} }
} }
@Composable
fun TgYearsScreen(vm: AppViewModel) {
DetailScaffold(vm, vm.tr("Technická grafika"), vm.tr("tg_years_sub")) { inner ->
LazyColumn(contentPadding = PaddingValues(top = inner.calculateTopPadding(), bottom = inner.calculateBottomPadding() + 16.dp)) {
item {
NavRow(title = vm.tr("tg_year1"), subtitle = vm.tr("tg_sub"), leading = { Text("1.", style = MaterialTheme.typography.titleMedium) }) { vm.go(Route.TgMap) }
NavRow(title = vm.tr("tg_year2"), subtitle = vm.tr("tg2_sub"), leading = { Text("2.", style = MaterialTheme.typography.titleMedium) }) { vm.go(Route.Tg2Map) }
NavRow(title = vm.tr("tg_year3"), subtitle = vm.tr("tg3_sub"), leading = { Text("3.", style = MaterialTheme.typography.titleMedium) }) { vm.go(Route.Tg3Map) }
NavRow(title = vm.tr("tg_year4"), subtitle = vm.tr("tg4_sub"), leading = { Text("4.", style = MaterialTheme.typography.titleMedium) }) { vm.go(Route.Tg4Map) }
}
}
}
}
@Composable @Composable
fun FyzYearsScreen(vm: AppViewModel) { fun FyzYearsScreen(vm: AppViewModel) {
DetailScaffold(vm, vm.tr("Fyzika"), vm.tr("fyz_years_sub")) { inner -> DetailScaffold(vm, vm.tr("Fyzika"), vm.tr("fyz_years_sub")) { inner ->

View file

@ -18,7 +18,7 @@ Skript vypíše počet lekcí, nebo chyby s cestou a číslem řádku
| Složka | Obsah | | Složka | Obsah |
|---|---| |---|---|
| `pocitacove-site/`, `technicke-vybaveni/`, `obcanska-nauka/`, `fyzika/` | `N-rocnik/`, v nich lekce | | `pocitacove-site/`, `technicke-vybaveni/`, `technicka-grafika/`, `obcanska-nauka/`, `fyzika/` | `N-rocnik/`, v nich lekce |
| `prirodni-vedy/chemie`, `prirodni-vedy/biologie` | lekce | | `prirodni-vedy/chemie`, `prirodni-vedy/biologie` | lekce |
| `cestina/literatura/N-rocnik` | lekce literatury | | `cestina/literatura/N-rocnik` | lekce literatury |
| `cestina/mluvnice` | cvičení z mluvnice | | `cestina/mluvnice` | cvičení z mluvnice |
@ -97,7 +97,7 @@ a smažte `puvodni`.
## Běžná lekce ## Běžná lekce
Sítě, hardware, občanka, literatura, chemie, biologie, fyzika. Sítě, hardware, technická grafika, občanka, literatura, chemie, biologie, fyzika.
```md ```md
--- ---

View file

@ -5,6 +5,12 @@
# cs: bullet # cs: bullet
# en: bullet # en: bullet
--- 2026-10-11
cs: Technická grafika: čtyři ročníky AutoCADu, od výkresu po 3D
cs: V každé lekci je postup, zadání s rozměry a kvíz
en: Technical graphics: four years of AutoCAD, from the drawing sheet to 3D
en: Every lesson has a method, a dimensioned assignment and a quiz
--- 2026-10-07 --- 2026-10-07
cs: Sítě a technické vybavení: doplněné 2. až 4. ročníky, v každém 8 lekcí cs: Sítě a technické vybavení: doplněné 2. až 4. ročníky, v každém 8 lekcí
cs: Výklad a kvíz od VLAN a sestavení počítače po maturitu cs: Výklad a kvíz od VLAN a sestavení počítače po maturitu

View file

@ -11,7 +11,7 @@
| Matematika | Matematika | Mathematics | function | matyears | ano | | Matematika | Matematika | Mathematics | function | matyears | ano |
| Fyzika | Fyzika | Physics | bolt | fyzyears | ano | | Fyzika | Fyzika | Physics | bolt | fyzyears | ano |
| Základy přírodních věd | Základy přírodních věd | Fundamentals of Natural Sciences | flask | scimap | ano | | Základy přírodních věd | Základy přírodních věd | Fundamentals of Natural Sciences | flask | scimap | ano |
| Technická grafika | Technická grafika | Technical Drawing | lock | | ne | | Technická grafika | Technická grafika | Technical Graphics | ruler | tgyears | ano |
| Prezentační grafika | Prezentační grafika | Presentation Graphics | lock | | ne | | Prezentační grafika | Prezentační grafika | Presentation Graphics | lock | | ne |
| Programování | Programování | Programming | lock | | ne | | Programování | Programování | Programming | lock | | ne |
| Programové vybavení | Programové vybavení | Software | lock | | ne | | Programové vybavení | Programové vybavení | Software | lock | | ne |

View file

@ -40,7 +40,7 @@
|---|---|---| |---|---|---|
| welcome_kicker | Graduately | Graduately | | welcome_kicker | Graduately | Graduately |
| welcome_title | Maturita?\nTo dáme. | Maturita?\nWe've got this. | | welcome_title | Maturita?\nTo dáme. | Maturita?\nWe've got this. |
| welcome_body | Procvičování k maturitě v jednom okně. Česky i anglicky, napsané v C studenty ze SSŠVT. | Exam practice in one window. Czech and English, written in C by students from SSŠVT. | | welcome_body | Procvičování k maturitě v jednom okně. Česky i anglicky, napsané studenty ze SSŠVT. | Exam practice in one window. Czech and English, written by students from SSŠVT. |
| welcome_body_android | Procvičování k maturitě v telefonu. Česky i anglicky, stejný obsah jako na počítači. | Exam practice on your phone. Czech and English, the same content as on the computer. | | welcome_body_android | Procvičování k maturitě v telefonu. Česky i anglicky, stejný obsah jako na počítači. | Exam practice on your phone. Czech and English, the same content as on the computer. |
| welcome_body_desktop | Procvičování k maturitě na počítači. Česky i anglicky, stejný obsah jako v telefonu. | Exam practice on your computer. Czech and English, the same content as on your phone. | | welcome_body_desktop | Procvičování k maturitě na počítači. Česky i anglicky, stejný obsah jako v telefonu. | Exam practice on your computer. Czech and English, the same content as on your phone. |
| welcome_body_ios | Nativní procvičování na iPhonu. Česky i anglicky, stejný obsah, rozhraní podle iOS. | Native exam practice on iPhone. Czech and English, the same content, adapted to iOS. | | welcome_body_ios | Nativní procvičování na iPhonu. Česky i anglicky, stejný obsah, rozhraní podle iOS. | Native exam practice on iPhone. Czech and English, the same content, adapted to iOS. |
@ -229,6 +229,20 @@
| fyz3_sub | Elektřina a magnetismus. | Electricity and magnetism. | | fyz3_sub | Elektřina a magnetismus. | Electricity and magnetism. |
| fyz4_sub | Optika, relativita, mikročástice a vesmír. | Optics, relativity, the micro-world and the universe. | | fyz4_sub | Optika, relativita, mikročástice a vesmír. | Optics, relativity, the micro-world and the universe. |
# Technická grafika
| Klíč | Česky | Anglicky |
|---|---|---|
| tg_years_sub | Čtyři ročníky AutoCADu, od výkresu po maturitní zadání. | Four years of AutoCAD, from the drawing sheet to the exam project. |
| tg_year1 | 1. ročník | Year 1 |
| tg_year2 | 2. ročník | Year 2 |
| tg_year3 | 3. ročník | Year 3 |
| tg_year4 | 4. ročník | Year 4 |
| tg_sub | Výkres, souřadnice a první příkazy. | The sheet, coordinates and the first commands. |
| tg2_sub | Úpravy, hladiny, šrafy a kóty. | Editing, layers, hatches and dimensions. |
| tg3_sub | Pohledy, řezy, bloky a tisk. | Views, sections, blocks and plotting. |
| tg4_sub | 3D model a výkres k maturitě. | A 3D model and the exam drawing. |
# Angličtina a němčina # Angličtina a němčina
| Klíč | Česky | Anglicky | | Klíč | Česky | Anglicky |

View file

@ -0,0 +1,6 @@
---
nazev: Sheet size, scale and the title block
popis: A sizes, drawing scale and the title block.
nazev_cviceni: Quiz: sheet and scale
nadpis_kvizu: Check the sheet, the scale and the title block
---

View file

@ -0,0 +1,80 @@
---
id: tg-1-format-a-meritko
nazev: Formát, měřítko a razítko
popis: Řada A, měřítko výkresu a popisové pole.
nazev_cviceni: Kvíz: formát a měřítko
nadpis_kvizu: Ověřte si formát, měřítko a razítko
---
# Výklad
## Řada formátů A
*Papír*
- Základní formát A4 má 210 × 297 mm. Delší strana je na výšku.
- A3 vznikne složením dvou A4: 297 × 420 mm.
- A2 je 420 × 594 mm. Každý větší formát má dvojnásobnou plochu.
- Na škole se součást kreslí nejčastěji na A4 nebo A3.
> Tip: kratší strana většího formátu je delší stranou menšího. A3 je na šířku, A4 na výšku.
## Co znamená měřítko
*Měřítko*
- Měřítko 1:1 znamená, že výkres je ve skutečné velikosti.
- Měřítko 1:2 zmenšuje kresbu na polovinu. Měřítko 2:1 ji zvětšuje na dvojnásobek.
- Kóta se vždy píše ve skutečném rozměru, ne v rozměru nakreslené čáry.
- Do razítka se měřítko zapíše tak, jak se kreslilo, třeba 1:2.
> Tip: díra o průměru 20 mm má na výkresu 1:2 čáru dlouhou 10 mm, ale kóta říká 20.
## Popisové pole
*Razítko*
- Razítko je v pravém dolním rohu. Čte se zprava, když je výkres ve správné poloze.
- Patří do něj název, měřítko, materiál, datum a jméno.
- Číslo výkresu a název součásti se nesmí vyměnit za ozdobný text.
- Rámeček je od okraje papíru odsazený, na školním A4 obvykle o 5 až 10 mm.
> Tip: než začnete kreslit součást, vyhraďte si hladinu pro rámeček a razítko.
## Zadání: rámeček A4
*Cvičení*
- Nakreslete obdélník 210 × 297 a dovnitř rámeček odsazený o 10 mm od každého okraje.
- Vpravo dole vyhraďte razítko 180 × 40 mm, které lícuje s vnitřním rámečkem.
- Do razítka vepište název Destička, měřítko 1:1 a své jméno.
- Soubor uložte jako A4-ramecek.dwg, jednotky milimetry.
> Tip: vnitřní rámeček má 190 × 277 mm. Levý dolní roh dejte do bodu 0,0.
# Kvíz
## Jaké rozměry má formát A4?
- 297 × 420 mm
- [x] 210 × 297 mm
- 420 × 594 mm
- 148 × 210 mm
> A3 je 297 × 420 mm. A4 je polovina této plochy, 210 × 297 mm.
## Co se stane s kótou na výkresu v měřítku 1:2?
- Píše se polovina skutečného rozměru
- [x] Píše se skutečný rozměr
- Kóty se vynechají
- Měřítko se do razítka nepíše
> Kresba je poloviční, číslo na kótě zůstává skutečné. Měřítko 1:2 je v razítku.
## Kam se na výkresu umísťuje razítko?
- Doprostřed plochy
- [x] Do pravého dolního rohu
- Nad součást, vlevo
- Mimo rámeček
> Razítko lícuje s vnitřním rámečkem vpravo dole, aby šlo výkres složit a razítko zůstalo navrchu.
## Jak je velký vnitřní rámeček A4 při odsazení 10 mm?
- 210 × 297 mm
- [x] 190 × 277 mm
- 200 × 287 mm
- 180 × 40 mm
> Od 210 i od 297 se odečte 10 mm z každé strany, tedy 20 mm. 190 × 277 mm.

View file

@ -0,0 +1,6 @@
---
nazev: Line types and line weights
popis: Outlines, hidden edges, centrelines and dimensions.
nazev_cviceni: Quiz: lines
nadpis_kvizu: Name the line
---

View file

@ -0,0 +1,80 @@
---
id: tg-1-druhy-car
nazev: Druhy a tloušťky čar
popis: Obrys, skryté hrany, osy a kóty podle normy.
nazev_cviceni: Kvíz: čáry
nadpis_kvizu: Poznejte druh čáry
---
# Výklad
## Tlustá plná čára
*Obrys*
- Viditelné hrany a obrysy se kreslí souvislou tlustou čarou.
- V AutoCADu jí patří vlastní hladina, třeba OBRYS, s tloušťkou 0,5 mm.
- Tloušťka se nastavuje na hladině, ne u každé čáry zvlášť.
- Obrys nesmí být stejně tenký jako kóta, jinak se výkres nedá číst.
> Tip: hladinu OBRYS nastavte jako aktuální dřív, než začnete kreslit tvar.
## Tenké čáry
*Kóty a hrany*
- Kóty, odkazy, šrafy a pomocné čáry jsou souvislé a tenké, kolem 0,25 mm.
- Skryté hrany, které z daného pohledu nejsou vidět, jsou čárkované a tenké.
- Osa díry nebo válce je čerchovaná: dlouhá čárka, tečka, dlouhá čárka.
- Osa přesahuje obrys jen o kousek, nepřetahuje se přes celý výkres.
> Tip: čárkovaná čára je skrytá hrana. Čerchovaná je osa. Nejsou totéž.
## Jak to nastavit v AutoCADu
*Hladiny*
- Příkaz `_LAYER` otevře správce hladin. Založte OBRYS, SKRYTE, OSA a KOTA.
- U SKRYTE zvolte typ čáry DASHED, u OSA typ CENTER.
- Typ čáry se načítá příkazem `_LINETYPE`. Bez načtení ho hladina nenabídne.
- Měřítko typu čáry `_LTSCALE` zvětší nebo zmenší mezery v čárkování, ať je čára čitelná.
> Tip: když čárkování vypadá jako plná čára, je LTSCALE moc velké nebo moc malé.
## Zadání: tři čáry jedné díry
*Cvičení*
- Nakreslete obdélník 60 × 40 tlustou plnou čarou.
- Svislou osu veďte středem a nechte ji přesáhnout obrys o 3 mm na každou stranu.
- Jednu zadní hranu, která z pohledu není vidět, nakreslete tenkou čárkovanou čarou.
- Každý druh čáry musí ležet na své hladině.
> Tip: osa dlouhá 46 mm při výšce tělesa 40 mm přesahuje o 3 mm nahoře i dole.
# Kvíz
## Jakou čarou se kreslí viditelný obrys?
- Tenkou čárkovanou
- [x] Tlustou plnou
- Tenkou čerchovanou
- Tlustou čerchovanou
> Viditelné hrany jsou souvislé a tlustší než kóty, osy i skryté hrany.
## Co znamená tenká čárkovaná čára?
- Osu díry
- [x] Skrytou hranu
- Obrys
- Šrafu
> Čárkovaná čára je hrana, kterou v daném pohledu nevidíme. Osa je čerchovaná.
## Jakou čarou se kreslí osa válce?
- Tlustou plnou
- Tenkou čárkovanou
- [x] Tenkou čerchovanou
- Vlnovkou
> Osa je dlouhá čárka, tečka, dlouhá čára. V AutoCADu je to typ CENTER.
## Proč má mít obrys vlastní hladinu?
- Aby šel smazat jen razítko
- [x] Aby měla tloušťka a typ čáry jedno místo
- Hladiny v AutoCADu nejsou
- Obrys se kreslí jen od ruky
> Tloušťka i typ se nastaví na hladině. Všechny obrysy je pak mají stejné.

View file

@ -0,0 +1,6 @@
---
nazev: The AutoCAD workspace
popis: Model space, the command line, units and limits.
nazev_cviceni: Quiz: the workspace
nadpis_kvizu: Check the first drawing setup
---

View file

@ -0,0 +1,80 @@
---
id: tg-1-prostredi
nazev: Prostředí AutoCADu
popis: Model, příkazový řádek, jednotky a meze.
nazev_cviceni: Kvíz: prostředí
nadpis_kvizu: Ověřte si první nastavení výkresu
---
# Výklad
## Kam se kreslí
*Model*
- Součást se kreslí v modelu. Papír, rámeček a výřezy patří až do rozvržení.
- Příkazový řádek je dole. Čte se pořád: AutoCAD se ptá na další bod.
- Stisk Enter nebo mezerník zopakuje poslední příkaz.
- Esc příkaz zruší. Neukládejte rozpracovaný příkaz klávesou Esc uprostřed bodu.
> Tip: když AutoCAD „nic nedělá“, podívejte se, na co se příkazový řádek ptá.
## Příkaz, který funguje vždy
*Podtržítko*
- Český AutoCAD má přeložené příkazy. Úsečka se jmenuje ÚSEČKA.
- Mezinárodní jméno se píše s podtržítkem: `_LINE`. Funguje v každé jazykové verzi.
- Na pásu karet je stejný příkaz pod ikonou. Ikona i text dělají totéž.
- V těchto lekcích je u každého kroku mezinárodní příkaz. Naučte se ho psát.
> Tip: `_LINE` a ÚSEČKA spustí stejné kreslení. Podtržítko se hodí, když čeština na klávesnici zlobí.
## Jednotky a meze
*Milimetry*
- `_UNITS` nastavte na desetinné milimetry. Úhly nechte ve stupních.
- Přesnost 0 stačí na celé milimetry, 0,0 když budete potřebovat desetinu.
- `_LIMITS` určí levý dolní a pravý horní roh kreslicí plochy, třeba 0,0 a 420,297.
- `_ZOOM` a volba All ukáže celé meze. Kolečko myši přibližuje ke kurzoru.
> Tip: nový výkres začněte jednotkami. Přepočet z palců na milimetry uprostřed práce nic nespraví.
## Zadání: prázdný výkres A3
*Cvičení*
- Založte soubor v milimetrech a nastavte meze 0,0 až 420,297.
- Příkazem `_RECTANG` nakreslete obrys papíru z bodu 0,0 do bodu 420,297.
- Přibližte vše příkazem `_ZOOM` a volbou Extents.
- Uložte soubor jako A3-prazdny.dwg.
> Tip: Extents přiblíží to, co je nakreslené. All přiblíží meze, i když jsou prázdné.
# Kvíz
## Kde se kreslí tvar součásti?
- V rozvržení, přes razítko
- [x] V modelu
- Jen na pásu karet
- V příkazu PLOT
> Model je prostor součásti. Rozvržení je papír, na který se model později vloží výřezem.
## Co udělá příkaz `_LINE` v českém AutoCADu?
- Nastaví jednotky
- [x] Spustí kreslení úsečky
- Smaže poslední čáru
- Otevře hladiny
> Podtržítko volá mezinárodní příkaz. `_LINE` je úsečka, ať je AutoCAD v jakémkoli jazyce.
## Jakou jednotku má školní výkres?
- Palec
- [x] Milimetr
- Metr
- Pixel
> `_UNITS` nastavte na desetinné milimetry dřív, než zadáte první rozměr.
## Co ukáže `_ZOOM` s volbou Extents?
- Celé nastavené meze, i prázdné
- [x] Všechno, co je nakreslené
- Jen razítko
- Poslední příkaz
> Extents orámuje nakreslené objekty. All ukáže meze výkresu.

View file

@ -0,0 +1,6 @@
---
nazev: Coordinates
popis: Absolute points, relative moves and polar entry.
nazev_cviceni: Quiz: coordinates
nadpis_kvizu: Find the next point
---

View file

@ -0,0 +1,80 @@
---
id: tg-1-souradnice
nazev: Souřadnice
popis: Absolutní bod, relativní posun a polární zápis.
nazev_cviceni: Kvíz: souřadnice
nadpis_kvizu: Dopočítejte další bod
---
# Výklad
## Absolutní souřadnice
*Od počátku*
- Bod 40,25 leží 40 mm vpravo a 25 mm nahoru od počátku 0,0.
- Čárka odděluje X a Y. Desetinná čárka v čísle se v AutoCADu píše tečkou: 10.5
- Osa X míří vpravo, osa Y nahoru. Tak je natočený model při startu.
- Absolutní bod nezávisí na tom, kde jste skončili minule.
> Tip: když se výkres „rozjede“ mimo papír, někdo zadal absolutní bod místo posunu.
## Relativní souřadnice
*Zavináč*
- `@30,0` znamená 30 mm vpravo od posledního bodu, výška se nemění.
- `@0,40` je 40 mm nahoru. `@-20,0` je 20 mm doleva.
- Zavináč se píše před čísla. Bez něj AutoCAD čte absolutní bod.
- Při kreslení `_LINE` se tak skládá tvar bod za bodem.
> Tip: obdélník 70 × 40 z bodu 10,10: `@70,0` pak `@0,40` pak `@-70,0` a zavřít volbou Close.
## Polární souřadnice
*Délka a úhel*
- `@50<90` je úsečka dlouhá 50 mm směrem 90 stupňů, tedy kolmo nahoru.
- Úhel se měří od kladné osy X proti směru hodinových ručiček.
- `@40<0` míří vpravo, `@40<180` vlevo, `@40<270` dolů.
- Špičatá závorka se píše bez mezery. Mezera by příkaz ukončila.
> Tip: úhel 45 stupňů je šikmo vpravo nahoru. Délka je vždy skutečná, ne průmět.
## Zadání: obdélník ze souřadnic
*Cvičení*
- Spusťte `_LINE` v bodě 20,20.
- Pokračujte `@80,0`, potom `@0,50`, potom `@-80,0`.
- Útvar zavřete volbou Close, ne ručním bodem.
- Změřte `_DIST` mezi levým dolním a pravým horním rohem. Má vyjít 94,3 mm, tedy přepona 80 a 50.
> Tip: Close spojí poslední bod s prvním. Ruční bod 20,20 nemusí trefit počátek a obrys zůstane otevřený.
# Kvíz
## Co znamená zápis `@0,40`?
- Bod 0,40 od počátku výkresu
- [x] 40 mm nahoru od posledního bodu
- 40 mm vpravo od počátku
- Úhel 40 stupňů
> Zavináč čte posun od posledního bodu. Nula v X a 40 v Y je čistě nahoru.
## Kam míří `@60<180`?
- 60 mm nahoru
- [x] 60 mm doleva
- 180 mm vpravo
- Do počátku
> Úhel 180 stupňů je záporná osa X, tedy doleva. 60 je délka úsečky.
## Jak AutoCAD pozná desetinné číslo?
- Čárkou: 10,5,0
- [x] Tečkou: 10.5
- Zlomkem 21/2
- Mezerou 10 5
> Čárka odděluje X a Y. Desetina se píše tečkou, třeba 10.5,20.
## Proč útvar zavřít volbou Close?
- Aby se smazala první úsečka
- [x] Aby se poslední bod trefil do prvního
- Close nastaví měřítko
- Close je totéž co Esc
> Ručně opsaný první bod často mine o zlomek milimetru a obrys nejde vyšrafovat.

View file

@ -0,0 +1,6 @@
---
nazev: Lines, circles, arcs and rectangles
popis: The four commands every part starts with.
nazev_cviceni: Quiz: basic objects
nadpis_kvizu: Pick the right command
---

View file

@ -0,0 +1,80 @@
---
id: tg-1-zakladni-entity
nazev: Úsečka, kružnice, oblouk a obdélník
popis: Čtyři příkazy, kterými začíná každá součást.
nazev_cviceni: Kvíz: základní entity
nadpis_kvizu: Vyberte správný příkaz
---
# Výklad
## Úsečka a obdélník
*Hrany*
- `_LINE` chce první a další bod. Končí se Enterem, zavření obrysu volbou Close.
- `_RECTANG` chce dva protilehlé rohy. Z bodu 0,0 a `@90,40` vznikne obdélník 90 × 40.
- Obdélník je jedna uzavřená křivka. Úsečky jsou samostatné objekty.
- Uzavřená křivka se později líp šrafuje a vysouvá do 3D.
> Tip: když budete tvar vysouvat, kreslete ho jako `_RECTANG` nebo uzavřenou `_PLINE`, ne jako čtyři volné úsečky.
## Kružnice
*Díry*
- `_CIRCLE` se nejčastěji zadá středem a poloměrem.
- Volba D přepne na průměr. U díry Ø12 je průměr 12 a poloměr 6.
- Střed díry se kótuje, ne její okraj. Okraj je důsledek průměru.
- Víc stejných děr se nekreslí znovu: první se zkopíruje nebo rozloží do pole.
> Tip: v zadání Ø znamená průměr. Do příkazu s poloměrem dáte polovinu.
## Oblouk
*Zaoblení z příkazu*
- `_ARC` umí oblouk třemi body nebo středem, počátkem a úhlem.
- Zaoblení rohu ale nedělejte obloukem od ruky. Na to je později `_FILLET`.
- Oblouk má směr. Špatné pořadí bodů ho vyklenu na druhou stranu.
- U drážky se oblouk často nahradí `_PLINE` s volbou Arc uprostřed úseček.
> Tip: tři body oblouku zadávejte v pořadí, v jakém oblouk plyne. Prostřední bod je na oblouku, ne střed kružnice.
## Zadání: destička s dírou
*Cvičení*
- `_RECTANG` z 0,0 do `@90,50`.
- Střed destičky je 45,25. Tam `_CIRCLE`, volba D, průměr 16.
- Osu svislou i vodorovnou nechte přesáhnout obrys o 3 mm. Patří na hladinu OSA.
- Uložte jako desticka-90x50.dwg.
> Tip: polovina z 90 je 45 a polovina z 50 je 25. Střed neměřte od oka.
# Kvíz
## Čím nakreslíte obdélník 90 × 40 jedním objektem?
- Čtyřmi úsečkami `_LINE`
- [x] `_RECTANG` a druhým rohem `@90,40`
- `_CIRCLE` s poloměrem 90
- `_ARC` o úhlu 90
> `_RECTANG` chce dva rohy. Relativní `@90,40` je šířka a výška od prvního rohu.
## Zadání říká díra Ø12. Jaký poloměr má kružnice?
- 12
- [x] 6
- 24
- 3
> Průměr je 12, poloměr je polovina. V `_CIRCLE` buď poloměr 6, nebo volba D a průměr 12.
## Kde leží střed destičky 90 × 50, která začíná v 0,0?
- 90,50
- [x] 45,25
- 0,0
- 25,45
> Střed je v polovině šířky a polovině výšky.
## Kdy dát přednost uzavřené křivce před čtyřmi úsečkami?
- Nikdy, úsečka je přesnější
- [x] Když se obrys bude šrafovat nebo vysouvat
- Jen u razítka
- Když je tvar otevřený
> Šrafa i vysunutí potřebují uzavřenou oblast. Čtyři úsečky, které se netrefí, oblast neutvoří.

View file

@ -0,0 +1,6 @@
---
nazev: Snaps, ortho and polar tracking
popis: How to hit an endpoint and draw square.
nazev_cviceni: Quiz: precise drawing
nadpis_kvizu: Pick the snap and the toggle
---

View file

@ -0,0 +1,80 @@
---
id: tg-1-uchopeni
nazev: Úchop, orto a polární trasování
popis: Jak trefit konec čáry a kreslit kolmo.
nazev_cviceni: Kvíz: přesné kreslení
nadpis_kvizu: Vyberte úchop a přepínač
---
# Výklad
## Úchopy
*Koncový bod*
- Úchop přitáhne kurzor ke geometrii. Bez něj minuta minete konec čáry.
- Zapíná se klávesou F3 nebo v stavovém řádku. Nastavení je `_OSNAP`.
- Na začátek stačí koncový bod, střed a střed kružnice.
- Kolmice a tečna se hodí, až budete napojovat čáru na kružnici.
> Tip: úchop Střed u úsečky je její polovina. Střed u kružnice je její osa. Jsou to dva různé úchopy.
## Orto a polární úhel
*F8 a F10*
- Orto, klávesa F8, pustí kurzor jen vodorovně a svisle.
- Polární trasování F10 drží i šikmé úhly, obvykle po 45 nebo po 15 stupních.
- Orto a volné šikmé kreslení nejdou dohromady. Na šikmou čáru orto vypněte.
- Délku při zapnutém ortu napište jen číslem a Enter. Směr určuje myš.
> Tip: vodorovná čára dlouhá 40 mm je F8, kurzor doprava, napsat 40 a Enter. Nemusíte počítat druhý bod.
## Proč se výkres rozpadne
*Minutí*
- Dvě čáry, které se „téměř“ dotýkají, nejdou oříznout ani vyšrafovat.
- Mezera vznikne, když kliknete vedle koncového bodu a úchop je vypnutý.
- `_ZOOM` na roh ukáže mezeru, která na celém výkresu není vidět.
- Opravený roh se napojí úchopem, ne posunem od oka.
> Tip: než odevzdáte výkres, přibližte každý roh. Mezera menší než milimetr na tisku vynikne.
## Zadání: kříž přesně ve středu
*Cvičení*
- Nakreslete obdélník 80 × 60 z bodu 0,0.
- Svislou osu veďte z úchopu Střed dolní hrany do úchopu Střed horní hrany.
- Vodorovnou osu veďte ze Středu levé hrany do Středu pravé.
- Osy se mají protnout v bodě 40,30. Ověřte to `_ID`.
> Tip: `_ID` vypíše souřadnice úchopu. Když průsečík není 40,30, jedna osa minula střed hrany.
# Kvíz
## Která klávesa zapíná úchopy?
- F8
- [x] F3
- F10
- Esc
> F3 jsou úchopy, F8 je orto, F10 je polární trasování.
## Co dělá orto?
- Chytá konce čar
- [x] Drží kreslení ve vodorovném a svislém směru
- Nastaví milimetry
- Maže poslední úsečku
> Se zapnutým ortem kurzor neuhne do šikma. Délku pak stačí napsat číslem.
## Proč dvě čáry, které se na obrazovce dotýkají, nejdou vyšrafovat?
- Šrafa vyžaduje kóty
- [x] Mezi nimi je mezera, konec minul úchop
- Hladina OSA to zakazuje
- Orto je zapnuté
> Od oka minutý konec nechá škvíru. Přiblížení a úchop Koncový bod ji ukážou.
## Který úchop najde polovinu úsečky?
- Střed kružnice
- [x] Střed
- Koncový bod
- Kolmice
> Úchop Střed na úsečce je její polovina. Na kružnici je to jiný úchop, střed kružnice.

View file

@ -0,0 +1,6 @@
---
nazev: Move, copy, rotate and mirror
popis: Change a finished shape instead of drawing it again.
nazev_cviceni: Quiz: editing
nadpis_kvizu: Match the command to the task
---

View file

@ -0,0 +1,80 @@
---
id: tg-1-posun-kopie
nazev: Posun, kopie, otočení a zrcadlení
popis: Úprava hotového tvaru místo kreslení znovu.
nazev_cviceni: Kvíz: úpravy
nadpis_kvizu: Vyberte příkaz podle zadání
---
# Výklad
## Posun a kopie
*Z místa na místo*
- `_MOVE` objekt odnese. Na původním místě nic nezůstane.
- `_COPY` nechá vzor a přidá další. Ptá se na základní bod a pak na nové body.
- Základní bod vyberte úchopem, třeba roh nebo střed. Od oka se kopie rozjede.
- Víc kopií za sebou vznikne opakovaným zadáním dalšího bodu, bez nového příkazu.
> Tip: posun o 30 mm doprava je základní bod kdekoli, druhý bod `@30,0`.
## Otočení
*Kolem bodu*
- `_ROTATE` chce základní bod a úhel. Kladný úhel je proti směru hodin.
- 90 otočí doleva, -90 nebo 270 doprava.
- Volba Reference vezme současný úhel hrany a řekne, jaký má být nový.
- Otáčí se kolem vybraného bodu, ne kolem středu obrazovky.
> Tip: díru v rohu otočíte kolem středu destičky, ne kolem středu díry, jinak odjede z rozteče.
## Zrcadlení
*Souměrnost*
- `_MIRROR` chce dva body osy zrcadlení. Osa nemusí být nakreslená předem.
- Svislá osa jsou dva body se stejným X. Vodorovná dva body se stejným Y.
- Na otázku, zda smazat zdroj, dejte Ne, když má zůstat obě poloviny.
- Text se při zrcadlení může otočit naruby. Proměnná MIRRTEXT s hodnotou 0 nechá text čitelný.
> Tip: souměrnou součást nakreslete z poloviny a zrcadlete. Druhou polovinu neobkreslujte.
## Zadání: druhá díra zrcadlem
*Cvičení*
- Destička 100 × 40, levý dolní roh v 0,0.
- Díru Ø10 dejte středem do bodu 20,20.
- Zrcadlete ji přes svislou osu destičky. Osa prochází body 50,0 a 50,40.
- Zdroj nemažte. Druhá díra má střed v 80,20.
> Tip: 100 minus 20 je 80. Zrcadlo kolem x = 50 převede 20 na 80 a výšku 20 nechá.
# Kvíz
## Čím odnesete objekt, aby na původním místě nezůstal?
- `_COPY`
- [x] `_MOVE`
- `_MIRROR`
- `_ROTATE`
> Kopie zdroj nechá. Posun ho přestěhuje.
## Jaký úhel otočí tvar o 90 stupňů ve směru hodin?
- 90
- [x] -90
- 180
- 45
> Kladný úhel jde proti hodinám. Po směru hodin je záporný, tedy -90.
## Přes co se zrcadlí díra se středem 20,20 na destičce široké 100?
- Přes bod 0,0
- [x] Přes svislou osu x = 50
- Přes vodorovnou osu y = 20
- Přes hranu x = 100
> Osa souměrnosti destičky je uprostřed šířky. 20 a 80 jsou od ní stejně daleko.
## Co má být základní bod posunu?
- Libovolné místo vedle objektu, od oka
- [x] Úchop, třeba roh nebo střed
- Vždy počátek 0,0
- Střed obrazovky
> Úchop podrží rozměr. Kliknutí vedle rohu posune tvar o neznámý kousek navíc.

View file

@ -0,0 +1,6 @@
---
nazev: Assignment: a plate
popis: The whole first-year drawing on one part.
nazev_cviceni: Quiz: the plate
nadpis_kvizu: Check the finished drawing
---

View file

@ -0,0 +1,80 @@
---
id: tg-1-zadani-desticka
nazev: Zadání: destička
popis: Celý výkres z prvního ročníku na jedné součásti.
nazev_cviceni: Kvíz: destička
nadpis_kvizu: Zkontrolujte hotový výkres
---
# Výklad
## Co se odevzdává
*Zadání*
- Destička 120 × 70 mm, tloušťka se nekreslí, jde o jeden pohled.
- Čtyři díry Ø8. Středy jsou 15 mm od levého i pravého kraje a 15 mm od dolního i horního kraje.
- Uprostřed je podélná drážka 40 × 16 se zaoblenými konci. Zatím stačí obdélník, zaoblení přijde ve druháku.
- Výkres je na A4, měřítko 1:1, rámeček a razítko z první lekce.
> Tip: středy děr jsou body 15,15, pak 105,15, pak 15,55 a 105,55. 120 minus 15 je 105, 70 minus 15 je 55.
## Hladiny a čáry
*Pořádek*
- OBRYS je tlustá plná čára. OSA je tenká čerchovaná. KOTA zatím nechte prázdnou.
- Každá díra má svislou i vodorovnou osu, která přesahuje obrys o 3 mm.
- Destička má jednu vodorovnou a jednu svislou osu souměrnosti přes celý tvar.
- Skryté hrany tu nejsou. Pohled je zepředu a díry jsou průchozí, jejich okraj je vidět.
> Tip: průchozí díra v tomto pohledu není čárkovaná. Čárkovaná by byla hrana schovaná za materiálem.
## Postup
*Po řadě*
- Nejdřív rámeček a razítko, potom obrys `_RECTANG` 120 × 70.
- Jednu díru `_CIRCLE` o průměru 8 a další tři `_COPY` nebo dvě `_MIRROR`.
- Drážku `_RECTANG` 40 × 16 se středem ve středu destičky. Její levý dolní roh je 40,27.
- Osy dokreslete úchopem Střed. `_DIST` mezi protilehlými dírami ve vodorovném směru má být 90.
> Tip: střed destičky je 60,35. Drážka sahá 20 mm doleva a doprava a 8 mm nahoru a dolů.
## Kontrola před odevzdáním
*Co musí sedět*
- V razítku je název Destička, měřítko 1:1 a materiál, třeba ocel.
- Žádná čára obrysu neleží na hladině OSA a žádná osa není plná.
- Přiblížené rohy nemají mezeru. Kružnice se dotýká svých os ve středu.
- Soubor se jmenuje desticka-120x70.dwg a je v milimetrech.
> Tip: vypněte hladinu OBRYS. Zůstat mají jen osy a rámeček. Zapněte ji zpět a totéž udělejte s OSA.
# Kvíz
## Kde leží střed pravé horní díry?
- 15,15
- [x] 105,55
- 120,70
- 60,35
> Od pravého kraje 15 mm je x = 105. Od horního kraje 15 mm je y = 55.
## Jaká je vodorovná rozteč levé a pravé díry?
- 120
- 15
- [x] 90
- 105
> 105 minus 15 je 90. Tolik má ukázat `_DIST` mezi středy.
## Kam patří obrys destičky?
- Na hladinu OSA
- [x] Na hladinu OBRYS, tlustou plnou čarou
- Čárkovaně, protože díry jsou průchozí
- Do razítka
> Viditelný obrys je tlustá plná čára. Osa je samostatná hladina.
## Proč se průchozí díra v tomto pohledu nekreslí čárkovaně?
- Čárkovaná čára je zakázaná
- [x] Její okraj je z pohledu vidět
- Díra se kreslí jen osou
- Měřítko je 1:2
> Čárkovaně se kreslí hrana, kterou materiál zakrývá. Okraj díry v čelním pohledu vidíme.

View file

@ -0,0 +1,6 @@
---
nazev: Trim, extend and offset
popis: Fix lines that overshoot, and keep a constant gap.
nazev_cviceni: Quiz: trim and offset
nadpis_kvizu: Pick the command and the distance
---

View file

@ -0,0 +1,80 @@
---
id: tg-2-orez-ekvidistanta
nazev: Ořez, prodloužení a ekvidistanta
popis: Úprava čar, které přesahují nebo mají stálý odstup.
nazev_cviceni: Kvíz: ořez a odstup
nadpis_kvizu: Vyberte příkaz a vzdálenost
---
# Výklad
## Ořez a prodloužení
*Na hranu*
- `_TRIM` uřízne kus objektu po hraně, kterou vyberete jako řeznou.
- V novějším AutoCADu stačí Enter bez výběru hran a řeže se o všechno, co čára protíná.
- `_EXTEND` dělá opak: natáhne čáru až k vybrané hraně.
- Maže se ta část, na kterou kliknete. Klik na špatnou stranu uřízne to, co mělo zůstat.
> Tip: když ořez „nebere“, čáry se ve skutečnosti neprotínají. Přibližte roh a napojte ho úchopem.
## Ekvidistanta
*Stálý odstup*
- `_OFFSET` vytvoří rovnoběžnou křivku v zadané vzdálenosti.
- Hodí se na tloušťku stěny, rámeček i osazení. Zadáte vzdálenost a stranu.
- U kružnice vznikne soustředná kružnice. Průměr se změní o dvojnásobek odstupu.
- Ekvidistanta obdélníku udělá menší nebo větší obdélník se stejnými rohy, ne se zaoblením.
> Tip: stěna tlustá 8 mm je ekvidistanta obrysu o 8 mm dovnitř. U kružnice Ø40 tak vznikne Ø24.
## Co neřeže
*Otevřený roh*
- Ořez potřebuje průsečík. Dvě čáry, které se jen míjejí, se neoříznou.
- Nejdřív je prodlužte nebo je nakreslete znovu s úchopem, teprve pak řežte.
- Ekvidistanta otevřené křivky zůstane otevřená. Rohy se samy nedovřou.
- Po ořezu zkontrolujte, že nezůstaly pahýly kratší než milimetr. Ty `_ERASE` smaže.
> Tip: pahýl po ořezu je pořád objekt. Na tisku udělá tečku, která do výkresu nepatří.
## Zadání: rámeček stěny
*Cvičení*
- Vnější obdélník 100 × 60. Ekvidistantou o 8 mm dovnitř udělejte vnitřní obrys.
- Vnitřní obdélník má tedy 84 × 44.
- Čáry, které po dalších úpravách přesáhnou vnější roh, ořízněte.
- Oba obrysy nechte na hladině OBRYS. Kóty zatím nepřidávejte.
> Tip: 100 minus dvakrát 8 je 84. 60 minus 16 je 44. Když vnitřek vyjde jinak, odstup šel ven, ne dovnitř.
# Kvíz
## Který příkaz uřízne přesahující kus čáry?
- `_OFFSET`
- [x] `_TRIM`
- `_EXTEND`
- `_MOVE`
> Ořez bere kus za řeznou hranou. Prodloužení čáru naopak natahuje.
## Ekvidistanta kružnice Ø40 o 8 mm dovnitř má průměr?
- 32
- [x] 24
- 48
- 8
> Poloměr klesne o 8, průměr o 16. 40 minus 16 je 24.
## Proč ořez na dvou čarách nic neudělá?
- Orto je zapnuté
- [x] Čáry se neprotínají
- Chybí razítko
- Objekt je kružnice
> Bez průsečíku není kde řezat. Nejdřív čáry napojte, potom řežte.
## Vnitřní obrys obdélníku 100 × 60 po ekvidistantě 8 mm dovnitř je?
- 100 × 60
- 92 × 52
- [x] 84 × 44
- 108 × 68
> Z šířky i výšky se ubere 8 mm z každé strany, tedy 16 mm. 84 × 44.

View file

@ -0,0 +1,6 @@
---
nazev: Fillets and chamfers
popis: A corner by a radius or by two distances.
nazev_cviceni: Quiz: corners
nadpis_kvizu: Work out the corner
---

View file

@ -0,0 +1,80 @@
---
id: tg-2-zaobleni-zkoseni
nazev: Zaoblení a zkosení
popis: Roh poloměrem nebo dvěma vzdálenostmi.
nazev_cviceni: Kvíz: rohy
nadpis_kvizu: Dopočítejte roh
---
# Výklad
## Zaoblení
*Poloměr*
- `_FILLET` spojí dvě úsečky obloukem. Volba R nastaví poloměr.
- Poloměr 8 znamená oblouk o poloměru 8 mm, ne průměr.
- R0 ostrý roh jen napojí, oblouk nevznikne. Hodí se na nedotažené čáry.
- Příkaz si poloměr pamatuje. Než zaoblíte jiný roh, R zkontrolujte.
> Tip: u drážky se zaobleným koncem je poloměr polovina šířky drážky. Drážka 16 mm má R8.
## Zkosení
*Dvě vzdálenosti*
- `_CHAMFER` srazí roh úsečkou. Volba D zadá dvě vzdálenosti od vrcholu.
- Stejné vzdálenosti 2 a 2 srazí roh pod 45 stupňů, pokud jsou hrany kolmé.
- Různé vzdálenosti, třeba 2 a 4, dají šikminu, která není 45 stupňů.
- Zkosení se kótuje délkou a úhlem, nebo oběma délkami. Ne poloměrem.
> Tip: na výkresu je zkosení 2 × 45°. V příkazu jsou to vzdálenosti 2 a 2, ne úhel napsaný místo D.
## Kdy který roh
*Dílec*
- Zaoblení bývá tam, kde se obrábí frézou nebo kde ostrá hrana vadí.
- Zkosení bývá na hraně díry a na konci hřídele, aby díl navedl protikus.
- Na jednom rohu nedávejte zaoblení i zkosení. Zadání říká jen jedno.
- Po zaoblení se změní délka rovné hrany. Kóta rovné části už není celá šířka.
> Tip: hrana dlouhá 40 mm se dvěma zaobleními R5 na koncích má rovný úsek 30 mm.
## Zadání: drážka a sražení
*Cvičení*
- Obdélník 80 × 30. Na obou kratších koncích `_FILLET` s R8, na obou dlouhých hranách.
- Vznikne oválná drážka: rovný střed je dlouhý 64 mm, šířka zůstane 30? Pozor, R8 na výšce 30 nejde, šířka drážky musí být 16.
- Překreslete tvar jako drážku 64 × 16 a konce zaoblete R8.
- Jeden vnější roh destičky 80 × 50 mimo drážku srazte `_CHAMFER` 2 a 2.
> Tip: poloměr zaoblení konce drážky se rovná polovině její šířky. 16 / 2 = 8.
# Kvíz
## Co nastaví `_FILLET` volbou R8?
- Zkosení 8 × 8
- [x] Oblouk o poloměru 8 mm
- Průměr 8
- Osazení o 8 mm
> R je poloměr oblouku. Průměr oblouku by byl 16.
## Jak v příkazu zadáte zkosení 2 × 45° na kolmém rohu?
- R2
- [x] Vzdálenosti 2 a 2
- Úhel 45 místo obou vzdáleností, bez délek
- Ekvidistantu 2
> Stejné vzdálenosti na kolmých hranách dají 45 stupňů. Do příkazu patří délky.
## Jaký poloměr má konec drážky široké 16 mm?
- 16
- [x] 8
- 4
- 32
> Konec je půlkruh. Jeho poloměr je polovina šířky.
## Co udělá zaoblení R0?
- Smaže roh
- [x] Napojí čáry ostrým rohem
- Udělá kružnici
- Nastaví měřítko
> Nulový poloměr je způsob, jak dvě minuté čáry spojit do ostrého rohu.

View file

@ -0,0 +1,6 @@
---
nazev: Layers
popis: Colour, linetype and weight in one place.
nazev_cviceni: Quiz: layers
nadpis_kvizu: Decide which layer an object belongs on
---

View file

@ -0,0 +1,80 @@
---
id: tg-2-hladiny
nazev: Hladiny
popis: Barva, typ čáry a tloušťka na jednom místě.
nazev_cviceni: Kvíz: hladiny
nadpis_kvizu: Rozhodněte, co patří na kterou hladinu
---
# Výklad
## Proč hladiny
*Pořádek*
- Hladina nese barvu, typ čáry i tloušťku. Objekt, který na ní vznikne, je zdědí.
- Obrys, osa, skrytá hrana, šrafa, kóta a rámeček jsou samostatné hladiny.
- Vypnutá hladina na obrazovce zmizí, ale tisknout se pořád může. Zmrazená se netiskne a nepřepočítává.
- Zamčená hladina je vidět, ale nejde omylem posunout.
> Tip: kóty nikdy nekreslete na OBRYS. Až budete obrys měnit, kóty by odjely s ním.
## Aktuální hladina
*Než kliknete*
- Nový objekt padne na aktuální hladinu. Je to ta, která je ve správci vybraná jako současná.
- `_LAYER` založí hladinu. Poklepáním ji nastavíte jako aktuální.
- Objekt na špatné hladině přesuňte ve vlastnostech, příkaz `_PROPERTIES` nebo horní lišta.
- Barvu a typ čáry nechte ByLayer. Barva nastavená na objektu se se hladinou přestane řídit.
> Tip: ByLayer znamená „ber to, co říká hladina“. Je to výchozí a na školním výkresu má tak zůstat.
## Názvy, které obstojí
*Úmluva*
- OBRYS, OSA, SKRYTE, SRAFA, KOTA, RAM, TEXT. Krátce a bez mezer.
- OBRYS je bílá nebo černá, tloušťka 0,50. Ostatní tenké, 0,25, každá svou barvou.
- SKRYTE má typ DASHED, OSA typ CENTER. Ostatní Continuous.
- Hladinu 0 nemažte a nekreslete na ni součást. Je systémová.
> Tip: hladina 0 je schovaná v blocích. Součást na ní se později špatně barví.
## Zadání: šest hladin
*Cvičení*
- V souboru destičky založte OBRYS, OSA, SKRYTE, SRAFA, KOTA a RAM.
- Obrys přesuňte na OBRYS, osy na OSA, rámeček na RAM.
- OSA musí mít typ CENTER a po `_LTSCALE` 0,5 nebo 1 musí být čerchování vidět.
- Vypněte OBRYS. Na obrazovce smí zůstat osy a rámeček, nic z tvaru.
> Tip: když osa vypadá plně, typ čáry není načtený, nebo je LTSCALE mimo rozumné měřítko.
# Kvíz
## Kam patří kóta?
- Na hladinu OBRYS
- [x] Na vlastní hladinu KOTA
- Na hladinu 0
- Kamkoli, hladina je jen barva pozadí
> Kóta má vlastní tenkou čáru a při úpravě obrysu nesmí odjet s ním.
## Co znamená ByLayer?
- Objekt barvu hladiny ignoruje
- [x] Objekt si bere barvu a typ čáry z hladiny
- Hladina je zamčená
- Objekt se netiskne
> ByLayer je správné nastavení. Barva „natvrdo“ na objektu se hladinou už neřídí.
## Čím se liší vypnutá a zmrazená hladina?
- Ničím
- [x] Zmrazená se navíc netiskne a výkres ji nepočítá
- Vypnutá se nedá znovu zapnout
- Zmrazená je vidět červeně
> Vypnutí je jen obrazovka. Zmrazení hladinu vyřadí i z tisku a z přepočtu.
## Proč nekreslit součást na hladinu 0?
- Hladina 0 nejde použít
- [x] Je systémová a v blocích se chová jinak
- Nepouští tlusté čáry
- Smí na ni jen razítko
> Hladina 0 má zvláštní roli uvnitř bloků. Součást patří na pojmenované hladiny.

View file

@ -0,0 +1,6 @@
---
nazev: Hatches
popis: Sectioned material, hatch scale and a closed boundary.
nazev_cviceni: Quiz: hatches
nadpis_kvizu: Decide what gets hatched
---

View file

@ -0,0 +1,80 @@
---
id: tg-2-srafy
nazev: Šrafy
popis: Řez materiálem, měřítko šrafy a uzavřená oblast.
nazev_cviceni: Kvíz: šrafy
nadpis_kvizu: Rozhodněte, co se šrafuje
---
# Výklad
## Co šrafa říká
*Materiál*
- Šrafa v řezu znamená materiál, který řezná rovina proťala.
- Ocel se na školním výkresu šrafuje tenkými čarami pod 45 stupňů.
- Dva sousední díly mají šrafu na opačnou stranu, nebo jinou rozteč.
- Díra, drážka a prázdno se nešrafují. Není tam materiál.
> Tip: šrafa pod 45 stupni nesmí být rovnoběžná s obrysem. Když je obrys šikmý, úhel šrafy změňte.
## Příkaz
*Uzavřená oblast*
- `_HATCH` a vzor ANSI31. Klikněte dovnitř uzavřené oblasti.
- Oblast musí být dovřená. Mezera v rohu šrafu zastaví nebo ji vylije ven.
- Měřítko vzoru zvětší rozteč čar. Moc hustá šrafa na tisku zčerná.
- Šrafa patří na hladinu SRAFA, tenkou čarou. Ne na OBRYS.
> Tip: asociativní šrafa se přizpůsobí, když obrys později natáhnete. Na školní práci ji nechte zapnutou.
## Co se v podélném řezu nešrafuje
*Výjimky*
- Hřídel, žebro, šroub a pero v podélném řezu zůstávají bez šrafy.
- V příčném řezu se tatáž hřídel šrafuje. Rozhoduje směr řezu, ne součást.
- Tenká stěna řezaná podélně se šrafuje. Žebro ne, aby nepůsobilo jako plný kus.
- Obrys šrafované plochy je pořád tlustá čára. Šrafa ho nenahrazuje.
> Tip: podélný řez hřídele ukáže osazení obrysem. Šrafa by z hřídele udělala zdánlivě plný hranol.
## Zadání: řez destičkou
*Cvičení*
- Destičku 80 × 20 v řezu A-A vyšrafujte ANSI31, měřítko tak, aby rozteč byla zhruba 2 až 3 mm.
- Díru Ø10 uprostřed nešrafujte. Šrafa končí na její hraně.
- Šrafu dejte na hladinu SRAFA. Vypnutím této hladiny musí zmizet jen šrafa, obrys zůstane.
- Když šrafa vyteče ven, najděte mezeru v obrysu a roh napojte.
> Tip: jedna oblast vlevo od díry a jedna vpravo. Obě mohou být jedna šrafa, pokud příkaz umí víc oblastí.
# Kvíz
## Co znamená šrafa v řezu?
- Skrytou hranu
- [x] Materiál proťatý řeznou rovinou
- Závit
- Měřítko 1:2
> Šrafuje se jen to, co řez skutečně prochází. Díra je prázdná.
## Jaký vzor se na škole používá pro ocel?
- Plná výplň
- [x] ANSI31, tenké čáry pod 45 stupňů
- Tečkování
- Čerchovaná osa
> ANSI31 je běžný strojařský vzor. Úhel změňte, jen když by splynul s obrysem.
## Proč šrafa vyteče mimo součást?
- Je zapnuté orto
- [x] Obrys není uzavřený
- Chybí kóta
- Hladina je ByLayer
> I malá mezera v rohu oblast otevře. Napojte roh a šrafu opakujte.
## Šrafuje se hřídel v podélném řezu?
- Ano, vždy
- [x] Ne
- Jen když má drážku
- Jen ve 3D
> Hřídel, žebro a šroub se v podélném řezu nechávají prázdné. V příčném řezu se hřídel šrafuje.

View file

@ -0,0 +1,6 @@
---
nazev: Linear dimensions
popis: The real size, extension lines and a dimension style.
nazev_cviceni: Quiz: linear dimensions
nadpis_kvizu: Read the dimension correctly
---

View file

@ -0,0 +1,80 @@
---
id: tg-2-koty-linearni
nazev: Lineární kóty
popis: Skutečný rozměr, pomocné čáry a styl kót.
nazev_cviceni: Kvíz: lineární kóty
nadpis_kvizu: Přečtěte kótu správně
---
# Výklad
## Co kóta říká
*Skutečný rozměr*
- Kóta je skutečný rozměr součásti, ne délka čáry na papíře.
- Na výkresu 1:2 je čára poloviční a číslo zůstává celé.
- `_DIMLINEAR` chce počátek první pomocné čáry, druhé a polohu kótovací čáry.
- Body chytejte úchopem. Kóta z bodu vedle rohu je o milimetr špatně a tváří se přesně.
> Tip: číslo na kótě nepřepisujte ručně. Když nesedí, je špatně geometrie, ne text.
## Vzhled
*Čitelné číslo*
- Pomocné čáry odstupují od obrysu asi o 1 mm a přesahují kótovací čáru.
- Sousední kóty mají stejný odstup, třeba 10 mm od obrysu a 7 mm mezi sebou.
- Číslo se píše nad kótovací čáru, ne přes obrys. Kóta neprotíná šrafu, když to jde jinak.
- `_DIMSTYLE` nastaví šipky, písmo a jednotky jednou pro celý výkres.
> Tip: výška písma na A4 bývá 3,5 mm. Menší text se na tisku nedá číst.
## Řetězec a základna
*Víc rozměrů*
- Řetězec klade kóty za sebou. Součet dílčích kót má dát celkový rozměr.
- Kóta od základny měří všechno od jedné hrany. Hodí se na rozteče od dorazu.
- Celkový rozměr a součet dílčích se na jedné hraně neopakují bez důvodu.
- Kóta patří tam, odkud se rozměr bude vyrábět, ne doprostřed šrafy.
> Tip: 20 + 45 + 15 = 80. Když součet nesedí s celkovou kótou, jedna pomocná čára minula roh.
## Zadání: destička 120 × 70
*Cvičení*
- Okótujte šířku 120 a výšku 70.
- Vodorovně přidejte 15 od levého kraje ke středu díry a 90 mezi středy děr.
- Svisle 15 od dolní hrany ke středu díry.
- Všechny kóty na hladinu KOTA. `_DIST` mezi rohy musí ukázat stejná čísla jako kóty.
> Tip: kótujte středy děr, ne jejich okraje. Okraj určí až kóta průměru.
# Kvíz
## Co se píše do lineární kóty na výkresu 1:2?
- Polovina skutečného rozměru
- [x] Skutečný rozměr
- Dvojnásobek
- Měřítko 1:2 místo čísla
> Měřítko mění délku čáry na papíře. Číslo kóty je rozměr součásti.
## Proč nepřepisovat text kóty ručně?
- AutoCAD to zakazuje vždy
- [x] Špatné číslo skrývá chybu geometrie
- Text musí být v palcích
- Kóta by zmizela z hladiny
> Správná kóta měří geometrii. Ruční text 120 na čáře dlouhé 119 je lež.
## Od čeho se kótuje poloha díry?
- Od okraje kružnice
- [x] Od středu
- Od osy razítka
- Od nejbližší šrafy
> Výroba potřebuje střed. Průměr díry je samostatná kóta.
## Co má platit pro řetězec 20, 45 a 15 na součásti dlouhé 80?
- Součet má být 100
- [x] Součet má být 80
- Celková kóta se vynechá vždy
- Řetězec se kreslí čerchovaně
> 20 + 45 + 15 = 80. Nesoulad znamená minutý úchop na některé pomocné čáře.

View file

@ -0,0 +1,6 @@
---
nazev: Diameter, radius and angle dimensions
popis: The diameter symbol, a fillet radius and a chamfer angle.
nazev_cviceni: Quiz: diameter and angle
nadpis_kvizu: Match the symbol to the size
---

View file

@ -0,0 +1,80 @@
---
id: tg-2-koty-prumeru
nazev: Kóty průměru, poloměru a úhlu
popis: Značka průměru, poloměr zaoblení a úhel zkosení.
nazev_cviceni: Kvíz: průměr a úhel
nadpis_kvizu: Doplňte značku ke správnému rozměru
---
# Výklad
## Průměr a poloměr
*Díra a oblouk*
- `_DIMDIAMETER` kótuje kružnici. Před číslo patří značka průměru.
- `_DIMRADIUS` kótuje oblouk. Před číslo patří R.
- Díra má kótu průměru, i když jste ji kreslili poloměrem. Výroba vrtá průměrem.
- Zaoblení rohu má kótu poloměru. Jedno R na výkresu platí pro všechny stejné rohy, když to poznámka říká.
> Tip: díru Ø8 nekótujte jako R4. Nástroj se jmenuje podle průměru.
## Úhel
*Zkosení a klín*
- `_DIMANGULAR` měří úhel mezi dvěma úsečkami nebo obloukem.
- Zkosení 2 × 45° se často zapíše poznámkou, ne obloukovou kótou v každém rohu.
- Úhel se měří ve stupních. 45 stupňů je polovina pravého úhlu.
- Kóta úhlu nesmí překrýt číslo sousední délky. Odsuňte ji dál od vrcholu.
> Tip: pravý úhel se na strojařském výkresu obvykle nekótuje. 90 stupňů se předpokládá.
## Kolik desetin
*Přesnost*
- Školní kóta celého milimetru nemá zbytečné desetinné nuly, pokud styl neříká jinak.
- Průměr a poloměr zaokrouhlete stejně jako délky. Nemíchejte 8 a 8,00 bez důvodu.
- `_DIMSTYLE` nastaví přesnost i značky najednou. Neupravujte každou kótu ručně.
- Kóta, která ukazuje 7,99 místo 8, minula střed. Geometrii opravte, text ne.
> Tip: 7,99 je skoro jistě úchop vedle středu. `_ID` středu díry to ukáže.
## Zadání: díra a roh
*Cvičení*
- Na destičce okótujte díru Ø8 příkazem `_DIMDIAMETER`.
- Zaoblení R8 na drážce okótujte `_DIMRADIUS` jednou. K ostatním stejné poznámkou.
- Zkosení 2 × 45° zapište k příslušné hraně.
- Žádná kóta průměru nesmí ukazovat 4 ani R8 u díry, která se vrtá.
> Tip: čtyři stejné díry se kótují jednou, s poznámkou 4× Ø8, plus rozteč středů.
# Kvíz
## Jak se kótuje vrtaná díra o průměru 8 mm?
- R8
- R4
- [x] Ø8
- 8 bez značky, jako délka
> Vrták se volí podle průměru. Poloměr by výrobce přepočítával a snadno spletl.
## Co znamená R8?
- Průměr 8
- [x] Poloměr zaoblení 8 mm
- Rozteč 8 mm
- Tloušťka čáry 8
> R je poloměr oblouku. U díry se R nepoužívá.
## Kóta díry ukazuje 7,99. Co s tím?
- Přepsat text na 8
- [x] Opravit geometrii, střed minul úchop
- Smazat všechny kóty
- Změnit měřítko na 1:2
> Text by lež zakryl. Střed díry má ležet přesně tam, kde ho kóty polohy uvádějí.
## Jak jednou kótou popsat čtyři stejné díry Ø8?
- Čtyřikrát opsat Ø8
- [x] 4× Ø8 a rozteč středů
- Jen jednu díru a ostatní nechat bez kóty
- R4 krát čtyři
> Počet, průměr a poloha středů stačí. Opakovat stejnou kótu u každé díry výkres zanáší.

View file

@ -0,0 +1,6 @@
---
nazev: Rectangular and polar arrays
popis: Repeating holes in a row or on a circle.
nazev_cviceni: Quiz: arrays
nadpis_kvizu: Work out the spacing and the count
---

View file

@ -0,0 +1,80 @@
---
id: tg-2-pole
nazev: Obdélníkové a polární pole
popis: Opakování děr v řadě nebo na kružnici.
nazev_cviceni: Kvíz: pole
nadpis_kvizu: Dopočítejte rozteč a počet
---
# Výklad
## Obdélníkové pole
*Řady a sloupce*
- `_ARRAYRECT` rozkopíruje objekt do řádků a sloupců.
- Zadává se počet sloupců, počet řádků a rozteč, ne celkový rozměr.
- Rozteč 30 při třech sloupcích dá od první osy ke třetí 60 mm.
- Pole může zůstat svázané. Úprava jedné díry se propíše do ostatních.
> Tip: tři díry v řadě mají dvě mezery. Celková délka je dvojnásobek rozteče, ne trojnásobek.
## Polární pole
*Na kružnici*
- `_ARRAYPOLAR` chce střed otáčení, počet prvků a úhel vyplnění.
- Čtyři díry po 360 stupních jsou po 90 stupních.
- Vzorová díra musí ležet na roztečné kružnici dřív, než pole spustíte.
- Střed pole je střed příruby, ne střed první díry.
> Tip: roztečná kružnice Ø60 má poloměr 30. Vzorová díra leží třeba v bodě 30,0.
## Roztečná kružnice se nekreslí tlustě
*Osa*
- Kružnice, na které leží středy děr, je tenká čerchovaná osa.
- Není to hrana součásti a nepatří na OBRYS.
- Kótuje se jejím průměrem, často jako Ø60, a počtem děr.
- Samotné díry mají svou kótu průměru jen jednou.
> Tip: na výkresu čtete 4× Ø8 na Ø60. Osm je díra, 60 je kružnice středů.
## Zadání: čtyři díry na kružnici
*Cvičení*
- Příruba je kružnice Ø80, střed 0,0.
- Vzorovou díru Ø8 dejte středem do 30,0.
- `_ARRAYPOLAR` kolem 0,0, čtyři prvky, 360 stupňů.
- Roztečnou kružnici Ø60 dejte na hladinu OSA. Ověřte `_DIST` mezi sousedními středy.
> Tip: sousední středy svírají 90 stupňů na poloměru 30. Vzdálenost je 30 × √2, asi 42,4 mm.
# Kvíz
## Tři díry v řadě mají rozteč 30. Jak daleko je první osa od třetí?
- 30
- 90
- [x] 60
- 120
> Mezi třemi dírami jsou dvě mezery. 2 × 30 = 60.
## Kam se umísťuje vzorová díra pro pole na Ø60?
- Do středu příruby
- [x] Na poloměr 30 od středu
- 60 mm od středu
- Kamkoli, pole si poloměr dopočítá
> Ø60 znamená poloměr 30. Střed vzorové díry musí na této kružnici už ležet.
## Čím je nakreslená kružnice středů děr?
- Tlustým obrysem
- [x] Tenkou čerchovanou osou
- Šrafou
- Kótovací čarou
> Není to hrana materiálu. Je to osa rozteče a patří na hladinu OSA.
## Co znamená zápis 4× Ø8 na Ø60?
- Čtyři díry o průměru 60
- [x] Čtyři díry Ø8, jejich středy leží na Ø60
- Osazení 4 mm
- Zkosení 8 × 60
> První průměr je díra, druhý je roztečná kružnice.

View file

@ -0,0 +1,6 @@
---
nazev: Assignment: a flange
popis: A drawing with an offset, a hole pattern, a hatch and dimensions.
nazev_cviceni: Quiz: the flange
nadpis_kvizu: Check the flange before you hand it in
---

View file

@ -0,0 +1,80 @@
---
id: tg-2-zadani-priruba
nazev: Zadání: příruba
popis: Výkres s ekvidistantou, polem děr, šrafou a kótami.
nazev_cviceni: Kvíz: příruba
nadpis_kvizu: Zkontrolujte přírubu před odevzdáním
---
# Výklad
## Tvar
*Rozměry*
- Příruba Ø100, střed 0,0. Středová díra Ø40.
- Čtyři díry Ø9 na roztečné kružnici Ø70, po 90 stupních.
- Vnější hrana má zkosení 1 × 45°, které v tomto pohledu vidíte jako tenkou kružnici Ø98.
- Tloušťka příruby 12 mm se okótuje v druhém pohledu nebo v řezu. V čelním pohledu je kružnice.
> Tip: rozteč Ø70 znamená vzorovou díru ve vzdálenosti 35 mm od středu.
## Řez
*Aby byla vidět tloušťka*
- Druhý pohled je řez přes osu. Ukáže tloušťku 12 a průchod díry Ø40.
- V řezu se šrafuje materiál příruby. Díra Ø40 zůstane prázdná.
- Díry Ø9 v tomto řezu nemusí vyjít všechny. Řezná rovina bere dvě protilehlé, nebo žádnou, podle úhlu.
- Zvolte řez rovinou, která prochází dvěma protilehlými dírami Ø9, ať je v řezu vidět i jejich průchod.
> Tip: rovina pod úhlem 0 stupňů vezme díry na ose X. Jejich průchod je Ø9 skrz tloušťku 12.
## Kóty a hladiny
*Jednou*
- Kóty: Ø100, Ø40, 4× Ø9 na Ø70, tloušťka 12, zkosení 1 × 45°.
- OBRYS, OSA, SRAFA, KOTA, RAM. Typy čar jako ve druháku.
- Razítko: Příruba, 1:1, ocel.
- Formát A4 na šířku nebo A3, když se řez vedle čela nevejde čitelně.
> Tip: kóta 4× Ø9 se neopakuje u každé díry. Roztečná kružnice má vlastní kótu Ø70.
## Kontrola
*Před tiskem*
- `_DIST` od středu k ose díry Ø9 je 35.
- Šrafa nezasahuje do díry Ø40 ani do děr Ø9.
- Vypnutí hladiny KOTA nechá čistý tvar. Čísla nezmizí z obrysu, protože na něm nemají být.
- Soubor priruba.dwg, jednotky milimetry, žádná kóta přepsaná ručně.
> Tip: když kóta Ø100 ukazuje 99,9, vnější kružnice nemá průměr 100. Opravte kružnici, ne text.
# Kvíz
## Jak daleko od středu leží osa díry na roztečné kružnici Ø70?
- 70
- [x] 35
- 9
- 100
> Rozteč se kótuje průměrem. Poloměr, tedy vzdálenost středu díry, je 35.
## Jak jednou kótou popsat čtyři malé díry?
- Ø9
- Ø70
- [x] 4× Ø9
- R4,5
> Počet krát průměr. Poloha je až kóta roztečné kružnice.
## Co se v řezu příruby nešrafuje?
- Těleso příruby
- [x] Průchod díry Ø40
- Obrys
- Razítko se šrafuje vždy
> Šrafuje se materiál. Díra je prázdná, šrafa končí na její hraně.
## Kóta vnějšího průměru ukazuje 99,9. Co uděláte?
- Přepíšete ji na 100
- [x] Opravíte kružnici na Ø100
- Změníte měřítko na 1:2
- Smažete řez
> Kóta měří geometrii. Ruční text by zakryl, že kružnice je špatně.

View file

@ -0,0 +1,6 @@
---
nazev: Views and first-angle projection
popis: Front, top and side views the way they are drawn here.
nazev_cviceni: Quiz: views
nadpis_kvizu: Put the view in the right place
---

View file

@ -0,0 +1,80 @@
---
id: tg-3-pohledy
nazev: Pohledy a evropské promítání
popis: Nárys, půdorys a bokorys tak, jak se kreslí u nás.
nazev_cviceni: Kvíz: pohledy
nadpis_kvizu: Umístěte pohled na správné místo
---
# Výklad
## Tři základní pohledy
*Nárys*
- Nárys je pohled zepředu. Vybírá se tak, aby ukázal tvar co nejlíp.
- Půdorys je pohled shora. Bokorys je pohled zleva.
- V evropském promítání leží půdorys pod nárysem, ne nad ním.
- Bokorys zleva leží vpravo od nárysu. Předmět si představte překlopený k vám.
> Tip: americké promítání má půdorys nahoře. Na českém školním výkresu se nekreslí.
## Co se v pohledu opakuje
*Stejná hrana*
- Výška nárysu a výška bokorysu je stejné číslo. Šířka nárysu a šířka půdorysu taky.
- Hloubka půdorysu se rovná šířce bokorysu. Pomůže si 45stupňová pomocná čára.
- Skrytá hrana se v pohledu, kde není vidět, kreslí tenkou čárkovanou čarou.
- Hrana, která v daném pohledu splývá s obrysem, se podruhé nekreslí.
> Tip: když je nárys vysoký 40, bokorys nemůže být vysoký 36. Někde chybí hrana nebo měřítko.
## Zarovnání
*Jedna osa*
- Pohledy se zarovnají. Svislé hrany nárysu a půdorysu leží na stejných svislicích.
- Vodorovné hrany nárysu a bokorysu leží na stejných vodorovných přímkách.
- Mezi pohledy nechte mezeru na kóty, třeba 30 až 40 mm. Pohledy se nesmí překrývat.
- Osa souměrnosti prochází všemi pohledy, ve kterých je součást souměrná.
> Tip: `_XLINE` pod 45 stupňů přenese hloubku z půdorysu do bokorysu. Po dokreslení ji smažte nebo dejte na pomocnou hladinu.
## Zadání: kvádr s osazením
*Cvičení*
- Kvádr 60 × 40 × 30. Zepředu je na něm osazení: pravá část je o 10 mm nižší, v délce 20 mm.
- Nárys je 60 široký a 30 vysoký. Půdorys pod ním je 60 × 40.
- Bokorys vpravo je 40 široký a 30 vysoký. Osazení v něm vyjde jako skrytá nebo viditelná hrana podle směru.
- Pohledy zarovnejte. Výška 30 musí sedět v nárysu i v bokorysu.
> Tip: osazení dlouhé 20 a nižší o 10 znamená, že v nárysu je horní hrana 40 mm v plné výšce a 20 mm ve výšce 20.
# Kvíz
## Kam se v evropském promítání kreslí půdorys?
- Nad nárys
- [x] Pod nárys
- Vlevo od nárysu
- Místo bokorysu
> Evropské promítání klade pohled shora pod pohled zepředu. Nahoře by byl americký zvyk.
## Co musí mít nárys a bokorys společné?
- Šířku
- [x] Výšku
- Hloubku jako jediné číslo bez převodu
- Razítko
> Výška předmětu je v obou pohledech stejná. Hloubka se přenáší mezi půdorysem a bokorysem.
## Jak se kreslí hrana, kterou v daném pohledu není vidět?
- Tlustou plnou
- [x] Tenkou čárkovanou
- Čerchovanou osou
- Nezobrazuje se nikdy
> Skrytá hrana je čárkovaná. Vynechat ji smíte jen tam, kde by výkres zbytečně zanesla a norma to dovolí.
## Kvádr je vysoký 30. Jak vysoký je jeho bokorys?
- 40
- [x] 30
- 60
- Podle měřítka jinak
> Výška se mezi nárysem a bokorysem nemění. Měřítko je pro celý výkres jedno.

View file

@ -0,0 +1,6 @@
---
nazev: Sections and cross-sections
popis: The cutting plane, the arrows and what gets hatched.
nazev_cviceni: Quiz: sections
nadpis_kvizu: Read the cutting plane
---

View file

@ -0,0 +1,80 @@
---
id: tg-3-rezy
nazev: Řezy a průřezy
popis: Řezná rovina, šipky a co se šrafuje.
nazev_cviceni: Kvíz: řezy
nadpis_kvizu: Přečtěte řeznou rovinu
---
# Výklad
## Úplný řez
*Rovina A-A*
- Řez ukáže vnitřek, který by jinak byl samá čárkovaná čára.
- Řezná rovina se v pohledu označí tlustou čerchovanou čarou se šipkami a písmeny, třeba A.
- Obraz řezu se popíše A-A. Šipky říkají, kterým směrem se díváme.
- Materiál proťatý rovinou se šrafuje. Prázdné díry ne.
> Tip: šipky řezu míří na plochu, kterou uvidíte. Obrácené šipky otočí celý obraz.
## Poloviční řez
*Souměrná součást*
- Souměrná součást smí mít půl pohledu a půl řezu v jednom obrazu.
- Dělí je osa. Pohled bývá nad osou nebo vlevo, řez pod osou nebo vpravo.
- Na ose mezi polovinou pohledu a řezu se nekreslí tlustý obrys.
- Skryté hrany v neřezané polovině se často vynechají, protože řez už vnitřek ukázal.
> Tip: hřídel s dírou na ose je typický poloviční řez. Nahoře obrys, dole díra a šrafa.
## Co řezem není
*Průřez*
- Průřez ukáže jen tvar v řezné rovině, bez toho, co leží za ní.
- Řez ukáže i hrany za rovinou. Proto je na řezu víc čar než na průřezu.
- Tenký průřez se smí nakreslit přímo do pohledu, pootočený na místě.
- Žebro řezané podélně se nešrafuje ani v úplném řezu.
> Tip: když za rovinou vidíte další osazení, je to řez. Když je tam jen vyšrafovaný profil, je to průřez.
## Zadání: pouzdro
*Cvičení*
- Pouzdro je válec Ø50, díra Ø30, délka 40. Nakreslete nárys jako úplný řez A-A osou.
- V řezu vyšrafujte mezikruží. Díra Ø30 zůstane prázdná po celé délce 40.
- Šipky A umístěte do půdorysu nebo do místa, odkud je rovina jasná.
- Kóty Ø50, Ø30 a 40. Hřídel to není, šrafa tu být má.
> Tip: tloušťka stěny je (50 − 30) / 2 = 10 mm. V řezu je vidět vlevo i vpravo od díry.
# Kvíz
## Co říkají šipky u řezné roviny?
- Tloušťku čáry
- [x] Směr pohledu na řez
- Měřítko šrafy
- Počet děr
> Obraz řezu je to, co bychom viděli ve směru šipek. Obrácené šipky obraz otočí.
## Šrafuje se díra Ø30 v řezu pouzdra?
- Ano, je uprostřed
- [x] Ne, není tam materiál
- Jen v měřítku 1:2
- Jen když je pouzdro z oceli
> Šrafuje se stěna. Průchozí díra zůstane bílá.
## Čím se liší průřez od řezu?
- Průřez se nešrafuje
- [x] Průřez neukazuje hrany za řeznou rovinou
- Řez nemá písmena
- Průřez je vždy v měřítku 2:1
> Řez dokreslí i to, co leží za rovinou. Průřez je jen proťatý tvar.
## Kam se u souměrného polovičního řezu kreslí řez?
- Přes celý obraz
- [x] Jen na jednu stranu od osy
- Mimo pohled, bez označení
- Do razítka
> Druhá polovina zůstane pohledem. Dělí je osa, ne tlustá hrana.

View file

@ -0,0 +1,6 @@
---
nazev: Blocks
popis: A repeated part as one object with a base point.
nazev_cviceni: Quiz: blocks
nadpis_kvizu: Insert the block correctly
---

View file

@ -0,0 +1,80 @@
---
id: tg-3-bloky
nazev: Bloky
popis: Opakovaný díl jako jeden objekt se základním bodem.
nazev_cviceni: Kvíz: bloky
nadpis_kvizu: Vložte blok správně
---
# Výklad
## K čemu blok je
*Jeden díl*
- Blok je pojmenovaná skupina objektů, která se vkládá jako jeden kus.
- Šroub, značka nebo razítko se nekreslí pokaždé znovu.
- Úprava definice bloku se propíše do všech vložení. Kopie by zůstaly staré.
- Blok patří do výkresu. `_WBLOCK` ho navíc uloží do vlastního souboru.
> Tip: čtyři stejné šrouby jsou čtyři vložení jednoho bloku, ne čtyři překreslené šrouby.
## Základní bod
*Kam se chytá*
- `_BLOCK` se zeptá na jméno, základní bod a objekty.
- Základní bod je místo, za které budete blok vkládat. U šroubu třeba průsečík osy a dosedací plochy.
- Špatný základní bod posune každé vložení o stejnou chybu.
- Objekty bloku nedávejte na hladinu 0, pokud nemají přebírat barvu místa vložení. Na škole nechte jejich vlastní hladiny.
> Tip: základní bod chytejte úchopem. Bod „někde u šroubu“ se při vložení mine o několik milimetrů.
## Vložení
*Místo, měřítko, úhel*
- `_INSERT` vybere jméno, bod vložení, měřítko a otočení.
- Měřítko 1 a úhel 0 vloží blok tak, jak byl nakreslen.
- Měřítko 2 ho zvětší. Na výkresu 1:1 se měřítko bloku nemění, mění se až měřítko výřezu.
- Rozbití bloku příkazem `_EXPLODE` z něj zase udělá obyčejné čáry. Dělejte to jen když máte měnit jediné vložení.
> Tip: rozbitý blok se už neaktualizuje s definicí. Rozbijte ho, jen když opravdu chcete výjimku.
## Zadání: šroub M8 jako blok
*Cvičení*
- V nárysu nakreslete zjednodušený šroub: dřík Ø8 dlouhý 20 a hlava široká 13 vysoká 5,5.
- Základní bod dejte na osu, do dosedací plochy pod hlavou.
- Blok pojmenujte SROUB-M8 a vložte ho dvakrát, po 40 mm.
- Změňte délku dříku v definici na 25. Obě vložení se musí prodloužit.
> Tip: dosedací plocha je rozhraní hlavy a dříku. Od ní se měří, jak hluboko šroub sedí.
# Kvíz
## Čím se liší blok od obyčejné kopie?
- Ničím
- [x] Úprava definice se propíše do všech vložení
- Blok nejde otočit
- Kopie zabere méně místa
> Kopie jsou nezávislé. Vložení bloku sdílejí jednu definici.
## Co je základní bod bloku?
- Střed razítka
- [x] Bod, za který se blok vkládá
- Vždy 0,0 výkresu
- Pravý horní roh objektů
> Špatný základní bod posune každé vložení. Chytejte ho úchopem na osu nebo na dosedací plochu.
## Kdy blok rozbít příkazem `_EXPLODE`?
- Vždy po vložení
- [x] Jen když jedno vložení má být výjimka
- Aby se zmenšil soubor
- Před každým tiskem
> Rozbitý blok se s definicí už neaktualizuje. Ostatní vložení nechte celé.
## Měřítko vložení 1 na výkresu 1:1 znamená?
- Blok se kreslí poloviční
- [x] Blok se vloží ve velikosti, v jaké byl nakreslen
- Blok se převrátí
- Měřítko razítka se změní na 1:2
> Měřítko výkresu řeší až výřez na papíře. Blok součásti nechte v měřítku 1.

View file

@ -0,0 +1,6 @@
---
nazev: Attributes and the parts list
popis: Text in a block that changes with every insert.
nazev_cviceni: Quiz: attributes
nadpis_kvizu: Read the parts list
---

View file

@ -0,0 +1,80 @@
---
id: tg-3-atributy
nazev: Atributy a kusovník
popis: Text v bloku, který se mění s každým vložením.
nazev_cviceni: Kvíz: atributy
nadpis_kvizu: Přečtěte kusovník
---
# Výklad
## Atribut je popisek bloku
*Značka*
- Atribut je text uložený v bloku. Při každém vložení se zeptá znovu.
- `_ATTDEF` založí značku, výzvu a výchozí hodnotu. Značka je třeba OZN.
- Do bloku se atribut vloží spolu s geometrií. Samotný atribut na výkresu nic neopakuje.
- Hodnotu už vloženého bloku změníte `_ATTEDIT` nebo dvojklikem, ne přepsáním čáry.
> Tip: značka OZN není text, který se tiskne. Tiskne se hodnota, třeba 1 nebo M8×20.
## Kusovník
*Co je na výkresu*
- Kusovník je tabulka nad razítkem. Řádek je jedna položka sestavy.
- Sloupce bývají pozice, název, počet, materiál nebo norma a rozměr.
- Pozice v kolečku na výkresu musí souhlasit s řádkem tabulky.
- Počet se počítá z vložení, ne od oka. Dva stejné šrouby jsou počet 2, ne dva řádky.
> Tip: tabulku `_TABLE` dejte na hladinu TEXT nebo RAM. Čáry tabulky nejsou obrys součásti.
## Pořadí
*Nejdřív definice*
- Nejdřív nakreslete díl, přidejte atribut, teprve pak z toho udělejte blok.
- Atribut přidaný až po vytvoření bloku se do starých vložení sám nedostane.
- `_BATTMAN` nebo nové definování bloku vložení srovná. Na škole je jistější blok založit znovu.
- Výchozí hodnota atributu je nápověda. U šroubu třeba M8×20, a při vložení ji smíte změnit.
> Tip: prázdná hodnota v kusovníku znamená, že jste při vložení výzvu odklepli bez textu.
## Zadání: tři položky
*Cvičení*
- Sestava má přírubu (pozice 1, 1 kus, ocel), šroub M8×20 (pozice 2, 4 kusy) a matici M8 (pozice 3, 4 kusy).
- Šroub je blok s atributem OZN. Čtyři vložení mají stejnou hodnotu.
- Kusovník nad razítkem má tři řádky. Pozice 2 má počet 4, ne 1.
- Odkazové čáry z koleček 1, 2 a 3 míří na správný díl a nekříží se bez důvodu.
> Tip: čtyři matice jsou pořád jedna položka. Do tabulky nepište čtyři řádky se stejným šroubem.
# Kvíz
## Co se při vložení bloku s atributem ptá znovu?
- Barva hladiny
- [x] Hodnota atributu, třeba označení
- Základní bod definice
- Měřítko výkresu
> Geometrie bloku zůstává. Mění se text, který jste založili jako atribut.
## Čtyři stejné šrouby v kusovníku jsou?
- Čtyři řádky
- [x] Jeden řádek s počtem 4
- Pozice 1 až 4
- Atribut bez bloku
> Stejný díl je jedna položka. Počet říká, kolikrát je vložený.
## Kdy se atribut musí založit?
- Až po tisku
- [x] Před vytvořením bloku, spolu s geometrií
- Jen v razítku
- Atribut nejde uložit do bloku
> Atribut přidaný později se do existující definice sám nepřidá.
## Kam patří kusovník?
- Přes nárys
- [x] Nad razítko
- Na hladinu OBRYS
- Mimo rámeček
> Čte se spolu s razítkem. Čáry tabulky nejsou hrany součásti.

View file

@ -0,0 +1,6 @@
---
nazev: Layouts and viewports
popis: The sheet of paper that looks into the model.
nazev_cviceni: Quiz: viewports
nadpis_kvizu: Set the viewport scale
---

View file

@ -0,0 +1,80 @@
---
id: tg-3-rozvrzeni
nazev: Rozvržení a výřezy
popis: Papír, na kterém leží pohled do modelu.
nazev_cviceni: Kvíz: výřezy
nadpis_kvizu: Nastavte měřítko výřezu
---
# Výklad
## Model a papír
*Dva prostory*
- V modelu je součást v milimetrech 1:1. Papír je rozvržení, záložka nad příkazovým řádkem.
- Na papír přijde rámeček, razítko a výřez. Výřez je okno do modelu.
- Dvojklik dovnitř výřezu přepne do modelu. Dvojklik ven vrátí papír.
- Kóty součásti nechte v modelu. Razítko kreslete v rozvržení, ať má na papíře stálou velikost.
> Tip: rámeček nakreslený v modelu se při změně měřítka výřezu zmenší spolu se součástí. Proto patří na papír.
## Měřítko výřezu
*1:2 na papíře*
- Výřez má vlastní měřítko. Součást v modelu zůstává 1:1.
- Měřítko 1:2 znamená, že 1 mm na papíře je 2 mm na součásti.
- Ve stavovém řádku výřezu se měřítko vybírá ze seznamu. Starší zápis je `_ZOOM` a `1/2xp`.
- Výřez zamkněte, ať kolečko myši měřítko omylem nerozhodí.
> Tip: nezamčený výřez je nejčastější důvod, proč ráno výkres není 1:1, i když včera byl.
## Co je vidět
*Hladiny ve výřezu*
- Hladinu lze ve výřezu zmrazit a v modelu ji nechat. Pomocné čáry tak na papír nejdou.
- Rámeček výřezu dejte na hladinu VYREZ a tu před tiskem vypněte. Na papíře zůstane jen obsah.
- Jeden výkres smí mít víc výřezů: čelo, řez, detail v jiném měřítku.
- Detail 2:1 je druhý výřez. V razítku se pak píše měřítko hlavní, detail má vlastní popisku.
> Tip: detail zvětšený 2:1 nekreslete znovu. Je to stejný model v druhém výřezu.
## Zadání: A3 a měřítko 1:2
*Cvičení*
- Rozvržení nastavte na A3 na šířku. Rámeček a razítko nakreslete v rozvržení.
- Výřez ukazuje přírubu Ø100 v měřítku 1:2. Na papíře má mít průměr 50 mm.
- Výřez zamkněte. Hladinu jeho rámečku vypněte.
- `_DIST` na papíře přes průměr příruby má ukázat 50, ne 100.
> Tip: měření v rozvržení, mimo výřez, čte milimetry papíru. 100 mm součásti v měřítku 1:2 je na papíře 50 mm.
# Kvíz
## Kde se kreslí tvar součásti v měřítku 1:1?
- V rozvržení
- [x] V modelu
- V razítku
- V hladině VYREZ
> Model zůstává skutečný. Měřítko pro papír nastavuje až výřez.
## Součást Ø100 ve výřezu 1:2 má na papíře průměr?
- 100 mm
- [x] 50 mm
- 200 mm
- 1 mm
> 1:2 zmenšuje na polovinu. Kóta ve modelu pořád říká 100.
## Proč výřez zamknout?
- Aby nešel tisknout
- [x] Aby kolečko myši nezměnilo měřítko
- Zamknutí smaže model
- Aby šel rámeček smazat
> Nezamčený výřez se při zoomu rozhodí a výkres už není v měřítku z razítka.
## Kam patří rámeček a razítko?
- Do modelu, na hladinu OBRYS
- [x] Do rozvržení
- Do definice bloku šroubu
- Mimo papír
> V rozvržení mají stálou velikost bez ohledu na měřítko výřezu.

View file

@ -0,0 +1,6 @@
---
nazev: Plotting and PDF
popis: The sheet, the plot area and a black pen.
nazev_cviceni: Quiz: plotting
nadpis_kvizu: Choose the plotter settings
---

View file

@ -0,0 +1,80 @@
---
id: tg-3-tisk
nazev: Tisk a PDF
popis: Papír, oblast tisku a černobílé pero.
nazev_cviceni: Kvíz: tisk
nadpis_kvizu: Vyberte nastavení plotru
---
# Výklad
## Plotr
*Na papír nebo do PDF*
- `_PLOT` tiskne aktuální rozvržení. Oblast tisku nechte Layout, ne Extents.
- Tiskárna DWG To PDF uloží výkres, který jde odevzdat bez posunu měřítka.
- Formát papíru musí sedět s rozvržením. A3 v tisku a A4 v rozvržení ořízne razítko.
- Měřítko tisku z rozvržení je 1:1. Měřítko součásti už drží výřez.
> Tip: tisk 1:2 z rozvržení, které už má výřez 1:2, zmenší výkres podruhé. Na papíře bude 1:4.
## Pero
*Černá čára*
- Tabulka per monochrome.ctb tiskne vše černě a tloušťku bere z hladin.
- Barevný tisk ve škole nechte jen na náhled. Odevzdává se černobílý výkres.
- Tloušťka obrysu 0,5 mm a tenká čára 0,25 mm musí být v tabulce nebo na hladině vidět.
- Náhled tisku ukáže, jestli razítko neleze z papíru. Bez náhledu netiskněte.
> Tip: když je na PDF všechno vlásečnicové, tloušťky hladin se netisknou. V `_PLOT` je zapněte.
## Co do PDF nepatří
*Čistý výkres*
- Rámeček výřezu je vypnutý. Pomocné konstrukce taky.
- Kóty jsou čitelné a nejsou přes šrafu, pokud to šlo jinak.
- PDF pojmenujte jako výkres, třeba priruba-A3.pdf, ne Plot1.pdf.
- Vytiskněte i kontrolní kópii na papír, když učitel odevzdání na papíře chce.
> Tip: otevřete PDF a změřte rámeček A3. Má mít 420 × 297 mm. Jinak je špatně formát nebo měřítko tisku.
## Zadání: PDF příruby
*Cvičení*
- Rozvržení A3, výřez 1:1 nebo 1:2 podle toho, co se vejde i s kótami.
- `_PLOT`, tiskárna DWG To PDF, oblast Layout, měřítko 1:1, pero monochrome.ctb.
- Náhled zkontroluje, že razítko je celé a šrafa není černá plocha.
- Soubor uložte jako priruba-A3.pdf vedle dwg.
> Tip: hustá šrafa v náhledu znamená velké měřítko vzoru nebo malé. Vraťte se do `_HATCH` a rozteč zvětšete.
# Kvíz
## Jaké měřítko tisku se dává při tisku rozvržení?
- Stejné jako měřítko výřezu, znovu
- [x] 1:1
- Fit to paper
- 2:1, ať je výkres větší
> Měřítko součásti už má výřez. Tisk papíru je 1:1, jinak se měřítko zdvojí.
## K čemu je monochrome.ctb?
- Zvětší písmo
- [x] Tiskne černě a dodrží tloušťky
- Zamkne výřez
- Smaže hladinu OSA
> Barevné čáry na obrazovce jsou pro práci. Odevzdává se černý výkres s tlustým obrysem.
## Proč nenechat oblast tisku na Extents?
- Extents je rychlejší
- [x] Vzalo by i objekty mimo papír a rozhodilo by měřítko
- Extents netiskne kóty
- Extents vyžaduje 3D
> Layout tiskne papír tak, jak jste ho složili. Extents hledá vše nakreslené a měřítko si dopočítá samo.
## Co má mít rámeček A3 v hotovém PDF?
- 210 × 297 mm
- [x] 420 × 297 mm
- 100 × 70 mm
- Libovolný rozměr, rozhoduje obrazovka
> A3 je 420 × 297 mm. Když PDF vyjde menší, je špatně formát papíru nebo měřítko tisku.

View file

@ -0,0 +1,6 @@
---
nazev: Isometric drawing
popis: A pictorial view that does not shrink edges the way perspective does.
nazev_cviceni: Quiz: isometrics
nadpis_kvizu: Pick the axis and the ellipse
---

View file

@ -0,0 +1,80 @@
---
id: tg-3-izometrie
nazev: Izometrie
popis: Názorný obraz, ve kterém se rozměry nezkreslují stejně jako v perspektivě.
nazev_cviceni: Kvíz: izometrie
nadpis_kvizu: Vyberte osu a elipsu
---
# Výklad
## Tři osy
*120 stupňů*
- Izometrie má tři osy po 120 stupních. Svislá zůstává svislá.
- Délky se nanášejí ve skutečné velikosti. Není to perspektiva, hrany se do dálky nezkracují.
- `_ISODRAFT` přepne kreslicí rovinu. F5 cyklí mezi levou, pravou a horní rovinou.
- Orto v izometrii drží čáry podél aktuálních os, ne podél obyčejného X a Y.
> Tip: než nakreslíte hranu, podívejte se, která izorovina svítí. Čára v špatné rovině neleží na stěně.
## Kružnice je elipsa
*Isokružnice*
- Kružnice v izometrii se kreslí jako elipsa. `_ELLIPSE` a volba Isocircle.
- Nejdřív F5 na rovinu, ve které kružnice leží. Horní díra chce horní rovinu.
- Průměr se zadává skutečný. Elipsa ho zobrazí zkoseně, kóta zůstává Ø.
- Obyčejná kružnice `_CIRCLE` v izometrii je chyba. Na papíře by byla pořád kulatá a neladila by s osami.
> Tip: díra na horní stěně a díra na přední stěně jsou dvě různě natočené elipsy. F5 mezi nimi přepněte.
## K čemu izometrie je
*Názornost*
- Izometrie nenahrazuje nárys a řez. Výrobu řídí okótované pohledy.
- Na školní práci bývá izometrie v rohu, bez kót nebo jen s hlavními.
- Skryté hrany se v izometrii často vynechají, ať obraz zůstane čitelný.
- Tlustý obrys nechte na viditelných hranách. Osy děr smíte naznačit tenčeji.
> Tip: když se izometrie neshoduje s nárysem, platí nárys. Izometrii překreslete.
## Zadání: kvádr s dírou
*Cvičení*
- V izometrii nakreslete kvádr 60 × 40 × 30.
- Na horní stěně je díra Ø16 uprostřed. Použijte isokružnici v horní rovině.
- Soustředně naznačte tenčí elipsu, jen pokud by šlo o zahloubení. Tady zahloubení není.
- Porovnejte rozměry s nárysem téhož kvádru. 60, 40 a 30 musí sedět na obou.
> Tip: střed horní stěny najdete v polovině šířky a hloubky. Elipsa se středem v rohu je špatně.
# Kvíz
## Čím se v izometrii kreslí kružnice?
- `_CIRCLE`
- [x] `_ELLIPSE` s volbou Isocircle
- `_ARC` o 360 stupňů
- `_POLYGON`
> Obyčejná kružnice zůstane kulatá a s izometrickými osami neladí.
## Co přepíná klávesa F5 při zapnutém `_ISODRAFT`?
- Hladiny
- [x] Izorovina: levá, pravá, horní
- Měřítko tisku
- Orto
> Každá stěna má vlastní natočení elipsy. F5 vybere stěnu, na kterou kreslíte.
## Zkracují se v izometrii hrany směrem dozadu?
- Ano, jako v perspektivě
- [x] Ne, délky se nanášejí skutečné
- Jen svislé
- Jen při měřítku 1:2
> Izometrie není perspektiva. Hrana dlouhá 60 mm se nanese jako 60 mm.
## Co platí, když izometrie nesedí s nárysem?
- Platí izometrie, je názornější
- [x] Platí okótovaný nárys
- Oba se nechají a učitel si vybere
- Smaže se razítko
> Výrobu určují pohledy a kóty. Izometrie je doplněk a musí se jim přizpůsobit.

View file

@ -0,0 +1,6 @@
---
nazev: Assignment: a sleeve
popis: A sectioned front view, a second view, dimensions and an A3 plot.
nazev_cviceni: Quiz: the sleeve
nadpis_kvizu: Check the sleeve drawing
---

View file

@ -0,0 +1,80 @@
---
id: tg-3-zadani-pouzdro
nazev: Zadání: pouzdro
popis: Nárys v řezu, půdorys, kóty a tisk na A3.
nazev_cviceni: Kvíz: pouzdro
nadpis_kvizu: Zkontrolujte výkres pouzdra
---
# Výklad
## Tvar
*Rozměry*
- Pouzdro je dutý válec. Vnější Ø60, díra Ø36, délka 80.
- Na pravém konci je osazení: vnější Ø48 v délce 20. Díra Ø36 jde skrz.
- Na Ø60 jsou čtyři díry M6 do hloubky 12, na roztečné kružnici Ø48. Nejsou průchozí.
- Závit M6 se v nárysu kreslí zjednodušeně: velký průměr tenkou čarou, malý tlustou, v délce 12 mm.
> Tip: rozteč děr M6 je Ø48, tedy 24 mm od osy. Hloubka 12 není délka pouzdra.
## Pohledy
*Řez a bok*
- Nárys je úplný řez osou. Šrafuje se stěna, díra Ø36 zůstane prázdná.
- Půdorys nebo bokorys ukáže čtyři díry M6 na Ø48. Jednu okótujte 4× M6 a hloubku 12.
- Evropské promítání: druhý pohled pod nárysem nebo vpravo, zarovnaný.
- Izometrii přidejte vpravo dole, bez kót, ať je tvar jasný.
> Tip: v řezu osou jsou vidět dvě protilehlé díry M6, pokud rovina A-A jimi prochází. Hloubka 12 se kótuje tady.
## Výkres
*A3*
- Model 1:1. Rozvržení A3, měřítko výřezu 1:1, tisk 1:1, monochrome.ctb.
- Hladiny OBRYS, OSA, SKRYTE, SRAFA, KOTA, ZAVIT, RAM.
- Razítko: Pouzdro, ocel, 1:1. Kóty Ø60, Ø36, Ø48, délka 80, osazení 20 a Ø48, 4× M6 hloubka 12.
- Závitová hladina je tenká. Není to obrys válce.
> Tip: malý průměr závitu M6 je zhruba 5 mm. Tenká čára velkého průměru je 6 mm. Neměňte je za Ø36.
## Kontrola
*Odevzdání*
- Stěna v řezu má tloušťku (60 − 36) / 2 = 12 mm.
- Osazení dlouhé 20 nešrafujte jinak než zbytek stěny. Je to pořád jeden kus.
- PDF priruba nahraďte souborem pouzdro-A3.pdf. Razítko je celé na papíře.
- Žádná kóta není přepsaná. `_DIST` přes vnější průměr dá 60.
> Tip: dva kusy by měly opačný sklon šrafy. Tady je kus jeden, šrafa má jeden směr.
# Kvíz
## Jaká je tloušťka stěny pouzdra Ø60 s dírou Ø36?
- 24 mm
- [x] 12 mm
- 36 mm
- 6 mm
> Rozdíl průměrů je 24 mm materiálu na obě strany. Na jednu stěnu připadá 12 mm.
## Jak se zjednodušeně kreslí závit M6?
- Obě čáry tlusté
- [x] Velký průměr tenkou čarou, malý tlustou
- Jen osou
- Šrafou ANSI31
> Tenká čára je velký průměr 6 mm. Tlustá je malý průměr, u M6 zhruba 5 mm.
## Kam patří čtyři díry M6?
- Průchozí skrz Ø36
- [x] Do hloubky 12 mm na roztečné kružnici Ø48
- Na osazení Ø48 jako drážka
- Do razítka
> Nejsou to průchozí díry hlavní dutiny. Hloubka 12 a rozteč Ø48 jsou v zadání.
## Proč má šrafa pouzdra jeden směr?
- Dva směry jsou zakázané vždy
- [x] Je to jeden kus
- Řez je poloviční
- Měřítko je 1:2
> Opačný sklon by říkal, že se dotýkají dva díly. Osazení je pořád totéž pouzdro.

View file

@ -0,0 +1,6 @@
---
nazev: Model space in 3D
popis: Axes, the user coordinate system and orbiting the model.
nazev_cviceni: Quiz: space
nadpis_kvizu: Find the axis and the AutoCAD edition
---

View file

@ -0,0 +1,80 @@
---
id: tg-4-prostor
nazev: Modelový prostor ve 3D
popis: Osy, uživatelský souřadný systém a obíhání kolem modelu.
nazev_cviceni: Kvíz: prostor
nadpis_kvizu: Najděte osu a verzi AutoCADu
---
# Výklad
## Tři osy
*X, Y, Z*
- K ose X a Y přibude Z. Na obrazovce při startu míří Z k vám.
- Pravidlo pravé ruky: prsty od X k Y, palec ukazuje Z.
- `_BOX` a další tělesa potřebují plný AutoCAD. Verze LT tělesa nevytvoří.
- 2D výkres z dřívějška zůstává. 3D model je druhý soubor, nebo stejný model v jiném pohledu.
> Tip: když příkaz `_BOX` AutoCAD nezná, máte LT. Tělesa v ní nejdou.
## Pohled
*Orbit*
- ViewCube v rohu nebo `_ORBIT` otáčí pohled. Model se neotáčí, otáčí se kamera.
- Přední, horní a levý pohled odpovídají nárysu, půdorysu a bokorysu.
- `_UCS` posune a natočí souřadnice. Nová tělesa vznikají vůči aktuálnímu UCS.
- `_UCS` a volba World vrátí původní osy. Ztracený UCS je nejčastější zmatek ve 3D.
> Tip: než vysunete profil, zkontrolujte ikonu os. Z má trčet z plochy, kterou vysouváte.
## Drát a stínování
*Ať něco vidíte*
- Drátový model ukáže všechny hrany, i zadní. Na začátku se v něm líp trefuje.
- Stínovaný pohled schová zadní hrany. Přepíná se `_VSCURRENT` nebo nabídkou pohledu.
- Zoom kolečkem pořád platí. Výřez na papír přijde až v lekci o výkresu z modelu.
- Jednotky zůstávají milimetry. Těleso 60 × 40 × 30 je v tomtéž souboru jako 2D profil.
> Tip: ztracený model najdete `_ZOOM` Extents. Často leží daleko od počátku, protože UCS byl posunutý.
## Zadání: tři osy a kvádr
*Cvičení*
- V novém souboru v milimetrech nakreslete `_BOX` se základnou 60 × 40 a výškou 30, roh v 0,0,0.
- Přepněte na přední, horní a levý pohled. V každém má být vidět jiná dvojice rozměrů.
- `_UCS` World a `_DIST` mezi dvěma rohy podél X má dát 60.
- Uložte jako kvadr-60x40x30.dwg. LT na tento soubor nestačí.
> Tip: přední pohled ukáže 60 × 30, horní 60 × 40, levý 40 × 30.
# Kvíz
## Který AutoCAD umí tělesa `_BOX`?
- Každá verze včetně LT
- [x] Plný AutoCAD, ne LT
- Jen verze na Mac bez příkazů
- Žádný, tělesa jsou v jiném programu
> LT je 2D. Příkaz `_BOX` v ní není.
## Co dělá `_ORBIT`?
- Otočí těleso v souřadnicích
- [x] Otočí pohled kamery
- Nastaví měřítko tisku
- Smaže osu Z
> Model zůstane. Změní se, odkud se na něj díváte.
## Co vrátí souřadnice do původního směru?
- `_ZOOM` Extents
- [x] `_UCS` a volba World
- Vypnutí hladiny 0
- `_PLOT`
> Posunutý UCS nechá nová tělesa „ležet na boku“. World je výchozí osy výkresu.
## Co ukáže přední pohled na kvádr 60 × 40 × 30, když 30 je výška?
- 60 × 40
- [x] 60 × 30
- 40 × 30
- Jen osu Z
> Přední pohled je šířka a výška. Hloubka 40 je v půdorysu a v bokorysu.

View file

@ -0,0 +1,6 @@
---
nazev: Solids and extrude
popis: A box, a cylinder and a profile pulled up by a height.
nazev_cviceni: Quiz: extrude
nadpis_kvizu: Pick the profile and the height
---

View file

@ -0,0 +1,80 @@
---
id: tg-4-vysunuti
nazev: Tělesa a vysunutí
popis: Kvádr, válec a profil tažený o výšku.
nazev_cviceni: Kvíz: vysunutí
nadpis_kvizu: Vyberte profil a výšku
---
# Výklad
## Hotová tělesa
*Kvádr a válec*
- `_BOX` chce roh nebo střed základny, půdorys a výšku.
- `_CYLINDER` chce střed, poloměr nebo průměr a výšku.
- Výška se měří ve směru osy Z aktuálního UCS.
- Tato tělesa jsou plná. Nejsou to stěny z ploch.
> Tip: válec Ø40 a výška 25 má v příkazu buď poloměr 20, nebo volbu průměru 40.
## Vysunutí profilu
*Z 2D do výšky*
- `_EXTRUDE` vezme uzavřenou křivku nebo oblast a táhne ji o výšku.
- Profil musí být zavřený. Čtyři nenapojené úsečky vysunout nejdou.
- Kladná výška jde ve směru Z. Záporná na opačnou stranu.
- `_PRESSPULL` umí přitáhnout uzavřenou oblast, na kterou kliknete, bez předchozího výběru.
> Tip: obdélník 80 × 50 vysunutý o 12 je destička z druháku, teď jako těleso.
## Profil nejdřív ve 2D
*Plocha*
- Profil nakreslete v rovině, ze které chcete táhnout. Nejčastěji půdorys, Z ven z obrazovky.
- `_REGION` z uzavřené křivky udělá jednu plochu. Vysouvá se spolehlivěji než volné čáry.
- Po vysunutí profil smíte smazat, nebo ho nechte na hladině PROFIL a tu zmrazte.
- Jeden profil, jedna výška. Osazení vznikne až druhým tělesem a booleanem v další lekci.
> Tip: otevřená křivka se vysune na plochu, ne na těleso. Pro součást potřebujete těleso.
## Zadání: destička jako těleso
*Cvičení*
- Profil 120 × 70, `_EXTRUDE` o 10 mm. To je tloušťka destičky.
- Díru zatím nekreslete. Ověřte `_MASSPROP`: objem má být 120 × 70 × 10 = 84 000 mm³.
- Přední pohled ukáže 120 × 10. Horní pohled 120 × 70.
- Uložte jako desticka-3d.dwg.
> Tip: když objem vyjde dvojnásobek, výška je 20 místo 10. Kóta textu to nespraví, `_MASSPROP` čte model.
# Kvíz
## Jaký poloměr má `_CYLINDER` o průměru 40?
- 40
- [x] 20
- 80
- 10
> Příkaz bez přepnutí bere poloměr. Průměr je volba, nebo napište polovinu.
## Co `_EXTRUDE` potřebuje, aby vzniklo těleso?
- Otevřenou úsečku
- [x] Uzavřený profil
- Razítko
- Už hotový válec
> Neuzavřený profil vytvoří jen plochu. Těleso má mít objem.
## Kam míří kladná výška vysunutí?
- Vždy doprava na obrazovce
- [x] Ve směru osy Z aktuálního UCS
- Do záporného X
- Do razítka
> Špatně natočený UCS vysune destičku „na bok“. Před příkazem zkontrolujte osy.
## Objem destičky 120 × 70 × 10 mm je?
- 840 mm³
- [x] 84 000 mm³
- 200 mm³
- 12 000 mm³
> 120 × 70 = 8 400, krát 10 je 84 000. `_MASSPROP` má ukázat totéž.

View file

@ -0,0 +1,6 @@
---
nazev: Revolving a profile
popis: A part symmetric about an axis is the section spun around.
nazev_cviceni: Quiz: revolve
nadpis_kvizu: Pick the profile and the axis
---

View file

@ -0,0 +1,80 @@
---
id: tg-4-rotace
nazev: Rotace profilu
popis: Součást souměrná podle osy vznikne otočením řezu.
nazev_cviceni: Kvíz: rotace
nadpis_kvizu: Vyberte profil a osu
---
# Výklad
## Kdy rotovat
*Místo skládání válců*
- `_REVOLVE` otočí uzavřený profil kolem osy o zadaný úhel.
- 360 stupňů udělá plné rotační těleso. 180 udělá polovinu.
- Hodí se na hřídel, pouzdro, přírubu a každou součást souměrnou podle osy.
- Profil je polovina řezu. Osa rotace je osa součásti a profil ji smí jen lemovat, ne křížit.
> Tip: pouzdro z třetího ročníku je jeden profil stěny otočený o 360 stupňů, ne válec minus válec. Oba postupy jsou správně, rotace je u čistě rotačního dílu kratší.
## Profil
*Polovina*
- Nakreslete jen polovinu řezu, vpravo od osy. Uzavřete ho.
- U pouzdra Ø60 / Ø36 dlouhého 80 je profil obdélník 12 × 80. Dvanáct je tloušťka stěny.
- Osa je svislá hrana díry. Profil se osy dotýká jen vnější? Ne: vnitřní hrana profilu je o poloměr díry od osy.
- Vnitřní hrana leží 18 mm od osy, vnější 30 mm. Šířka profilu je 12 mm.
> Tip: 36 / 2 = 18 a 60 / 2 = 30. Profil je pás mezi těmito poloměry.
## Osa a úhel
*360*
- Osu vyberte dva body, nebo jednu úsečku nakreslenou na hladině OSA.
- Úhel 360. Menší úhel nechá výseč a na školní hřídeli bývá omyl.
- Profil nesmí osu křížit. Křížení AutoCAD odmítne, nebo udělá těleso, které se protíná samo.
- Po rotaci profil zmrazte. V řezu ho zase použijete jako kontrolu.
> Tip: když vznikne plný válec bez díry, profil začínal na ose. Vnitřní hrana musí být 18 mm od osy, ne 0.
## Zadání: pouzdro rotací
*Cvičení*
- Osa je úsečka z 0,0 do 0,80.
- Profil: obdélník s rohy 18,0 a 30,80.
- `_REVOLVE` o 360 stupňů kolem této osy.
- `_MASSPROP` objem mezikruží: π × (30² − 18²) × 80. Má vyjít zhruba 144 764 mm³.
> Tip: 900 − 324 = 576, krát π je asi 1 810, krát 80 je asi 144 800. Řád tisíců, ne desítek.
# Kvíz
## Jaký úhel udělá plné rotační těleso?
- 90
- 180
- [x] 360
- 45
> Polovina otáčky je výseč. Uzavřené pouzdro potřebuje celých 360 stupňů.
## Kde leží vnitřní hrana profilu pouzdra Ø36?
- Na ose
- [x] 18 mm od osy
- 36 mm od osy
- 60 mm od osy
> Poloměr díry je polovina průměru. Profil díru ohraničuje, nesmí začínat na ose, jinak díra zmizí.
## Co se stane, když profil osu kříží?
- Vznikne správné pouzdro
- [x] AutoCAD rotaci odmítne, nebo těleso protne samo sebe
- Profil se jen posune
- Vznikne šrafa
> Osa smí být hranou profilu, ne smí jím procházet skrz.
## Proč rotovat pouzdro místo skládání dvou válců?
- Jinak to nejde
- [x] U rotačního dílu stačí jeden profil
- Rotace umí i hranaté osazení bez profilu
- `_REVOLVE` funguje i v LT
> Oba postupy jsou správně. Rotace je kratší, když je součást souměrná podle osy. LT ji neumí.

View file

@ -0,0 +1,6 @@
---
nazev: Union, subtract and intersect
popis: Solids add and subtract like sets.
nazev_cviceni: Quiz: booleans
nadpis_kvizu: Pick the order of the solids
---

View file

@ -0,0 +1,80 @@
---
id: tg-4-boolean
nazev: Sjednocení, rozdíl a průnik
popis: Tělesa se sčítají a odečítají jako množiny.
nazev_cviceni: Kvíz: boolean
nadpis_kvizu: Vyberte pořadí těles
---
# Výklad
## Sjednocení
*Jeden kus*
- `_UNION` slepí tělesa, která se dotýkají nebo pronikají, v jeden objekt.
- Osazení na hřídeli jsou dva válce. Po sjednocení je to jedna součást.
- Tělesa, která se nedotýkají, sjednocení také spojí do jedné skupiny, ale výrobek to není.
- Než sjednotíte, zkontrolujte přesah. Mezera 0,01 mm nechá dva kusy.
> Tip: `_INTERFERE` ukáže, jestli se dvě tělesa opravdu pronikají, nebo se jen zdají dotýkat.
## Rozdíl
*Díra*
- `_SUBTRACT` nejdřív vyberete těleso, které má zůstat, potvrdíte, a teprve pak těleso, které se odečte.
- Obrácené pořadí smaže součást a nechá díru jako váleček. To je nejčastější chyba.
- Díra Ø10 je válec Ø10 delší, než je tloušťka stěny, ať rozdíl prořízne celou stěnu.
- Válec díry po rozdílu zmizí. Nemusíte ho mazat ručně.
> Tip: válec díry nechte o milimetr přečuhovat z obou stran. Jinak na stěně zůstane blanka.
## Průnik
*Společný objem*
- `_INTERSECT` nechá jen objem, který mají tělesa společný. Zbytek zmizí.
- Hodí se, když potřebujete tvar daný dvěma podmínkami, třeba válec seříznutý kvádrem.
- Na běžnou díru průnik není. Díra je rozdíl.
- Po průniku zůstanou obě původní tělesa pryč. Když je budete potřebovat, předem je zkopírujte.
> Tip: sjednocení přidá, rozdíl ubere, průnik nechá jen překryv. U díry je to vždy rozdíl.
## Zadání: destička s dírou
*Cvičení*
- Destička `_BOX` 120 × 70 × 10.
- Válec Ø16, střed v 60,35, výška od -1 do 11, ať prochází skrz.
- `_SUBTRACT`: nejdřív destička, potom válec.
- `_MASSPROP` objem: 84 000 minus objem válce v tloušťce 10. Válec Ø16 a výška 10 má objem π × 8² × 10 ≈ 2 011. Výsledek je asi 81 989 mm³.
> Tip: když zmizela destička a zbyl váleček, pořadí rozdílu bylo obrácené. Vraťte krok zpět.
# Kvíz
## Jakým pořadím vznikne díra?
- Nejdřív válec, potom destička
- [x] Nejdřív destička, potom válec
- `_UNION`
- `_INTERSECT`
> První výběr zůstává. Druhý se odečte. Obrácené pořadí nechá jen váleček.
## Proč má válec díry přečnívat z destičky?
- Aby šel okótovat
- [x] Aby ve stěně nezůstala blanka
- Přečnívat nesmí, rozdíl by selhal
- Aby vznikl závit
> Válec zarovnaný přesně s plochou někdy nechá tenkou slupku. Milimetr přesahu ji odstraní.
## Který příkaz slepí dva dotýkající se válce hřídele?
- `_SUBTRACT`
- [x] `_UNION`
- `_INTERSECT`
- `_REVOLVE`
> Osazení je jeden kus. Sjednocení z dvou válců udělá jedno těleso.
## Co nechá `_INTERSECT`?
- Součet objemů
- [x] Jen společný překryv
- Díru
- Původní tělesa vedle výsledku
> Zbytek obou těles zmizí. Před průnikem si je zkopírujte, pokud je ještě budete potřebovat.

View file

@ -0,0 +1,6 @@
---
nazev: Sectioning a solid and Flatshot
popis: From the model back to lines for the drawing.
nazev_cviceni: Quiz: the model section
nadpis_kvizu: Decide what lands on the sheet
---

View file

@ -0,0 +1,80 @@
---
id: tg-4-rez-modelu
nazev: Řez tělesem a plochý snímek
popis: Z modelu zpátky čáry pro výkres.
nazev_cviceni: Kvíz: řez modelu
nadpis_kvizu: Vyberte, co vznikne na papíře
---
# Výklad
## Řezná rovina
*Uvnitř tělesa*
- `_SECTIONPLANE` položí rovinu řezu. Živé zobrazení ukáže řez, aniž by těleso rozřízlo natrvalo.
- `_SLICE` těleso rozřízne doopravdy. Polovinu můžete nechat, nebo smazat.
- Na školní výkres řežte živě nebo si před `_SLICE` těleso zkopírujte. Původní model budete ještě potřebovat.
- Řez osou pouzdra má ukázat stěnu 12 mm a díru Ø36, stejně jako ruční řez ve třetím ročníku.
> Tip: rovina, která mine osu, ukáže jinou tloušťku stěny. U pouzdra veďte řez osou.
## Plochý snímek
*Čáry z pohledu*
- `_FLATSHOT` promítne aktuální pohled do čar v rovině XY.
- Viditelné hrany dá na jednu hladinu, skryté na druhou. Skryté pak přepněte na čárkované.
- Než příkaz spustíte, nastavte pohled: přední pro nárys, horní pro půdorys.
- Snímek je 2D. Dá se kótovat jako výkres z druháku. Model vedle něj nechte nedotčený.
> Tip: plochý snímek pořízený v šikmém pohledu není nárys. Nejdřív srovnejte pohled, potom foťte.
## Co snímek neudělá
*Kóty a šrafa*
- Snímek neumí šrafu řezu ani kóty. Ty doplníte vy, na hladiny SRAFA a KOTA.
- Neumí ani razítko. To patří do rozvržení.
- Čáry snímku bývají na nových hladinách. Přesuňte je na OBRYS a SKRYTE, ať platí školní tloušťky.
- Když model potom změníte, snímek se sám neopraví. Po úpravě modelu ho vytvořte znovu.
> Tip: výkresové pohledy z pozdější lekce se na rozdíl od snímku umí s modelem aktualizovat. Snímek je rychlá kontrola.
## Zadání: nárys z tělesa
*Cvičení*
- Otevřete pouzdro z rotace. Přední pohled, `_FLATSHOT`, viditelné hrany na OBRYS.
- Do řezu osou doplňte šrafu stěny ručně, nebo použijte živý řez a z něj čáry.
- Okótujte Ø60, Ø36 a délku 80. Čísla musí sedět s `_MASSPROP` a s poloměry profilu.
- Snímek nesmí zůstat šikmo. Nárys je v rovině, díra je obdélník 36 × 80 uvnitř obdélníku 60 × 80.
> Tip: v nárysu řezu jsou dvě vodorovné čáry díry. Jejich vzdálenost je 36.
# Kvíz
## Čím rozříznete těleso natrvalo?
- `_FLATSHOT`
- [x] `_SLICE`
- `_ORBIT`
- `_PLOT`
> Živá řezná rovina model nechá celý. `_SLICE` ho rozdělí. Předtím si nechte kopii.
## Co musí předcházet plochému snímku nárysu?
- Tisk
- [x] Srovnaný přední pohled
- Rozbití tělesa
- Šrafa
> Snímek promítne to, co právě vidíte. Šikmý orbit není nárys.
## Doplní `_FLATSHOT` kóty?
- Ano, z hladiny KOTA
- [x] Ne
- Jen průměry
- Jen když je měřítko 1:1
> Snímek jsou čáry. Kóty, šrafu a razítko dodáte vy.
## Jak daleko jsou v nárysu řezu pouzdra od sebe čáry díry Ø36?
- 18
- 60
- [x] 36
- 12
> V řezu je díra obdélník. Jeho výška je průměr, ne poloměr.

View file

@ -0,0 +1,6 @@
---
nazev: Visual styles
popis: Wireframe, hidden lines and shading for checking the shape.
nazev_cviceni: Quiz: display
nadpis_kvizu: Pick a style for the task
---

View file

@ -0,0 +1,80 @@
---
id: tg-4-zobrazeni
nazev: Vizuální styly
popis: Drát, skryté hrany a stínování pro kontrolu tvaru.
nazev_cviceni: Kvíz: zobrazení
nadpis_kvizu: Vyberte styl podle úkolu
---
# Výklad
## Drát a skryté hrany
*Kontrola*
- Drátový model ukáže každou hranu. Hodí se, když saháte na zadní vrchol.
- Styl skrytých hran schová, co je za materiálem. Tvar se čte jako na fotografii bez stínu.
- `_VSCURRENT` styly přepíná. Na pásu karet je stejná nabídka u pohledu.
- Styl nemění těleso. Špatně odečtená díra zůstane špatně v každém stylu.
> Tip: nejdřív drát, ať trefíte hranu, potom skryté hrany, ať zkontrolujete, že díra opravdu prochází.
## Stínování
*Objem*
- Konceptuální nebo stínovaný styl ukáže, jestli je díra průchozí, nebo je to jen namalovaná kružnice.
- Barva tělesa se bere z hladiny. OBRYS a těleso smí mít vlastní hladinu MODEL.
- Materiál a render na škole stačí náznak. Odevzdává se výkres, ne obrázek.
- Stínování zpomalí otáčení. Na slabším počítači se vraťte do drátu, než budete modelovat dál.
> Tip: když v řezu vidíte dno díry, válec byl krátký. Rozdíl stěnu neprošel.
## Řezy bez rozbití
*Pohled*
- Živý řez v kombinaci se stínováním je nejrychlejší kontrola tloušťky stěny.
- Pohled uložte `_VIEW`, ať se k němu vrátíte. Název třeba REZ-AA.
- Izometrický stínovaný pohled smí přijít na výkres jako názorný doplněk, ne jako jediný obraz.
- Barvy na obrazovce pořád tiskněte černě. Styl zobrazení není tabulka per.
> Tip: uložený pohled nese i styl. Když REZ-AA otevřete a je z něj drát, někdo styl přepsal.
## Zadání: tři kontroly destičky
*Cvičení*
- Destičku s dírou Ø16 zobrazte jako drát, jako skryté hrany a stínovaně.
- Ve stínovaném horním pohledu musí být skrz díru vidět. Když není, opakujte rozdíl.
- Uložte pohled HORNI a pohled PREDNI.
- Do výkresu tyto pohledy zatím nevkládejte. Jde o kontrolu modelu.
> Tip: díra, která ve stínu má dno stejné barvy jako destička, je slepá. Výška válce byla menší než 10 mm.
# Kvíz
## Který styl nechá vidět i zadní hrany?
- Stínovaný
- [x] Drátový
- Skryté hrany
- Monochrome.ctb
> Drát nekryje nic. Skryté hrany a stín zadní geometrii schovají.
## Změní vizuální styl objem tělesa?
- Ano, stín ubere materiál
- [x] Ne
- Jen u rozdílu
- Jen při tisku
> Styl je způsob kresby na obrazovce. `_MASSPROP` zůstane stejný.
## Co máte vidět skrz průchozí díru ve stínovaném pohledu?
- Dno stejné barvy
- [x] Prostor za destičkou
- Šrafu ANSI31
- Razítko
> Dno znamená, že válec díry byl krátký a rozdíl stěnu neprošel.
## Čím se na papír dostane černá čára, když je model na obrazovce modrý?
- Vizuálním stylem
- [x] Tabulkou per při tisku
- Smazáním hladiny
- `_ORBIT`
> Barva na monitoru je pracovní. monochrome.ctb z ní na PDF udělá černou.

View file

@ -0,0 +1,6 @@
---
nazev: A drawing from the 3D model
popis: A front view and a section that update with the model.
nazev_cviceni: Quiz: model views
nadpis_kvizu: Tie the sheet to the solid
---

View file

@ -0,0 +1,80 @@
---
id: tg-4-vykres-z-modelu
nazev: Výkres z 3D modelu
popis: Nárys a řez, které se s modelem aktualizují.
nazev_cviceni: Kvíz: pohledy z modelu
nadpis_kvizu: Propojte výkres s tělesem
---
# Výklad
## Základní pohled
*Z tělesa*
- V rozvržení příkaz základního pohledu vezme těleso a položí na papír nárys, půdorys nebo izometrii.
- Měřítko pohledu nastavíte jako u výřezu, třeba 1:1 nebo 1:2.
- Odvozené pohledy se položí nad, pod nebo vedle. Drží evropské promítání, když ho tak nastavíte.
- Pohled je svázaný s modelem. Změna tělesa a aktualizace pohledu přepíše čáry.
> Tip: plochý snímek se sám neopraví. Pohled z modelu ano. Na maturitní výkres použijte pohled.
## Řez pohledu
*A-A*
- Z základního pohledu uděláte řez tažením řezné čáry. Písmena A doplní AutoCAD, nebo je přepište na A.
- Šrafu řezu nastavte na ANSI31 a školní měřítko. Hřídel v podélném řezu pořád nešrafujte, i když to AutoCAD nabídne.
- Skryté čáry v pohledu vypněte, pokud řez vnitřek ukázal. Výkres zůstane čistý.
- Kóty klikejte na pohled, ne do modelu naslepo. Berou rozměr z tělesa.
> Tip: kóta napojená na pohled se po aktualizaci přepočítá. Kóta nakreslená vedle jako obyčejná čára ne.
## Papír
*A3*
- Rámeček a razítko jsou v rozvržení, měřítko 1:1 vůči papíru.
- Tisk je Layout, 1:1, monochrome.ctb, jako ve třetím ročníku.
- Izometrický pohled bez kót smí být třetí obraz. Nesmí být jediný.
- Než odevzdáte, aktualizujte pohledy. Starý pohled lže, když jste model mezitím změnili.
> Tip: ve stromu nebo přes aktualizaci pohledu uvidíte, jestli je obraz aktuální. Nevěřte čáře, která přežila smazanou díru.
## Zadání: pouzdro na A3
*Cvičení*
- Z 3D pouzdra vytvořte nárys jako řez A-A a půdorys nebo bokorys s roztečí, pokud na modelu díry jsou.
- Měřítko 1:1, formát A3. Kóty Ø60, Ø36 a 80.
- Změňte v modelu délku na 90, aktualizujte pohled a přesvědčte se, že kóta délky ukáže 90.
- Vraťte délku na 80, ať odevzdáte zadání, ne zkoušku. PDF pojmenujte pouzdro-z-modelu.pdf.
> Tip: když po změně modelu kóta zůstane 80, není napojená na pohled. Smažte ji a okótujte znovu.
# Kvíz
## Čím se pohled z modelu liší od `_FLATSHOT`?
- Ničím
- [x] Po změně tělesa se dá aktualizovat
- Umí jen izometrii
- Funguje v LT
> Snímek je jednorázová kopie čar. Pohled zůstává svázaný s tělesem.
## Kam patří rámeček výkresu z modelu?
- Dovnitř tělesa
- [x] Do rozvržení
- Na hladinu OBRYS modelu
- Do definice bloku
> Papír má vlastní měřítko. Rámeček v modelu by se zmenšil s pohledem.
## Co uděláte po změně délky pouzdra v modelu?
- Nic, kóty se nemění nikdy
- [x] Aktualizujete pohled
- Smažete razítko
- Přepnete na LT
> Neaktualizovaný pohled ukazuje starý tvar. Kóta napojená na něj se přepočítá spolu s ním.
## Jaké měřítko má tisk tohoto rozvržení?
- 1:2, protože model je velký
- [x] 1:1
- Podle `_MASSPROP`
- Fit
> Měřítko obrazu drží pohled. Tisk papíru je 1:1, jinak se měřítko zdvojí.

View file

@ -0,0 +1,6 @@
---
nazev: Exam assignment
popis: From a sketch through the model to a PDF that stands on its own.
nazev_cviceni: Quiz: the exam piece
nadpis_kvizu: Walk the whole drawing
---

View file

@ -0,0 +1,80 @@
---
id: tg-4-maturitni-zadani
nazev: Maturitní zadání
popis: Od náčrtu přes model po PDF, které obstojí samo.
nazev_cviceni: Kvíz: maturita
nadpis_kvizu: Projdete celý výkres
---
# Výklad
## Součást
*Přírubové pouzdro*
- Dutý válec Ø70 / Ø40, délka 60. Na jednom konci příruba Ø110 tlustá 12.
- Čtyři díry Ø11 na roztečné kružnici Ø90 v přírubě. Jsou průchozí skrz přírubu, ne skrz celé pouzdro.
- Vnitřní hrana díry Ø40 má zkosení 1 × 45° na straně příruby.
- Materiál ocel. Jednotky milimetry. Model 1:1.
> Tip: tloušťka stěny válce je (70 − 40) / 2 = 15 mm. Příruba přesahuje válec o (110 − 70) / 2 = 20 mm.
## Model
*Pořadí*
- Profil řezu rotujte, nebo složte válec Ø70, válec příruby Ø110 výšky 12 a odečtěte díru Ø40.
- Čtyři díry Ø11 vzniknou polárním polem válce na poloměru 45 a rozdílem od příruby.
- Válec díry Ø11 musí být delší než 12 mm, ať je díra průchozí. Do dutiny Ø40 díra Ø11 nezasahuje, leží v materiálu příruby.
- `_MASSPROP` spočítejte orientačně a porovnejte s ručním odhadem. Řád objemu je statisíce mm³, ne tisíce.
> Tip: rozteč Ø90 je poloměr 45. Díra se středem na poloměru 55 by už ležela mimo přírubu Ø110.
## Výkres
*A3, 1:1*
- Nárys je řez A-A osou. Půdorys ukáže čtyři díry. Izometrie bez kót je doplněk.
- Kóty: Ø110, Ø70, Ø40, tloušťka příruby 12, délka 60, 4× Ø11 na Ø90, zkosení 1 × 45°.
- Hladiny OBRYS, OSA, SRAFA, KOTA, RAM. Šrafa jen v řezu, jeden směr, díry prázdné.
- Razítko: Přírubové pouzdro, ocel, 1:1, jméno. Tisk A3, Layout, 1:1, monochrome.ctb.
> Tip: evropské promítání. Půdorys pod nárysem. Čtyři díry se kótují jednou.
## Než odevzdáte
*Kontrola*
- Každá kóta se dá z modelu ověřit. Žádný text není přepsaný.
- Vypnutá hladina KOTA nechá čistý tvar. Vypnutá SRAFA nechá obrys řezu.
- PDF se jmenuje prirubove-pouzdro-A3.pdf a rámeček má 420 × 297 mm.
- Soubor dwg odevzdejte spolu s PDF. Bez modelu výkres nejde opravit.
> Tip: otevřete PDF na celou stránku. Když je razítko useknuté nebo šrafa černá, tisk opakujte. Na obrazovce AutoCADu to vidět nebylo.
# Kvíz
## Jaká je tloušťka stěny válce Ø70 s dírou Ø40?
- 30 mm
- [x] 15 mm
- 40 mm
- 12 mm
> Rozdíl průměrů je 30 mm na obě strany. Jedna stěna má 15 mm. 12 mm je tloušťka příruby, ne stěny.
## Kam patří čtyři díry Ø11?
- Skrz celou délku 60
- [x] Skrz přírubu tlustou 12, na Ø90
- Do díry Ø40
- Na osu jako závit M11
> Leží v materiálu příruby mezi Ø70 a Ø110. Rozteč 90, poloměr 45.
## Jaké měřítko má model i tisk tohoto výkresu?
- Model 1:2, tisk 1:2
- [x] Model 1:1, tisk rozvržení 1:1
- Model 2:1, tisk Fit
- Měřítko se do razítka nepíše
> Součást i papír jsou ve skutečných milimetrech. Měřítko pohledu je 1:1, protože se A3 vejde.
## Co odevzdáváte spolu s PDF?
- Jen izometrii
- [x] I soubor dwg
- Rozbitý blok razítka
- Výkres bez kót, kóty jsou v PDF
> Z PDF už model neopravíte. DwG je práce, PDF je odevzdaný tisk.

View file

@ -234,6 +234,26 @@ final class AppModel: ObservableObject {
refresh() refresh()
} }
func markTg(_ id: Int) {
progress.markTg(id)
refresh()
}
func markTg2(_ id: Int) {
progress.markTg2(id)
refresh()
}
func markTg3(_ id: Int) {
progress.markTg3(id)
refresh()
}
func markTg4(_ id: Int) {
progress.markTg4(id)
refresh()
}
func markMat0(_ id: Int) { func markMat0(_ id: Int) {
progress.markMat0(id) progress.markMat0(id)
refresh() refresh()

View file

@ -59,6 +59,10 @@ final class Content {
let fyz2: [J] let fyz2: [J]
let fyz3: [J] let fyz3: [J]
let fyz4: [J] let fyz4: [J]
let tg: [J]
let tg2: [J]
let tg3: [J]
let tg4: [J]
let mat0: [J] let mat0: [J]
let mat: [J] let mat: [J]
let mat2: [J] let mat2: [J]
@ -125,6 +129,10 @@ final class Content {
fyz2 = raw.arr("fyz2") fyz2 = raw.arr("fyz2")
fyz3 = raw.arr("fyz3") fyz3 = raw.arr("fyz3")
fyz4 = raw.arr("fyz4") fyz4 = raw.arr("fyz4")
tg = raw.arr("tg")
tg2 = raw.arr("tg2")
tg3 = raw.arr("tg3")
tg4 = raw.arr("tg4")
mat0 = raw.arr("mat0") mat0 = raw.arr("mat0")
mat = raw.arr("mat") mat = raw.arr("mat")
mat2 = raw.arr("mat2") mat2 = raw.arr("mat2")
@ -187,6 +195,10 @@ final class Content {
func fyz2Lesson(_ id: Int) -> J? { fyz2.first { $0.int("id") == id } } func fyz2Lesson(_ id: Int) -> J? { fyz2.first { $0.int("id") == id } }
func fyz3Lesson(_ id: Int) -> J? { fyz3.first { $0.int("id") == id } } func fyz3Lesson(_ id: Int) -> J? { fyz3.first { $0.int("id") == id } }
func fyz4Lesson(_ id: Int) -> J? { fyz4.first { $0.int("id") == id } } func fyz4Lesson(_ id: Int) -> J? { fyz4.first { $0.int("id") == id } }
func tgLesson(_ id: Int) -> J? { tg.first { $0.int("id") == id } }
func tg2Lesson(_ id: Int) -> J? { tg2.first { $0.int("id") == id } }
func tg3Lesson(_ id: Int) -> J? { tg3.first { $0.int("id") == id } }
func tg4Lesson(_ id: Int) -> J? { tg4.first { $0.int("id") == id } }
func mat0Lesson(_ id: Int) -> J? { mat0.first { $0.int("id") == id } } func mat0Lesson(_ id: Int) -> J? { mat0.first { $0.int("id") == id } }
func matLesson(_ id: Int) -> J? { mat.first { $0.int("id") == id } } func matLesson(_ id: Int) -> J? { mat.first { $0.int("id") == id } }
func mat2Lesson(_ id: Int) -> J? { mat2.first { $0.int("id") == id } } func mat2Lesson(_ id: Int) -> J? { mat2.first { $0.int("id") == id } }

View file

@ -94,6 +94,14 @@ final class ProgressStore {
func markFyz3(_ id: Int) { mark("fyz3.\(id)") } func markFyz3(_ id: Int) { mark("fyz3.\(id)") }
func fyz4Done(_ id: Int) -> Bool { done("fyz4.\(id)") } func fyz4Done(_ id: Int) -> Bool { done("fyz4.\(id)") }
func markFyz4(_ id: Int) { mark("fyz4.\(id)") } func markFyz4(_ id: Int) { mark("fyz4.\(id)") }
func tgDone(_ id: Int) -> Bool { done("tg.\(id)") }
func markTg(_ id: Int) { mark("tg.\(id)") }
func tg2Done(_ id: Int) -> Bool { done("tg2.\(id)") }
func markTg2(_ id: Int) { mark("tg2.\(id)") }
func tg3Done(_ id: Int) -> Bool { done("tg3.\(id)") }
func markTg3(_ id: Int) { mark("tg3.\(id)") }
func tg4Done(_ id: Int) -> Bool { done("tg4.\(id)") }
func markTg4(_ id: Int) { mark("tg4.\(id)") }
func mat0Done(_ id: Int) -> Bool { done("mat0.\(id)") } func mat0Done(_ id: Int) -> Bool { done("mat0.\(id)") }
func markMat0(_ id: Int) { mark("mat0.\(id)") } func markMat0(_ id: Int) { mark("mat0.\(id)") }
func matDone(_ id: Int) -> Bool { done("mat.\(id)") } func matDone(_ id: Int) -> Bool { done("mat.\(id)") }
@ -288,6 +296,38 @@ func summarize(_ content: Content, _ p: ProgressStore) -> ProgressSum {
sum.doneUnits += 1 sum.doneUnits += 1
} }
} }
for l in content.tg {
sum.totalEx += 1
sum.openUnits += 1
if p.tgDone(l.int("id")) {
sum.doneEx += 1
sum.doneUnits += 1
}
}
for l in content.tg2 {
sum.totalEx += 1
sum.openUnits += 1
if p.tg2Done(l.int("id")) {
sum.doneEx += 1
sum.doneUnits += 1
}
}
for l in content.tg3 {
sum.totalEx += 1
sum.openUnits += 1
if p.tg3Done(l.int("id")) {
sum.doneEx += 1
sum.doneUnits += 1
}
}
for l in content.tg4 {
sum.totalEx += 1
sum.openUnits += 1
if p.tg4Done(l.int("id")) {
sum.doneEx += 1
sum.doneUnits += 1
}
}
for l in content.mat0 { for l in content.mat0 {
sum.totalEx += 1 sum.totalEx += 1
sum.openUnits += 1 sum.openUnits += 1

View file

@ -111,6 +111,19 @@ enum Route: Hashable {
case fyz4Map case fyz4Map
case fyz4Lesson(Int) case fyz4Lesson(Int)
case fyz4Ex(Int) case fyz4Ex(Int)
case tgYears
case tgMap
case tgLesson(Int)
case tgEx(Int)
case tg2Map
case tg2Lesson(Int)
case tg2Ex(Int)
case tg3Map
case tg3Lesson(Int)
case tg3Ex(Int)
case tg4Map
case tg4Lesson(Int)
case tg4Ex(Int)
case czechMap case czechMap
case mluvnice case mluvnice
case mluvEx(Int) case mluvEx(Int)
@ -224,6 +237,19 @@ enum Route: Hashable {
case .fyz4Map: return "fyz4map" case .fyz4Map: return "fyz4map"
case .fyz4Lesson(let id): return "fyz4unit\(id)" case .fyz4Lesson(let id): return "fyz4unit\(id)"
case .fyz4Ex(let id): return "fyz4ex\(id)" case .fyz4Ex(let id): return "fyz4ex\(id)"
case .tgYears: return "tgyears"
case .tgMap: return "tgmap"
case .tgLesson(let id): return "tgunit\(id)"
case .tgEx(let id): return "tgex\(id)"
case .tg2Map: return "tg2map"
case .tg2Lesson(let id): return "tg2unit\(id)"
case .tg2Ex(let id): return "tg2ex\(id)"
case .tg3Map: return "tg3map"
case .tg3Lesson(let id): return "tg3unit\(id)"
case .tg3Ex(let id): return "tg3ex\(id)"
case .tg4Map: return "tg4map"
case .tg4Lesson(let id): return "tg4unit\(id)"
case .tg4Ex(let id): return "tg4ex\(id)"
case .czechMap: return "czechmap" case .czechMap: return "czechmap"
case .mluvnice: return "mluvnice" case .mluvnice: return "mluvnice"
case .mluvEx(let n): return "mluve\(n)" case .mluvEx(let n): return "mluve\(n)"
@ -448,6 +474,32 @@ enum Route: Hashable {
return [.fyzYears, .fyz4Map, .fyz4Lesson(id)] return [.fyzYears, .fyz4Map, .fyz4Lesson(id)]
case .fyz4Ex(let id): case .fyz4Ex(let id):
return [.fyzYears, .fyz4Map, .fyz4Lesson(id), .fyz4Ex(id)] return [.fyzYears, .fyz4Map, .fyz4Lesson(id), .fyz4Ex(id)]
case .tgYears:
return [.tgYears]
case .tgMap:
return [.tgYears, .tgMap]
case .tgLesson(let id):
return [.tgYears, .tgMap, .tgLesson(id)]
case .tgEx(let id):
return [.tgYears, .tgMap, .tgLesson(id), .tgEx(id)]
case .tg2Map:
return [.tgYears, .tg2Map]
case .tg2Lesson(let id):
return [.tgYears, .tg2Map, .tg2Lesson(id)]
case .tg2Ex(let id):
return [.tgYears, .tg2Map, .tg2Lesson(id), .tg2Ex(id)]
case .tg3Map:
return [.tgYears, .tg3Map]
case .tg3Lesson(let id):
return [.tgYears, .tg3Map, .tg3Lesson(id)]
case .tg3Ex(let id):
return [.tgYears, .tg3Map, .tg3Lesson(id), .tg3Ex(id)]
case .tg4Map:
return [.tgYears, .tg4Map]
case .tg4Lesson(let id):
return [.tgYears, .tg4Map, .tg4Lesson(id)]
case .tg4Ex(let id):
return [.tgYears, .tg4Map, .tg4Lesson(id), .tg4Ex(id)]
case .czechMap: case .czechMap:
return [.czechMap] return [.czechMap]
case .mluvnice: case .mluvnice:
@ -508,6 +560,11 @@ func routeFromPage(_ page: String) -> Route? {
case "fyz2map": return .fyz2Map case "fyz2map": return .fyz2Map
case "fyz3map": return .fyz3Map case "fyz3map": return .fyz3Map
case "fyz4map": return .fyz4Map case "fyz4map": return .fyz4Map
case "tgyears": return .tgYears
case "tgmap": return .tgMap
case "tg2map": return .tg2Map
case "tg3map": return .tg3Map
case "tg4map": return .tg4Map
case "czechmap": return .czechMap case "czechmap": return .czechMap
case "mluvnice": return .mluvnice case "mluvnice": return .mluvnice
case "readinglist": return .readingList case "readinglist": return .readingList
@ -617,6 +674,30 @@ func routeFromPage(_ page: String) -> Route? {
if let m = page.wholeMatch(of: /fyzex(\d+)/), let n = Int(m.1) { if let m = page.wholeMatch(of: /fyzex(\d+)/), let n = Int(m.1) {
return .fyzEx(n) return .fyzEx(n)
} }
if let m = page.wholeMatch(of: /tg4unit(\d+)/), let n = Int(m.1) {
return .tg4Lesson(n)
}
if let m = page.wholeMatch(of: /tg4ex(\d+)/), let n = Int(m.1) {
return .tg4Ex(n)
}
if let m = page.wholeMatch(of: /tg3unit(\d+)/), let n = Int(m.1) {
return .tg3Lesson(n)
}
if let m = page.wholeMatch(of: /tg3ex(\d+)/), let n = Int(m.1) {
return .tg3Ex(n)
}
if let m = page.wholeMatch(of: /tg2unit(\d+)/), let n = Int(m.1) {
return .tg2Lesson(n)
}
if let m = page.wholeMatch(of: /tg2ex(\d+)/), let n = Int(m.1) {
return .tg2Ex(n)
}
if let m = page.wholeMatch(of: /tgunit(\d+)/), let n = Int(m.1) {
return .tgLesson(n)
}
if let m = page.wholeMatch(of: /tgex(\d+)/), let n = Int(m.1) {
return .tgEx(n)
}
if let m = page.wholeMatch(of: /lit4unit(\d+)/), let n = Int(m.1) { if let m = page.wholeMatch(of: /lit4unit(\d+)/), let n = Int(m.1) {
return .lit4Lesson(n) return .lit4Lesson(n)
} }

View file

@ -679,6 +679,7 @@ func subjectSymbol(_ icon: String) -> String {
case "flask": return "flask.fill" case "flask": return "flask.fill"
case "bolt": return "bolt.fill" case "bolt": return "bolt.fill"
case "function": return "function" case "function": return "function"
case "ruler": return "ruler.fill"
default: return "lock.fill" default: return "lock.fill"
} }
} }

View file

@ -952,6 +952,39 @@ struct ChoiceLessonScreen: View {
} }
} }
struct TgQuizScreen: View {
@ObservedObject var vm: AppModel
let year: Int
let id: Int
var body: some View {
let lesson: J? = {
switch year {
case 2: return vm.content.tg2Lesson(id)
case 3: return vm.content.tg3Lesson(id)
case 4: return vm.content.tg4Lesson(id)
default: return vm.content.tgLesson(id)
}
}()
if let lesson {
let spec = J([
"type": "choice",
"title": vm.tr(lesson.str("exTitleKey")),
"sub": lesson.str("quizHeadKey"),
"questions": lesson.rawArray("quiz"),
])
DispatchExercise(vm: vm, spec: spec, titleFallback: vm.tr(lesson.str("exTitleKey"))) {
switch year {
case 2: vm.markTg2(id)
case 3: vm.markTg3(id)
case 4: vm.markTg4(id)
default: vm.markTg(id)
}
}
}
}
}
struct FyzQuizScreen: View { struct FyzQuizScreen: View {
@ObservedObject var vm: AppModel @ObservedObject var vm: AppModel
let year: Int let year: Int

View file

@ -713,6 +713,12 @@ private func subjectSum(_ vm: AppModel, _ s: J) -> ProgressSum {
+ vm.content.mat2.filter { vm.progress.mat2Done($0.int("id")) }.count + vm.content.mat2.filter { vm.progress.mat2Done($0.int("id")) }.count
+ vm.content.mat3.filter { vm.progress.mat3Done($0.int("id")) }.count + vm.content.mat3.filter { vm.progress.mat3Done($0.int("id")) }.count
+ vm.content.mat4.filter { vm.progress.mat4Done($0.int("id")) }.count + vm.content.mat4.filter { vm.progress.mat4Done($0.int("id")) }.count
case "tgyears", "tgmap", "tg2map", "tg3map", "tg4map":
sum.totalEx = vm.content.tg.count + vm.content.tg2.count + vm.content.tg3.count + vm.content.tg4.count
sum.doneEx = vm.content.tg.filter { vm.progress.tgDone($0.int("id")) }.count
+ vm.content.tg2.filter { vm.progress.tg2Done($0.int("id")) }.count
+ vm.content.tg3.filter { vm.progress.tg3Done($0.int("id")) }.count
+ vm.content.tg4.filter { vm.progress.tg4Done($0.int("id")) }.count
case "fyzyears", "fyzmap", "fyz2map", "fyz3map", "fyz4map": case "fyzyears", "fyzmap", "fyz2map", "fyz3map", "fyz4map":
sum.totalEx = vm.content.fyz.count + vm.content.fyz2.count + vm.content.fyz3.count + vm.content.fyz4.count sum.totalEx = vm.content.fyz.count + vm.content.fyz2.count + vm.content.fyz3.count + vm.content.fyz4.count
sum.doneEx = vm.content.fyz.filter { vm.progress.fyzDone($0.int("id")) }.count sum.doneEx = vm.content.fyz.filter { vm.progress.fyzDone($0.int("id")) }.count
@ -1015,6 +1021,27 @@ private func buildSearch(_ vm: AppModel) -> [Hit] {
add(vm.tr(l.str("titleKey")), vm.tr("search_lesson"), "fyz4unit\(l.int("id"))", extra: "fyzika") add(vm.tr(l.str("titleKey")), vm.tr("search_lesson"), "fyz4unit\(l.int("id"))", extra: "fyzika")
add(vm.tr(l.str("titleKey")), vm.tr("search_exercise"), "fyz4ex\(l.int("id"))") add(vm.tr(l.str("titleKey")), vm.tr("search_exercise"), "fyz4ex\(l.int("id"))")
} }
add(vm.tr("Technická grafika"), vm.tr("search_lesson"), "tgyears", extra: "autocad grafika")
add(vm.tr("tg_year1"), vm.tr("search_lesson"), "tgmap", extra: "rocnik")
add(vm.tr("tg_year2"), vm.tr("search_lesson"), "tg2map", extra: "rocnik")
add(vm.tr("tg_year3"), vm.tr("search_lesson"), "tg3map", extra: "rocnik")
add(vm.tr("tg_year4"), vm.tr("search_lesson"), "tg4map", extra: "rocnik")
for l in vm.content.tg {
add(vm.tr(l.str("titleKey")), vm.tr("search_lesson"), "tgunit\(l.int("id"))", extra: "autocad")
add(vm.tr(l.str("titleKey")), vm.tr("search_exercise"), "tgex\(l.int("id"))")
}
for l in vm.content.tg2 {
add(vm.tr(l.str("titleKey")), vm.tr("search_lesson"), "tg2unit\(l.int("id"))", extra: "autocad")
add(vm.tr(l.str("titleKey")), vm.tr("search_exercise"), "tg2ex\(l.int("id"))")
}
for l in vm.content.tg3 {
add(vm.tr(l.str("titleKey")), vm.tr("search_lesson"), "tg3unit\(l.int("id"))", extra: "autocad")
add(vm.tr(l.str("titleKey")), vm.tr("search_exercise"), "tg3ex\(l.int("id"))")
}
for l in vm.content.tg4 {
add(vm.tr(l.str("titleKey")), vm.tr("search_lesson"), "tg4unit\(l.int("id"))", extra: "autocad")
add(vm.tr(l.str("titleKey")), vm.tr("search_exercise"), "tg4ex\(l.int("id"))")
}
add(vm.tr("Chemie"), vm.tr("search_lesson"), "chemmap", extra: "chemie") add(vm.tr("Chemie"), vm.tr("search_lesson"), "chemmap", extra: "chemie")
add(vm.tr("Biologie"), vm.tr("search_lesson"), "biomap", extra: "biologie") add(vm.tr("Biologie"), vm.tr("search_lesson"), "biomap", extra: "biologie")
for l in vm.content.chem { for l in vm.content.chem {
@ -1749,6 +1776,47 @@ struct MatYearsScreen: View {
} }
} }
struct TgYearsScreen: View {
@ObservedObject var vm: AppModel
var body: some View {
#if os(macOS)
let years: [(String, String, Route)] = [
("tg_year1", "tg_sub", .tgMap),
("tg_year2", "tg2_sub", .tg2Map),
("tg_year3", "tg3_sub", .tg3Map),
("tg_year4", "tg4_sub", .tg4Map),
]
MacFillGrid(count: years.count, minWidth: 260, minHeight: 180) { i in
NavigationLink(value: years[i].2) {
MacLinkCard(title: vm.tr(years[i].0), subtitle: vm.tr(years[i].1), badge: "\(i + 1).")
}
.buttonStyle(PressScaleStyle())
}
.navigationTitle(vm.tr("Technická grafika"))
.navigationSubtitle(vm.tr("tg_years_sub"))
#else
List {
NavigationLink(value: Route.tgMap) {
ListRowLabel(title: vm.tr("tg_year1"), subtitle: vm.tr("tg_sub"))
}
NavigationLink(value: Route.tg2Map) {
ListRowLabel(title: vm.tr("tg_year2"), subtitle: vm.tr("tg2_sub"))
}
NavigationLink(value: Route.tg3Map) {
ListRowLabel(title: vm.tr("tg_year3"), subtitle: vm.tr("tg3_sub"))
}
NavigationLink(value: Route.tg4Map) {
ListRowLabel(title: vm.tr("tg_year4"), subtitle: vm.tr("tg4_sub"))
}
}
.navigationTitle(vm.tr("Technická grafika"))
.navigationSubtitle(vm.tr("tg_years_sub"))
.appListStyle()
#endif
}
}
struct FyzYearsScreen: View { struct FyzYearsScreen: View {
@ObservedObject var vm: AppModel @ObservedObject var vm: AppModel
@ -2808,6 +2876,72 @@ struct RouteDestination: View {
} }
case .fyz4Ex(let id): case .fyz4Ex(let id):
FyzQuizScreen(vm: vm, year: 4, id: id) FyzQuizScreen(vm: vm, year: 4, id: id)
case .tgYears:
TgYearsScreen(vm: vm)
case .tgMap:
LessonListScreen(
vm: vm,
title: vm.tr("tg_year1"),
subtitle: vm.tr("tg_sub"),
rows: vm.content.tg.map { l in
let id = l.int("id")
return LessonRow(id: "t\(id)", title: vm.tr(l.str("titleKey")), done: vm.progress.tgDone(id), destination: .tgLesson(id))
}
)
case .tgLesson(let id):
if let l = vm.content.tgLesson(id) {
SlidesScreen(vm: vm, title: vm.tr(l.str("titleKey")), subtitle: vm.tr(l.str("subKey")), slides: l.arr("slides"), next: .tgEx(id))
}
case .tgEx(let id):
TgQuizScreen(vm: vm, year: 1, id: id)
case .tg2Map:
LessonListScreen(
vm: vm,
title: vm.tr("tg_year2"),
subtitle: vm.tr("tg2_sub"),
rows: vm.content.tg2.map { l in
let id = l.int("id")
return LessonRow(id: "t2\(id)", title: vm.tr(l.str("titleKey")), done: vm.progress.tg2Done(id), destination: .tg2Lesson(id))
}
)
case .tg2Lesson(let id):
if let l = vm.content.tg2Lesson(id) {
SlidesScreen(vm: vm, title: vm.tr(l.str("titleKey")), subtitle: vm.tr(l.str("subKey")), slides: l.arr("slides"), next: .tg2Ex(id))
}
case .tg2Ex(let id):
TgQuizScreen(vm: vm, year: 2, id: id)
case .tg3Map:
LessonListScreen(
vm: vm,
title: vm.tr("tg_year3"),
subtitle: vm.tr("tg3_sub"),
rows: vm.content.tg3.map { l in
let id = l.int("id")
return LessonRow(id: "t3\(id)", title: vm.tr(l.str("titleKey")), done: vm.progress.tg3Done(id), destination: .tg3Lesson(id))
}
)
case .tg3Lesson(let id):
if let l = vm.content.tg3Lesson(id) {
SlidesScreen(vm: vm, title: vm.tr(l.str("titleKey")), subtitle: vm.tr(l.str("subKey")), slides: l.arr("slides"), next: .tg3Ex(id))
}
case .tg3Ex(let id):
TgQuizScreen(vm: vm, year: 3, id: id)
case .tg4Map:
LessonListScreen(
vm: vm,
title: vm.tr("tg_year4"),
subtitle: vm.tr("tg4_sub"),
rows: vm.content.tg4.map { l in
let id = l.int("id")
return LessonRow(id: "t4\(id)", title: vm.tr(l.str("titleKey")), done: vm.progress.tg4Done(id), destination: .tg4Lesson(id))
}
)
case .tg4Lesson(let id):
if let l = vm.content.tg4Lesson(id) {
SlidesScreen(vm: vm, title: vm.tr(l.str("titleKey")), subtitle: vm.tr(l.str("subKey")), slides: l.arr("slides"), next: .tg4Ex(id))
}
case .tg4Ex(let id):
TgQuizScreen(vm: vm, year: 4, id: id)
case .mluvnice: case .mluvnice:
LessonListScreen( LessonListScreen(
vm: vm, vm: vm,

View file

@ -1065,6 +1065,8 @@ STD = [
("prirodni-vedy/chemie", "chem"), ("prirodni-vedy/biologie", "bio"), ("prirodni-vedy/chemie", "chem"), ("prirodni-vedy/biologie", "bio"),
("fyzika/1-rocnik", "fyz"), ("fyzika/2-rocnik", "fyz2"), ("fyzika/1-rocnik", "fyz"), ("fyzika/2-rocnik", "fyz2"),
("fyzika/3-rocnik", "fyz3"), ("fyzika/4-rocnik", "fyz4"), ("fyzika/3-rocnik", "fyz3"), ("fyzika/4-rocnik", "fyz4"),
("technicka-grafika/1-rocnik", "tg"), ("technicka-grafika/2-rocnik", "tg2"),
("technicka-grafika/3-rocnik", "tg3"), ("technicka-grafika/4-rocnik", "tg4"),
] ]
MATH = [ MATH = [
("matematika/0-opakovani", "mat0"), ("matematika/1-rocnik", "mat"), ("matematika/0-opakovani", "mat0"), ("matematika/1-rocnik", "mat"),