Hey everyone, Adam Schar here from Bavaro Media Company. Today we've got some more maps for you. We're going to be showing and displaying vintage maps of Irish settlement, immigration to the United States. It's going to be kind of a census maps, a lot of census maps. We're going to be giving a lot of information on that. We're going to be talking about Irish immigration history and we're doing this all because we have St. Patrick's Day coming up and this is kind of our contribution to the history of Irish immigration and Irish culture and we just kind of want to do some sides of genealogy and history. So if you haven't already subscribed to our channel, please subscribe to our channel. We do videos on vintage maps throughout the entire world, on Irish history, different cultures. If you like history and maps, you've got to subscribe to us. We upload videos all the time. That being said, let's go into the history of Irish immigration in the United States and then we're going to kind of zoom in and explore this old map. This is a map from 1880 and it's going to show you the, I guess, Irish hubs throughout the United States. We also have another map that's kind of a cookie cutter to this one, different style. So getting started with the brief history of Irish immigration. Starting around the 17th century, colonial settlers coming from the Ultzor province. I hope I pronounced that right, of Ireland, Ultzor. They were kind of a mixed bag of immigrants and this term comes up a lot, Scotch-Irish, and it's in reference to settlers coming from Ireland. This province, the Ultzor province, essentially was a mixed bag because you had British tenant farmers, you had Scotland, Scottish tenant farmers, and you had Irish people native to Ireland all farming in this province and Britain really forced the kind of blending in this province. So that's where this term comes Scotch-Irish that's often used in the US. It's this blending, this blending of coming from this province and these were the first settlers coming into the Americas. So we're going to get back into that further. In my notes, I talk about Scotch-Irish, the kind of the beginnings of it. Moving on though, 250 of these mixed immigrants migrated to the US or the Americas in the 1700s. 20,000 of these, 250,000 had an affiliation with the Catholic Church, so that's a pretty small percentage. The other flip side obviously would be the Protestant Scotch-Irish, I guess you could refer to that. Catholics later grew to about 40,000, which was about 1.6% of the 2.5 million population in America in 1775. So a very, very small percentage of people were Catholic a year before the American Revolution. The Irish immigrants of this colonial era participated in large numbers during the American Revolution. So I mean that small percentage, which was 40,000 people, they almost 40,000 people participated in the American Revolution. This is fascinating. It actually is backed by historical reference because they actually have evidence that a British general testified in the House of Commons and he essentially said, quote, unquote, half the rebel continental army were from Ireland. He was essentially saying half the rebels were Irish and from Ireland, which is ironic because it's coming from one of their own territories. Ireland was essentially controlled by Britain and half of their claimed land is going to war against them. So that's pretty fascinating to me. Moving to the ulcer province and the immigrants, we talked about the Scotch-Irish. It was really until the great potato famine of the 1840s that some of the Protestant Irish began to refer themselves as Scotch-Irish. We're getting back to the Scotch-Irish. That section, as we said, there was a blending between the three groups, English, Scottish, and Irish. In the 1840s, they wanted to differentiate themselves from the Catholics and this is where the Scotch-Irish term came really in flux because they wanted to differentiate themselves. That's interesting, I think, as well. Two factors largely led to the overwhelming growth of Irish immigration in America. The 1820s saw a vast, I mean, major, major outcry and demand for labor in canal building, lumbering, and civil construction in the northeastern United States. We'll go into this map and we'll show you exactly what's going on. 20 years later, about the 1840s, as we said before, we talked about the great potato famine, it really catapulted the growth of Irish populations in the United States because not only was there opportunity and work, but families, people wanted to feed their families, lack of food, so I mean, that was just 10X, the immigration surge, and also other cultures and ethnic backgrounds were coming to the United States, so it made it very inviting. That 40-year span between, or 20-year span, 1820s to 1840s, I mean, it was just an Irish influx right then. A lot of the Irish, a lot of the cities grew, I guess, in city areas, in urban areas because they wanted to, it's kind of interesting, they wanted to create communities in these cities, they already had kind of established communities in New York, Boston, all these ported towns and it's often because they, I guess, it was kind of like a support system for these new immigrants coming there for protection because they're going to a new, I mean, they're going across an ocean to a whole new land, so it'd be nice to see, you know, if you were an immigrant, you're going across somewhere you've never been before, you'd want to know where you're going, you'd want to have people with your same ethnicity and feel more comfortable and protected in that kind of environment with that community. Another reason, that's just one of the reasons, another reason was, and this is definitely another factor, these immigrants literally had no money, they got to these ports and they couldn't go further inland because they had no money, so they kind of just said, you know what, I got to work, I got to get here and just settle and notice the grindstone and it makes some money and then maybe later on we can develop more inland in the United States, in America and we see evidence in this map, I mean, today we know Chicago has a large, pretty significant Irish population, but on this map in 1880, about 40 years after the Great Potanio Famine, we don't see a lot of development in Chicago, we'll go further into that, but just to label all the cities that had large Irish populations, obviously Boston, Philadelphia, New York, big one, Pittsburgh, Baltimore, Chicago, St. Louis, St. Paul, and then later on San Francisco and LA. So I just want to put that out there, very, very, very interesting facts background into the Irish immigration to the U.S. Let's dive into this map, let's point out some aspects we talked about, this map is from 1880 and if we zoom in, obviously, let me zoom out, we can see the concentration, the darker portions of the key are displaying, here's the key, this is 10% of the population and over are of Irish descent and the scaling downs are obviously a lot less, 6 to 10, 3 to 6, 1 to 5, so we get kind of an idea that over 10% of the population is Irish at the time, so I mean, if we look at the map, we zoom back, I mean, look at Boston, look at Massachusetts, I mean, just overwhelmingly Irish presence and we go along to New York, it's this New England hub right here, I mean, just major, major, and if you think about it, we talked about earlier, a lot of the labor demands were because of construction, civil construction, lumber, how was the other thing, canal building, so I mean, if you really look at this, lumber was really big in the New England area, especially in New Hampshire, Massachusetts, this kind of, a lot of work being done, certainly, United States was going through, well, not really industrialization, that's kind of the beginning of industrialization, but certainly it was growing significantly around the time and cities were being essentially growing vertically and I mean, obviously the major cities, Boston, New York, I mean, those were the predominant big ones on the Eastern United States, so we talked about Chicago, right? Look at Chicago, I mean, today we know that Chicago has, I mean, an outstanding St. Patrick's Day celebration, but I mean, in 1880, I would say underdeveloped compared to Massachusetts and the East Coast, so I'm sure that growth really happened a lot later, I mean, if you look in the western portion, in Montana, this is a little bit confusing seeing the splatchiness of Irish, I mean, let's look at our ratio of Irish, it gives us by state, Rhode Island, obviously a New England state, I mean, just through the roof in Irish population, this is per capita, I believe, yeah, oh, this shows us the numbers of population, so 35,000, Massachusetts, 226, look at New York, I mean, I mean, yeah, 500,000, pretty damn significant, showing us this is based on percentage, these lines, so these are all New England states, Nevada, look at Nevada having a, that's quite interesting, I did not know about Nevada having a, I guess per capita percentage of 8.3% in 1880, that's pretty significant, that's pretty significant, I thought that was interesting, huh, here's New Hampshire in the top 20, Vermont top 20, so it's a lot of New England states, really they were coming in boatloads, I mean, this was the entry point, you had Ellis Island in New York and then you had Boston, so it really stemmed from there, you look at North Carolina, Florida, some of the lowest percentage states, so let's look at Illinois, Illinois significant on there, I mean, it's in the top 20, but it's significant today, to say the least, so very cool map that we have in our possession, let's go, we have another map, it's gonna just kind of show us the same thing, it's illustrated in green and this is really not showing the whole United States, it's showing the eastern seaboard really and parts of Chicago, this is a 1872 illustration of Irish populations and the over 15% is in the dark green, 6 to 15, 3 to 6, I mean, look at the Boston area, significant, and we've got that road, remember we talked about Rhode Island, that's significant too, Connecticut, we could see New Jersey's, got New York, this area, right around probably Jersey City area, part of Long Island, lots of Irish population, you know, in another aspect, we talked about the American Revolution, I just want to throw this out there, a lot of the battles fought during the American Revolution, right in obviously the New England, I mean, I wouldn't say all of them, but a lot of influence during the American Revolution happened in the uprising in New England, so the conception that a significant population of the Continental Army rebelling against the English was Irish, I mean, makes a lot of sense, it makes a lot of sense that they helped fuel the war, so this is just more evidence right there, so I mean, look, if we go over to Chicago, where Chicago is, I mean, it's somewhat light, you know, and even like St. Louis, look at St. Louis, St. Louis celebrates today, St. Patrick's Day, very, very buoyantly, and we can see a cohort, a population burst right there, so definitely, I love these maps, we really get a feel for history and information pertaining to Irish immigration, and I just wanted to leave it at that, I hope you've enjoyed this video and I hope you've learned something from it, and please stay tuned, subscribe to our channel, we're going to be doing videos like these all the time, we're going to be talking about history, we're going to be celebrating holidays, on St. Patrick's Day I will do a video drinking, I might try to get some green color dye, I'll drink some green beer with you, maybe we can talk about our favorite beers on St. Patrick's Day, leave some comments, we have a very fun channel here, we're not only about history, we also like to have some fun, so definitely subscribe to our YouTube channel, leave a comment below, share this video, St. Patrick's Day is coming up, we're going to be doing more St. Patty's Day videos, and I will talk to everyone soon, have a great day, take care, bye now.


Thank you for joining us for another episode of Kondo Insider. My name is Jane Sugimura, and I'm one of the co-hosts of Kondo Insider, and Kondo Insider is a show about people who live and work in condominiums. And we, in our show, the purpose of our show is to deal with issues that Kondo people have to deal with. Today we're going to be talking about animals in no pets buildings and some issues that, you know, both the residents of the building and the animal owners have to deal with. And my guest today is my good friend and colleague, John Morris. Hi, John. And John is a partner in Ekimoto and Morris LLC. They've been specializing in representing condos, co-ops and community associations for over 30 years. And so they do everything, everything for the community associations. And he and I, many years, for many years, right, John, we were legislative buddies back in the halls of the legislature, you know, advocating for certain bills, you know, relating to condominiums and co-ops, and we did that for years. We spent many a late night at the legislature with our good friends there. And I want to point out too that John was the first condo specialist in the state of Hawaii. So that's something that's, you know, you've got a, you know, pretty much highlighted on your record, right? Yes, that's right. Well, you know, thank you for joining me on the show today.  And, you know, and in my building, my building is a no-pence building. And I have people coming to board meetings and yelling at us, the board, like, why are, why do we have animals in our no-pence building? And, you know, I have to explain to them.  But anyway, I'm sure we're not the only building that goes through this. So why don't you explain to our audience what creates a no-pence building? I mean, why is there such a thing? Well, the fact that you have animals in a no-pence building, the first step would be, are you truly a no-pence building? Many years ago, I'm sure you'd remember, a state senator was insistent that prohibiting pets in a building required an amendment to at least the bylaws. And not just be done by house rules. House rules could certainly control pets, but to absolutely prohibit pets. The law was changed. This is section 514b hide from 156 to say that prohibitions, as opposed to restrictions, prohibitions on pets must be as a result of an amendment to the bylaws must be included in the bylaws. And in our building, we do have a bylaw amendment. In fact, it was 1978, and we keep trotting it out and showing people who want to buy into our building. But we have a bylaw amendment. And that was before I bought into the building. So I don't know what was the reason for it, but apparently the governing documents allowed pets at one time, but the owners voted to amend their bylaws to prohibit pets. Yes, that's pretty much what we have to do, based on the current law. And it sounds like you're ahead of your time, in fact. Okay, so we have a no-pence building. But that means, by definition, that there are other buildings in Honolulu and in the state of Hawaii that allow pets that are pet friendly, right, that don't have bylaw amendments to say, oh, you can't have pets in the building. Yes, that's probably a larger percentage allow pets. Some associations try to prohibit pets just by a house rule, but that is not legally probably going to work, but you're right. Many buildings do allow pets, so you can't necessarily anticipate that if you're buying into a building, it will or will not be a no-pence building. And so if somebody is looking to rent or buy, how do they know whether it's a no-pence building or not? Well, yes, they should. I'm not sure that would be a standard disclosure, but that would be something that the seller, at least in response to a question, if the prospective purchaser asks, should be able to tell that prospective purchaser whether it is a no-pence building, because it should be stated somewhere in the bylaws, ideally, that this is a no-pence building. So that's what the prospective buyer would have to... What about prospective renters? Pretty much the same thing. Yes, they would be asking whoever the landlord are pets permitted in the building and they would probably be incumbent on the landlord to find out. It may not be something they thought about, but they should be able to find out from the management company, the onsite manager, the board, whether it is a no-pence building. Really, people who rent or buy into condominiums, they have a choice. They can pick a pet-friendly building or they can pick one with no-pence, a no-pence provision. Yes, that's true. They can select based on whether it is a pet permitted or no-pence building. Okay, if that's the case, then why do we have situations where you have animals coming into a no-pence building? Human nature, probably. Particularly if someone likes the building, they feel that it's a building they want to be in. They may try to ignore the no-pence restriction and move into the building. Now, some people do that without knowing inadvertently. Some people are familiar with the process that allows them to essentially change a no-pence building into a pet building or more specifically to an assistance or emotional support animal building. Many people are now aware that under the law, you can have a pet in the form of an assistance animal or an emotional support animal. You can have even in a no-pence building. What law allows them to do that? There's a federal law that allows them to do that and there's also a state law that allows them to do that to say that they need their animal for emotional support or for assistance with a disability that they have. And the definition of disability is very broad and can often mean someone says I'm attached to my dog, my cat. I can't live without it. So that qualifies me as having a disability and that allows me to rely on the state and federal law or permit me to have my animal in a no-pence building. Okay, but what is the process? What specifically do they have to do? Let's say I'm a renner and I decide, oh, I want to live in that building. And when I get there and I have my animal in hand and they tell me, oh, but you can't bring your animal in here because we're a no-pence building. And I'm just going to say, well, I think I can get my animal in. I hear that there's a law and do you have the paperwork? What paperwork is required so that I can have my animal in a no-pence building? Well, in fact, and this is if you look at the Hawaii Civil Rights Commission, informational leaflet on that, it says, does the request have to be in writing and they say no, it can be made verbally. So anyone can just ask. They can say, I need to have my animal with me in your building even though it's no-pence. And then the question becomes, what does a person who wants that animal have to show to the association to justify their right to bring the animal into a no-pence building? And there are essentially three questions which are truly not just for pets, but for other disability-related requests. And the first is, do you have a disability as that is defined in the law? The association would not be permitted to ask what that disability is, but just whether it's a disability is defined in the law. The second question really is, do you need an accommodation, an exemption from the rules, a reasonable accommodation? Because of your disability, and if the answer is yes, I do. Then the third question is, what is the reasonable accommodation and the person who wants to have their animal in the no-pence building says, I need to have my dog, my cat, whatever else, with me because of my disability. And those are essentially the three questions. Are you disabled? Do you need a reasonable accommodation to your disability? And what is the accommodation, which in this case would be the animal, which is often referred to as an assistance animal, assisting the person with their disability, sometimes as an emotional support animal. Service animals do not really necessarily apply in this situation, but that has somewhat changed. Service animal is a similar type of animal, assisting someone with a disability. But some people, what we seem to experience is what we get, we get these letters from social workers, from psychologists, and it looks like a form letter. It basically says, I'm licensed to do this and that. And the resident, John Doe, is my patient or my client, and I have met with him, and he has a disability recognized by fair housing, and he has need of a special needs animal that will alleviate the symptoms of his disability. And so we ask you for a reasonable accommodation. So we get these letters. Yes, that's true. And I should be clear, the owner can ask the resident or potential owner can ask to have the animal verbally, but it is true that they do have to provide the information, the three elements, disability, reasonable accommodation and type of it. They do have to provide that in writing from someone who would be considered qualified to give that opinion, which is not necessarily a doctor, can be a social worker. I believe there's suggestion that it could be someone who is the chair or the organizer of a support group for people who need their animals, but you're correct. The request can be made verbally, but the justification for the request would be often in the form of a letter. The only thing is, as I mentioned before, you could not give someone a form and force them to use your form. You could just say, you have to provide us through your qualified healthcare professional, you have to provide us with the information, this form request, even if you don't use the form, you still have to provide the information.  In fact, we have been getting, I think we've gotten three letters from the same social worker in South Carolina, who happens to be certified in Hawaii.  And so, you know, occasionally, we get letters from medical professionals on the mainland. And I guess, you know, my board has questioned, in one case, the letter was over five years old.  Yes. But we have to accept those letters right. Yes, the problem, what we usually advise associations is it's very difficult, if not impossible to keep the animal out. The best you can focus on is controlling it once it gets in because you are correct. It doesn't say, and nobody really argues that the healthcare professional has to be from Hawaii. And there are questions where they don't even, they just have a telephone interview with the person requesting the animal. It's not even clear that they're really in a sort of ongoing relationship with the person requesting the animal, but it is very difficult to challenge a letter that you receive as long as it covers those three points, you know, this person has a disability, which I'm qualified to say they do, they need a reasonable accommodation and that reasonable accommodation is the animal. So you are correct. Challenging those types of letters, even if they're from someone on the mainland can be difficult. Now they, they did change the law this year. So I thought at least to say that if you just buy a form from somebody over the internet, saying that you need this animal, that may not be sufficient. So that was added to the law. It's in section five 15 three, I think it's subsection nine, possibly, but that does actually say, just something you bought over the internet may not be enough, but in answer to your question. If you're a real person, giving an opinion that the person requesting the animal is disabled requires the animal. It would be very difficult to challenge.  I mean, who is it that's enforcing the law. Generally, in Hawaii, at least it is the Hawaii Civil Rights Commission, I think they typically have an arrangement with the federal government with the housing and urban development to act on complaints to the federal government that most of the time in Hawaii, if someone is denied their request for a reasonable accommodation, their assistance animal, they can go to the Hawaii Civil Rights Commission and file a complaint alleging that they have been denied their rights as a disabled person by an association or some other entity so they would file a complaint with Hawaii Civil Rights Commission, the Hawaii Civil Rights Commission will generally appoint an investigator to look into the complaint, and they will then contact the association, asking them to respond to the complaint. So it is in fact disabled people who need an animal to have the right to go to the Hawaii Civil Rights Commission to enforce Hawaii and even federal law that says they are entitled to have an animal to assist them with their disability. And, you know, I, you know, I have to share with you an experience that we had in our building, and this was several years ago. And we had a complaint made to this Hawaii Civil Rights Commission about our association. And my president and I ended up spending most of the day with the Hawaii Civil Rights Commission and our legal counsel appointed by our insurance carrier. And, and, you know, because we really thought that we were set up by somebody who was trying to take advantage of the law and us. And so we were fighting it. And our counsel took us outside and said, hey, the insurance company is willing to pay the 25,000. You guys want to fight this. You do so. It's on your own dime. I'm leaving.   Yes, that's why again, we usually advise associations. You're almost, it's almost impossible to keep an animal out of your building as long as the person provides those three elements that show they're entitled to the animal. So it's probably better not to fight, not to try and prevent the person from bringing the animal in, but just to make sure that if they do, they are respectful of other people and they control the animal and do not allow it to become a nuisance but you are correct. The Civil Rights Commission will impose sometimes significant penalties if they feel there's been a breach of the Hawaii or the federal civil rights laws that permit disabled persons to have animals to assist with their disability. And those investigations can take a lot of time. They can drag on for a while. I don't think it's appropriate or too often don't go to court because sort of as in your case, the attorney or the insurance company will say that this is a losing proposition and try and settle the case. The Hawaii Civil Rights Commission can be fairly aggressive in pursuing these types of claims if they believe there's been a violation of the fair housing laws, state or federal. That's true. Right. And I want to just interject right now that you know the Hawaii Council is doing a seminar on November 17 with fair housing. And so if our listeners want to come to the seminar we're going to have the Civil Rights Commission participating. We're going to have Leo a and we're going to have Eric for our, who is an attorney who represents homeowners, you know, in these disputes with associations about reasonable accommodations. And you know so you know people want, want to see, you know how how how it works I mean, or, you know, see how the Civil Rights Commission deals with these issues. They should attend our seminar. Yes, I would certainly recommend that because hearing it straight from the horse's mouth is probably going to help people get the context they'll understand the psychology or the way in which the Civil Rights Commission review views these types of issues that will probably and legal aid of course will also become involved if, if somebody does complain and there are sometimes cases where legal aid will file a lawsuit on behalf of someone who's been denied the right to an animal. So that's a very good seminar I would think, well worth attending for boards property managers sounds like a good program. And you know, you know, because you know and the reason why I wanted to talk about this today is we have owners coming to the board and saying we're a no pets building I bought into this building because I'm allergic to animals or I bought into this building because I don't want to be in a building with animals so how can we get all these dogs. And they're beating us up and when we tell them well you know, we really don't have a choice if they, you know, comply with the law and they come with a letter and, you know, things we don't have a choice.   And so I have a bunch of, you know unhappy owners, and what happens is, there's this tension between the people who have animals, and the other residents. And so it's like, you know, we all got to get along we live in the same building. So have you got any tips on how we can coexist because it's not like we can make the animals leave. If they've met the requirements it would be almost impossible to make the move. There are things you can request. And this is in the handout from the Civil Rights Commission, you can ask animal owners to observe all laws leash laws pickup laws, assume responsibility for the animal, keep their dwelling unit clean, don't allow it to become a messy thing, clean up the animals waste, have the animal licensed have it vaccinated with documentation showing that's been done. Have it under the control of its handler, unless for some reason, the person's disability makes that difficult for impossible, and having the animal meet minimum sanitary standards and, although not stated there, it is important to have people who bring their animals into a no pets building to respect the rights of others because there are people who are allergic to animals who are afraid of animals they might have been bitten by a dog. I personally used to be a paper boy so I'm not too wild about dogs myself. So I think that is something that the board has to stress to those who bring animals into a no pets building that even more so than in a pets building they should be respectful of the rights of others for example if someone is truly allergic to an animal they would have a claim. They are disabled and they are entitled to have their disability recognized and appropriate steps to prevent so for example someone in your building and no pets building with a dog should not allow that dog to get close to someone who is truly allergic to that animal and that's one of the things that if you just don't like dogs. That's not necessarily going to be enough but there are cases I took a quick look before this. There are cases dealing with this there was an Iowa Supreme Court case which sites but it says that the reactions of other residents are relevant in determining whether someone can have a support or emotional support animal in the building. And so the rights of other owners do not have to be sacrificed on the altar of a reasonable accommodation. There might be one thing that a board could consider doing if there are no pets building, but people are in the building, have assistance or emotional support animals is laying out what the board expects. I think you should convey to those owners who don't want to have animals that it may not be easy to get rid of that animal. But it may be reasonable to require the animal owner to control the animal in a way that does not cause problems for others. That's one of the things then the. There is a thing where the Hawaii Civil Rights Commission has a rule on when certain animals refusal to allow the use of a particular animal. It imposes quite a high standard. The animal would have to be a physical threat to the health of safety of others impose an undue financial burden on the association cause substantial damage if it damaged the property. But one of the things to give you an idea. If someone with an emotional support animal in your building bites another emotional support animal, you could at least require that biting animal to have a muscle at all times on the common elements. You could not necessarily according to this rule require the animal to be removed immediately. I'm not sure whether that would apply if the animal bit a person as opposed to another animal. But these are things you have to convey to people that it may be extremely difficult to get rid of the animal. It would be much easier to control the animal when it's in the property. The reasons you know one of the suggestions to is you know before this situation gets out of hand, the association should have a set of rules and policy relating to animals in the building, whether you're no pets building or a pet friendly So as to control these situations when the animals misbehave or the animal owners don't comply with, you know, being respectful to the other residents. Yes, you do your firm does and a lot of other condo association attorneys do right. There's an association out there who doesn't have a policy and a set of rules to deal with animal behavior on on premises, they would probably, you know, you're, you know, you would you suggest that they contact their attorneys and get this package. I think they should contact their attorneys because it will. I mean in the long run you want to as much as possible have everyone in the building, recognizing the rights of everyone else and trying to get along and I think if you have a set of ground rules for people who bring animals into a building whether it's a no pets building or not. It would be worth doing so that everybody has an understanding of how things are supposed to work. And again the voice of rights commission does recognize the right of an association or other residents to have certain restrictions on animals. So you are I would agree with you that it would be worth the association talking to their attorney and developing a set of rules that allows everyone to coexist in the building, despite the fact that some people do not want animals and others to. So that would be worth it. Okay well john you know we've run out of time and I really appreciate you coming on on on our show today to talk to us about these, you know, about this issue, because like I said I'm sure I mind my building is not the only one, you know where we're dealing with this. And, and, and people say well they're pet friendly buildings out there why can't they go over there as well. You can't require people you can't force people to me they want to live in here and they find out it's a no pets building. I mean, and, and, and they meet the requirements we have to do the reasonable combination. It's not, you know it's not a choice I mean if they meet the. We have to comply with the law. And I think it would be worth suggesting they go to the seminar your planning so they can hear it directly from those who do enforce. Right. The horse's mouth. Yes, that would be worth doing I think people who do not understand why the animals are allowed in the no pets building they would learn straight from those who enforce the law. Okay, well thank you john from again.  Thank you very much. Thank you thank you so much. Okay, for joining us. And for our listeners, I asked you to tune in next week, and for another episode of condo insider. So like I said, for people who live and work in condos, and we hope that you know we're able to provide you with information to make your lives a little bit easier and answer some questions you may have. So, thanks again for joining us and make sure you tune in next week for another episode. Mahalo and Aloha. Thank you so much for joining us.


We'll come back catch from scratch episode 12 topic today is menuing so file edit view that kind of stuff drop-downs Things that happen when you click on the buttons. That's the plan today So we're using again x-win xlib x11 whatever you want to call it and There are a couple ways we can go about doing this right now if you look at our old function We just have a single render on the screen. The whole screen is a single window Well one option that we do have is to keep it that way keep the whole big red box as the render window and you know draw our you know body whatever it is inside there and Then on top of that draw like little rectangles like so You will have a file bar button there edit button View button help button whatever it will have drop-down buttons that may pop up below those You know, whatever you would expect in these You know in these drop-downs put them here and that's fine I mean you can do that and have them automatically opening close when you click on them That's fine But when you're just drawing rectangles and text to the screen, which is not hard to do in in this like in this way It's gonna be hard for us to determine what we're clicking on So if we have a mouse cursor and moving around the screen like this How do you know that you're on top of a button or not? Well, you're gonna have to go through every button every time and see when you click if below you is a button So you have checked these x coordinates and these white coordinates and see if you're between them for every single one of these Until you find where you are and that's not really that efficient in my opinion So I'm not gonna do that. There's actually a different way about doing it Which makes a little bit more sense to me and that is to Break up our big window our display. Maybe you would say just just just a sub window here This this main window that we're using to render our you know software to the screen and Then break it into smaller pieces. So we'll have an orange here We'll have our render window and on the render window will have you know that drawing or whatever we're rendering to the screen and Then above this maybe we'll have our you know our menu bar up here and maybe in yellow just for the just for the drawing here, maybe we'll have a Button there people will have a button here. We will have some drop-downs here You go out some drop-downs here All as different windows like sub windows and the advantage to this is a couple things one person Foremost is that cursor thing, you know if I click on this there's actually a way in you know X win to detect what window we're clicking on and that makes this super super easy And so that's what we're gonna take advantage of mostly But there are other advantages here as well like this hierarchy They could be of a lot of use for us in terms of how we're going to store all this information And so that's the plan for today And so what I really want to have let me just give an example really quick of well We're what I'm trying to do here in terms of these buttons. So just in this video I want to have two sets of buttons I want to have a Query button and for the query I want to be able to query things like the number of nodes in the model Things like the number of faces in the model Maybe we could have it have the number of or maybe like the centroid of the part Things that have to just do with general queries and Then I also want to have a View view buttons just to keep things simple for this short video. I want to have a beat from positive x y and z maybe from Negative x y and z You know those six options there. Maybe I want to have an isometric Option, maybe you can do a diametric option.  Maybe you want to change that It's your options. It's kind of what I want to do today in this videos I have drop-downs and then have each of these things be usually exotic, you know things you click on Correspond to a function. So this we already have a function to count the nodes You have a function to count the faces probably not going to do this one just to keep it short These will have to code up changing the view But basically if you can look at this really quickly These functions here require the body as an input, you know, they require The body structure as an input to these functions These don't these functions down here. We're looking at you know about the view they require like You know the look at and the look from and different types of characteristics of our of our view frame access To in order to to render like, you know, these things as a useful reason to be different inputs And so in order to have different inputs, we'll have to use obviously function pointers to refer to these functions And on each button But we're also going to have to figure out a way that we can prototype these in C to you know Either be a body function or to be a I don't know if a view function So we'll have to address that in a few minutes. So just to get started really quick You only have to change a few files We have to change the main function and the to draw function of the to the true Draw files. So the draw header and the draw C file in the main File I just want to change our test case a little bit. I don't want to work with this hotter balloon anymore I want to work with just one of our primitives here cube and then we actually have a function for this we have a make Rectangular prism and we pass in some parameters here I think you pass in the the first coordinate and zero point five. I would have a unit Unit cube here. So everything's going to be a size side of one length a side of the one and then It'll be centered on zero zero here with this these inputs Okay, then look at and look from keep it simple. I'm just gonna change this to zero zero zero one one one Oh One more thing this reticular prism is not triangulated.  So Thankfully, we have a function for that. We just have triangulate body Cube done that makes triangles of the body At this point, we'll keep this draw style. We'll keep this draw body. You just got to change balloon to Cube So that's good. Now we can edit the draw dot H Header to enjoy each header. I want to do a couple things actually only only two things I want to create a structure for these many buttons. So many button like that And name as many button we have a bunch of parameters for each but as you would expect each button has a length and a width So we'll look at the ins. We'll say int length if I can spell int width Now I want to be able to store them, you know in certain positions So they need length and width also need a location in space. So I'm going to store in DX and dy These are going to be distances from their parent element. So this blue this blue, you know Rectangle is at zero zero on the yellow rectangle and this same in one is that I don't know like 50 zero on the yellow rectangle. So that's like where it is on the parent element DX and dy in pixels now I want to store in Not how many children there are so we'll say num sub buttons. So for example this teal Button has three sub buttons and same with the salmon one has three purple purple buttons. We also want to have a Well, you could put this as a bull, but I'm gonna put it as an int because I was having trouble earlier today making this kind of stuff work with With not aligned Data types, so I'm just gonna give everything an int if I can so int show Children I should work and Then now we need to be able to sort a couple different things first is an X text item I'll thought about this a little bit later. Basically, this is how we're going to store The text so where it says queer your count nodes or count faces or change view that'll be sorted in a text item And X actually provides this for us the X Lib. Oh speaking of X that I have to include X Live because we're gonna be referring to an X text item. So we'll say I include X11 X Lib. H. I think that's right X text item text item sure will also need a couple more things will need the window because obviously these are all gonna window That's the whole point of this was making them all a window. So we'll store the window And now we need what's called the graphics context These are basically ways you can store like the colors of different things So you want this to be you know gray like up here and different types of font color different border colors, whatever You could put those in a graphics context. So we'll have a couple of those will have graphics context for the fill and we'll have a kindness for the Border or that board and one for the font Now comes through the actual functions. So like the the callbacks or whatever the function pointers and for that There's two different options here We can have a function that takes in a body or functions that take in these other Parameters here. We don't need to even need this just goes to and for that We have to actually use a union. I've never used that before in my life, but now it's a good time to start using a union Basically you need to stores two different types of values in the same memory location So we need two different types of functions here. They're going to be just function pointers They're going to return void and we need a body function that takes in like I said before a struct body And then we need a view function That takes in I Guess just those there's a three Element floats two of them. So it's a float three Look one being look at one being a look from And what else I guess we have to name something we'll call that funk and Oh Obviously, we don't know which one we're using so for any given button We have to know whether or not it's going to be a body function to pass in the body Or a view function to pass in the view so we have to store that here So I'll say int which funk that'll be just one or two if it's one It's this one and two of it's this one and lastly the last day I want to store in the structure is the the children so we'll say struct menu button Sub-button so this will be an array of pointers to the other buttons that are children of this of this given parent button So the blue one has will have three elements and they'll all be in this array So that's that for this. We've we've finished our header file. Now. Let's go to our draw dot see now this one Couple things to change in this one We'll put all our functions right here so we can we can reference them So the first function we need to create is a function that returns a menu button just like a constructor So I'll be struct menu button pointer it'll return a pointer to the button. We'll call it create menu button And we'll pass in all the parameters. I just mentioned So let's see we need int width in Get rid of that for a second. I need that right now int width in tight into DX int dy We need a couple of RGB values and we have this function from last time that stores You know in one inch these RGB coordinates So we'll say int our our GB background Int RGB border Int our RGB Now we'll need some ints for the whether or not, you know, we're storing the buttons and how many we have so known sub buttons how many buttons Int show children Recall then we had Now for the X text, I don't we have to give it a careray of text and they have to tell it how many Is it an inch? I think it's an inch in cares It's how many characters are in this character array I'll get into how that works in a little bit and then we Also have a font so font I'll talk about that again later This is pretty challenging actually, but it's actually easy to implement the hard to understand what's going on I'll get into that in a minute and then we also need to pass in the display to know where we're putting this on the screen so the display pointer and disc and then a Window for what window it is the parent window and Lastly we'll need those function pointers. So we'll say int which funk and then Was it void? I guess I've done this before but it's kind of hard to remember what's going on when I do it, you know live so in here we have to first malloc the Amount of space and you have to pop away all these All like the fields in that structure. So I'll do that off camera and I'll be back in a few minutes Okay, I did most of it just to show what I did really quick. This is the malloc first off There's seven ince one text item one window three graphics context one void pointer That's to the to the function and then this number of sub buttons times pointers to the sub button So the chummy children buttons are there. So it's gonna vary the suffrage button. We create different different size of the structure So then I just have the obviously all the ince defined here with height dx dy sub buttons Which funk then the text item so text item is pretty much what we're gonna draw like we're on top of the So that we have text and characters and then a font. I'll talk about that font later We store that in a window. We create simple window This is actually making the window at the x and dy from the parent window with width and height this foreground and background color And then we have these graphics context for the font the border and the fill Create with x set foreground to use that to create the actual color So we have RGB font border and background as inputs put those in the structure and then return the The button last thing here is the actual function itself like the the callback or whatever you want to call it like the Function pointer that was gonna execute when we click on a button So that's gonna vary so based off which what value we have for which function this function pointer will have a different different value So we could say if Which funk is one Then menu button funk What is it body funk? Equals funk so basically we're saying this input function here Which is a void pointer to this input function this that this uh, yeah this funk input function here That will be stored in the in the unit we have called function in data structure in the body function element of that union So that's how that will work then if it's not one so else if Which funk equals to Then we have a menu Funk View funk equals funk So it's the different table to type and then lastly if there's no no function I guess we'll probably store null. So we'll say if else we'll say menu button funk and This you pick either one. It's it's the same memory address. So body funk equals null This basically tells us Which function to use in the you know in the actual button when we click on it This will give us you know this function in in this prototype versus this prototype because there's different parameters if you recall This one takes in a body as an input this one takes in two sets of floats So that's why we have that so that should be good for this this structure except for one last thing I didn't do We want one more helper function over here and that will be a Avoid function populate sub Buttons because I didn't set those up yet. So I want to make that server function. So I'll play some buttons as input We will take the structure to populate. So structure menu button menu button and Inputs will just pass in an array. So struct and you button sub buttons array and this function We'll just have to loop over and then fill this out. So we'll say for int I equals zero I less than menu button sub buttons and we will Just fill this out menu button sub buttons I equals sub That's good, and I'm just return I guess just for For fun. Okay, so that's that that's sort of everything you have to do just to populate these these menu buttons and then create them now the question is What are we creating like how do we? Set up this kind of a structure here. We have to be able to pass in values So we'll make a function for that and that will be sort of like I Guess we'll call it We're trying to structure to return a structure to like the the parent so we'll say struct menu button and we'll call this populate menu items and It will take you just a couple things as a parameter Just because we need just from the top level down and we have to pass through if you recall We have to pass in display and window here. So we'll pass in display and window here. So we'll display I believe that's a pointer and And Window win and then we'll pass in a font again. I'll talk about that in a second Just keep you bear with me for a few minutes. We'll set this all up So in here I'm just gonna take a few minutes aside and put this stuff in I'll explain what I did after I finished Okay, I'll see you in a few Okay, this should work. So basically I have I Call create menu button on a few things first things first. Let me show the drawing again I call it for the main menu. That's the yellow one that I'm calling it for the query button That's gonna be blue and the view button. That's gonna be the salmon color I'm passing in obviously the coordinates and length and the width in space Okay, no problem I'm passing in these colors this color here is is actually like a light gray Kind of like the one in the like the paint software here black and black for the border and the font The main menu is gonna have no words on it zero letters But the other two are gonna say query and view respectively. This is how many letters in each font display parent window. Oh You know what? That's not gonna matter actually, but this should this could be the menu window I'll I'll might go look at that later. That might be important if not Maybe change I'll take a look later at that. There's no there's no functions for these There's no like callback for those functions Then we're passing it into populate sub buttons in so in order to you fill those these two buttons into the main menu Then we repeat again with the sub buttons So here we have account nodes account faces that those will be in this the teal button query button So we'll have a count node account face option and then in the same an option will have these functions here will have a View from positive x positive y positive z negative x I forgot to change those Change those now. Good. Then I caught that negative y negative z and then isometric and so basically It's the same thing again. I'm just calling with it with function pointers like to each of those functions now the functions that I just created for this are Here so these are like this is how you make a function pointer with different input parameters So this is with the view functions so we can create a like these functions here as a In this way, however, we have to be able to Decreate these first off so these have to be declared above and then you can do this by passing the address to the function Into like this kind of a pointer. We have this for both the view functions and also the body functions So let's go above and let's make those Let's make those functions that we never calling so the first function to call is very simple. It's gonna be print node count that's the one I just called that takes input the struct body and Then it's simply it's going to print f something like query count nodes Equals percent d some spaces in here They could look nice And we'll simply call that function to be already made in a previous video We have something called count nodes pass in body and we're done Then we can return here. This is print nodes. What about print faces? Well, it's gonna be very different not close at all Print face count went print count faces Count faces Awesome now comes for the the view type stuff So this is gonna be a bit of a problem Let me just do the easy part first so We'll make some functions. Let me avoid functions again. So avoid view from positive x We'll take in floats Look at We'll pass a look from first. That's what makes more sense and look at in these functions Very simple. We just have to change the value in look from or this is a pointer It's pointing to the first element of look from so look from zero This is gonna be the x-coordinate where we're looking from obviously hold on Let me just do this x y and z obviously we're looking from positive x the x-coordinate is going to be Positive one and then these are gonna be zero and zero but now we need a way to Like recompute the look the look frame in a kind of like a modular way I don't have to program it in each one of these functions. So Let's make a new function here called recompute View frame and we'll pass in The same input so float look from size three float Look at size three And we'll create that above here and that will be another void So let's make that function So the logic here is going to be very much like logic from previously Let me let me go down and get that and this is actually a good opportunity to change something here. We go These these lines right here. This is largely what we have to do By computing the view frame axes once again We did this previously in our draw function, but we have to be able to recompute that whenever we click one of these Buttons obviously and so we have a u3 and you want I'm going to actually bring out you want to do for a reason So you won size three You too size three and so here's why I want to do this We because here's the actually there's actually a problem with what we did it before in it When the previous video we had a way to render to the screen in in a very orthogonal perspective in the orthogonal way where we didn't really care so much about the Where we're looking from and this algorithm that I put together for generating these look frames is this view frame axes it works for every combination of looking at something except exactly on the z-axis and And then we never had a problem with that up until now But because now we have these functions here that view on long the positive and negative z-axis We're gonna have to actually address this because this sort of functionality does not work If you're parallel with the z-axis, so we have to create a new type of new new logic here so the first thing we have to do is We'll say if So we'll say if it's not parallel So if if the x of my components of of u3, which is how we're looking are, you know non-zero, so we'll say you u3 0 or Where's the orbit? u3 1 so if either x or y components are non-zero we do the old thing This is the old thing that that works no problem with with the old the old stuff. However, if that's not the case We have to do something else and by the way, this is not going to work, of course because Stupid u3 1 is this u3 u1 1 is this u1 2 equals this u2 0 equals this u2 1 equals this And then u2 3 or 2 equals this Stupid, I hate that now else Very simple We have to just hard-coded an alternative for this because it's not going to compute these like cross products properly if we're if we're you know If we have parallel to the z-axis, so u1 is going to be Okay, so the u1 is actually which way it's right So I guess the best way to do this is just say that right is right So we'll say 1 0 0 is the coordinate for to the right 1 0 0 and the coordinate up you'd expect it's going to be 0 1 0 right however That's not quite right because we do have a u2 1 equals something and Then u2 2 equals 0 so basically we're going to hard-code that the right direction be the x-axis and at the up direction be the Z component the same the same number as the component It's going to be it's going to be a you know if we're if we're parallel with z z is going to be one direction So this will change sign and give us the right Oration for our view frame. I think u2 0 1 and 2 yet 0 u3 2 Zero yeah, that's right to me And actually now that we have this I can copy this down below You can just reuse this down below because that that did not work paste Okay, anyway, I'm going to go back I'm going to finish coding up these these different view from positive x positive y positive z routines and I'll be back in a few moments Okay, as you can see I Double this I copied this function a few times view from positive x at 1 0 0 now We have positive y which is 0 1 0 positive z which is 0 0 1 negative x is negative 1 0 0 negative y is 0 negative 1 0 Negative z is your 0 negative 1 and then lastly isometric is 1 1 1 very simple Then I went through and I realized that we could do one thing very easily if we use global variables We can actually make this function work a little bit better. So We were computing these you want you to and you three values like sort of float arrays in this function based off what we clicked here and in the drop-down menu and then we created this view frame for these coordinates and At this point we can set these values to you one new you you two new and you three new Which are what we use in the actual like a render loop? However, it's I said before if we do it in a global sense, it would be really nice So I'm gonna make a global variable for this and just use that so we'll say floats you one new three You two new three And you three new three Okay, that should be good now. I can actually go but go down here where we're Let me get rid of this white space or black space go down to where we're actually defining you you want to and You one you two and you three new and Comment that out because we don't need that anymore. See like this. Oh and over here if you look here GL front face Clockwise this was what we can mean in the previous video to render that hot air balloon But actually in in my implementation for the way we're making the software the The face loop is actually counterclockwise. So I'm gonna comment this out and put it counterclockwise Another I see that that's a good thing to change Well, I think it'll still work But just for the time being I want this to be accurate to what we're actually doing in this In this platform so counterclockwise is for the front face. That's fine And now comes the question is how we're gonna actually implement everything we just did in the actual draw body function and It's not really that hard. You can see we've changed our reframe access here as as before so We have our window here And you have a display and this window is our simple window This is our our big red window on the right that you can see Now we also would like though To break apart the render into a smaller window the smaller origin right now the render is in the red window We want the render to be in the orange window here. So to do that not hard I'm just gonna copy this again And we'll create a render window And it will be a member of the Window it'll be a child of the main window and The render window will it will start at 020 So we're gonna have 20 pixels of space You know for the yellow window here for the menu window and after 20 pixels will go right into the size of our Of our render, which will be a full width and then everything about 20 pixels in height The colors I don't think matter all that much. I think I'll just leave what it is I'm just gonna render over it. So it doesn't really make a difference and Honestly, I think that's like the biggest change to make in terms of that We do have to map that window. So where it says map window we have to map The render window to the display Render when and that store name is fine Okay, so I guess here's a good time to talk about the font so Now fonts work differently on different machines that the way we're going to work with it here in in like X win is that we're just going to load a query font and On my machine, there's like a billion fonts. You probably have the same fonts is made to be honest But you may not and so if you don't and it doesn't work you can you can change what we're gonna put in the quotes here But you know, honestly, it should just work out of the boxes is a very common problem We're going to use Lucida sans size 12, which is very very common So what you do is you create X font structure X font struct We'll call that font struct and we can Basically use that function dimension X load query font and The idea is that on display you can just query this font and you pass it in you can say fix I think fixed works, but it doesn't have every sort of it doesn't work for everything And it's also a fixed font size. So that will work on any machine, but for us, we're going to use Lucida Sans 12 So it's gonna look up the font and get everything about it from the machine And then we'll We'll just get the menu meant meant the menu buttons now. So we'll say struct menu button and while we'll call our Populate menu items and we'll pass in the parameters which were display window and Was it font I didn't remember If it is the font we pass in the font struct FID that gives us the idea of the font and then Last thing if you have to map that menu that menu window because here we've we've mapped the red window to the screen We've mapped the ornament of the screen. You can see we have to also map the yellow one over the screen So we'll say X map window this is the screen and We're gonna pass in menu button Window so the parents the first The first menu button window will be passed as the window to map here and now comes the actual rendering so We can actually render these main ones or out of the loop because they're not going to be in Overlapping this orange render render loop window So we can actually render these two out of a loop at least to begin with at least we should and so we'll say for int i equals zero i less than menu button Num sub buttons Plus plus so we're gonna loop over all the sub buttons in that in this big yellow container here Which is gonna be just two for us, but when we add more it will be you know five six seven or eight So we're gonna loop through and we're going to we're going to draw them this way So X map window display menu button sub buttons I Window So we're gonna map all the children basically like this So all the all the children are gonna have a pyramid map means make make appear basically So all the windows that corresponded the blue and the salmon are gonna appear just these two will appear and Now we have to actually draw on them because we just map the window, but we haven't drawn anything yet So we have to do X fill rectangle That will make through the background color. We have to do X Draw rectangle that will draw like the border and then we have to X draw text and that will draw the The actual like words so query and view to these boxes. So I'll do that and I'll be back in a minute Okay So I put these together We're filling a rectangle on display The window that corresponds to the the actual button that we're drawing We're gonna pass in the context for the fill the border and the font respectively Now the fill and the border are gonna start at zero zero, you know the top left of the box So stop here to start at the top left Now the width and height for the the background are going to be full You know width and height but the background for the border is going to be one pixel less because I want to be able to See the border on both sides And that's that's all that the matters for those two functions and then for the text draw text We're passing in the font color And we're gonna put it at 815 So we're gonna give it a little bit of space from the edges so we can actually kind of center the pitch center the words a little bit better in the in the boxes and Then pass the text item from the button and there's one text item. So that's all you have to do So honestly, that's that's it if we went it right now we would get the You would get the orange box yellow box obviously the red box the blue box and the salmon box We wouldn't get these green and purple ones yet. So those we have to actually do inside the The render loop So that's the plan now. I'm actually to copy this because that was gonna be very useful in a minute so let's let's go down into the render loop in here And so I'm gonna paste it here just for the time being but we have to do a few different things This is gonna kind of long. I'll do them right now, and I'll be back in a minute And I'll show you what I did be right back. Okay, I'll do this last part live because I think it's important. So I Won't allow you to be kind of different than what it is right now. So right now If we click anywhere on the screen it automatically goes into these events I want to break up the events by what we're clicking on so if we click on the render window I want to do the render events if they click on the the menu bar. I want to do the menu bar events. So Basically, I want to say I want to have an if statement here after this event. I want to break apart these events because of what kind of category there they are so I'll say if event X button sub window equals render window I guess That's that's it. Then we'll do these events here These are like kind of like scrolling in and out dragging the mouse Else We'll do these events. I just coded up and I will explain them in detail. So It's a very similar logic to what happened before. Let me just Show you so Basically, so if we're not on the render window and we are on the menu buttons I want to loop through the menu button. So loop through the You know the these on the list here in on the yellow bar Then we'll say If we've clicked on that particular button So that's what this line says here No, and it's a button press. So if we click on that particular window, then we can Look at if the window just showing already So if the children are already showing so if show children we're going to unmap those windows and Turn off show children, which is just a variable. We had to keep track of whether or not the We use these green bars and full bars are actually showing So that we set to zero and if those are not showing We map them. So we do show them we filled them like before we draw them like before we add text before and just draw To the screen those those objects. So when you click on the purple or click on this blue Button the green bars will come and go based off whether or not they're there or not So that's this that's very simple just a little bit of you know verbosity there and then The second part here is a little bit interesting So this is actually how we're going to go through the sub buttons. So you can see it was actually like a double loop here so we're looping through the the children I and J So we're looping so you put on this blue one and these green buttons are now showing now we're looping through these and we're seeing you know Uh what they do so basically Uh, if they have a function value to be one, that means they're a body function We can just execute that. So that's what this line here says execute the function Corresponding to the button that you clicked if it's the body function if it's a view function That means if this value here is two Then we're evaluating this view function function with those two parameters here look from and look at which are both floats of length three and then we're this here is just a little bit of um Little bit just of defining you want to be equal to the previous value Equal to the new value not the previous value. So we can kind of just keep things going and let it update in real time So that's good. Um, this should work. So basically now at this point This new logic here it it renders These green and purple bars if you click the blue and salmon bars And it also means that if you have if you click on these green and purple bars These functions are executed the ones that we encoded already in you know in that data structure So this is honestly i'm i'm sure this is not going to work. So we're going to have to go back and uh and fix this I think but i'll i'll i'll humor myself and uh, we'll uh Try to compile that. No, of course not. So what did I do wrong? I'll bear it back. I'll figure this out Okay, uh a few things Just a few things actually one one really bad thing and then a couple small things. So oops Oops, that's not right. Where is it? It's here So yeah, this needs to be the address of this text item Then um In this line here, I forgot to define the menu button that was just calling this function with nothing That was making a whole whole Fuss Then also up here I Kept the the word float in in this which does not does not work. I mean, so you can't do that.  So yeah, no big deal. Um Let's see if it works now Okay, it's Doing something hold on. Let me see Okay, let's try again. Okay, so our render's now query works so Hold up So if I click query count nodes I get eight good count faces I got 12 good that that makes sense and then view I can view only two options. Why is that? Oh, I know why that is Uh, okay, hold on. Hold on. It's because I'm dumb. That's why This number should be seven. There we go. Copy and paste Actually hold on one more thing So let me show you what I changed. Um So this stupid thing here Swap buffers should be render window not the window because we changed the window that's rendering now It's the render window that's running up the not the full window now It's the orange frame not the red frame and also I like to change Uh this so the glx makes current so this is the current open gl context is now the render render window Not the regular window. Those two things made the rendering work And now I have to just comment out one thing debugging Where is it here and we're done Recompile Now it should all work. So query count nodes eight count faces 12 View here we go. I can view positive x positive y. Yep positive z negative x negative y negative z They're all the same except for negative z. You can see I screwed that one up and I coded up the Whatever and then isometric. So It's pretty nice, huh? And I kind of like how the the view menu stays open, you know, it's kind of cool how it just stays open Obviously, this is a problem, but uh, I kind of like how it stays open. So let's say you wanted to like Measure the area of a certain face.  So it would be a lot of work to keep going through. I kind of like how it stays open. That's kind of cool anyway, I Hope you enjoyed the video. I hope you learned something I just want to say one last thing this this video I looked for many many hours and days and even weeks trying to find a resource like this There is none there. There is none like I get all this information from this video just by reading the manual and it took me a very very long time so If you like this Then definitely like keep this link somewhere because this video is definitely a one of a kind resource that you're never going to find another one So anyway, thanks for watching