Näytä kirjoitukset

Tässä osiossa voit tarkastella kaikkia tämän jäsenen viestejä. Huomaa, että näet viestit vain niiltä alueilta, joihin sinulla on pääsy.


Viestit - kamara

Sivuja: [1] 2 3 ... 148
1
Ok, taitaa olla oikeaoppista käyttää Taulukkoa, ja sen avulla hallita kappaleen muotoja.

Olen kuitenkin vielä varsin nyyppä FreeCAD:n käyttäjänä. Eikä minulla ole juuri muutakaan kokemusta 3D-cad:stä. Mitä nyt joskus kokeillut ketsuppia käyttää, mutta sen ominaisuudet eivät ole minun käyttööni riittävät.

Ilmeisesti oikeaoppisesti käyttäminen olisi, että aluksi tekisi kappaleen runko-osalle, ja sen jälkeen kopioisi kappaleen, ja taulukon avulla huolehtisi muutoksista, jotka koskettavat molempia runko-osia.

Lisäongelmana oli myös FreeCAD:n tapa viedä malli stl-formaattiin. Jos jättää merkkaamatta mallia, niin malli ei tule stl-tiedostoon. Jos taas merkkaa kaikki kappaleet Ctrl+A:lla, niin keskelle tulee aika ikävän näköinen sätös, jossa  on kaikkien sketsien ja pad:ien jätökset yhtenä sekasotkuna.

Ilmeisesti oikeaoppisesti pitää luoda kaksi kappaletta, ja varmuuden vuoksi molempien kappaleiden sijainniksi kannattaa laittaa muu kuin origo, jotta huomaa, jos vienti-toiminnossa on liikaa tavaraa viedyssä mallissa.

Pidän ratkaisua purkkaratkaisuna, kun ei ilmeisestikään FreeCAD:ssä ole haluamaani toimintoa.

OpenSCAD:n lähestymistapa on kuitenkin aivan erilainen, joten ratkaisustakin on erilainen.

Tosin FreeCAD sisältää OpenSCAD:n toiminnallisuuden, mutta sitä ei ole aivan täydellisen sulavasti kytketty.

2
Multimedia ja grafiikka / Vs: Kysymys FreeCAD:stä ...
« : 11.04.24 - klo:10.04 »
Tästä on muistaakseni parempikin video, mutta hiukan tähän tyyliin tarkoitan. Käytät vain kummankin osan mitoitukseen samaa muuttujaa (alias taisi olla videolla)
https://www.youtube.com/watch?v=Jze6ftGc6BQ

Kiitos, olen toki ollut tietoinen kyseisestä ominaisuudesta, mutta en haluaisi tehdä sen avulla, sillä siitä tulee vähän purkkamainen ratkaisu. Tosin kyllä sen sillä saa todennäköisesti tehdyksi. En tosin ole aiemmin nähnyt tutoriaalia, jossa opetetaan tämän käyttöä, siksi se on varsin tervetullot videon pätkä.

Toivottavasti vähänkään vastaa ajatustasi.

Kiitos nyt kuitenkin.

3
Multimedia ja grafiikka / Vs: Kysymys FreeCAD:stä ...
« : 10.04.24 - klo:10.34 »
Yleensä tehdään vaikka se perusrunko tallennetaan, kopioidaan/tuodaan tiedosto uudelleen (export/import) ja tehdään muutokset ja tallennetaan uusi "body/osa".

Kyllähän sen voi niinkin värkätä, mutta tavoitteenani olisi, että tämän jälkeen voisi muuttaa alkuperäistä body-osaa s.e. body-osaan tehdyt muutokset tulisivat myös niistä kopioituihin kappaleisiin.

OpenSCAD:llä se on mahdollista s..e. tekee rungosta modulin, ja tämän jälkeen kutsuu modulia, ja tekee kutsun moduliin esim. boolean toimintoja.

Esim.
Koodia: [Valitse]
module connector() {
...
}

difference() {
    connector();
    translate([-10,5,10]) cube([2,10,3],center=true);
    translate([10,-5,10]) cube([2,10,3],center=true);
}
translate ([200,0,0]) union()
{
    connector();
    translate([-4,0,-10]) cube([2,10,20],center=true);
    translate([-4,0,10]) cube([2,10,20],center=true);
}

Tämä ei varmaan tee mitään järkevää, mutta ajatus on siinä, että yhdessä osassa tehdään connector()-body-osalle lovet, ja toisessa osassa lisätään samaan connector()-body-osalle pari kuutiota.

Nyt, jos muokkaan connector()-modulia, niin muokkaukset menevät sekä lovet sisältävälle body-osalle että sille kappaleelle, jossa on kaksi kuutiota.

FreeCAD:ssä kloonaus-työkalulla voi kloonata kertaalleen kyseisen connector-body-osan, ja kun teen muutokset kloonatulle kappaleelle, niin muutokset jäävät kloonatulle kappaleelle. Se on se mitä haen, mutta haluaisin saman ominaisuuden kahteen kertaan.

Eli s.e. onnistuisin kloonaamaan myös toiseen kertaan connector-body-osan s.e. kun muokkaan alkuperäistä kloonin lähdettä, niin muutokset menisivät molemmille klooneille, ja halutessani muokata vain jompaa kumpaa kloonia, niin muutokset tulisi vain kyseiselle kloonille.

4
Kuinka FreeCAD:ssä pystyy käyttämään kappaletta templatena s.e. runko pysyy 2:ssa kappaleessa samana, mutta toiseen kappaleeseen tulee kolot ja toiseen väkäset, jotka tarttuvat koloon kiinni ?

Kloonaamalla pystyy tekemään yhdelle muutokset, mutta kahta kloonia samasta rungosta en osaa tehdä ilman, että malli hajoaa.

Kuva kertoneen mitä yritän tehdä...

Kyseinen on tehty OpenSCAD:llä, ja haluaisin oppia tekemään saman asian FreeCAD:llä.

5
Jos näät kuvan, niin silloin sen kopioiminen on mahdollista, jos ei muuten, niin ottamalla nätöstä kuvan.


6
Onko mahdollista asentaa numpy-versio virtuaalikoneeseen ?

Silloin ei ole merkitystä pääkoneella, mitä viritelmiä on virtuaalikoneessa.

7
Menee vähän turhan monimutkaiseksi jos pitää alkaa konetta purkamaan  sen takia.
5 minuutin homma. Ei ole vaikeaa.

Mä en ole ihan noin kätevä...
... minulta menee puolesta tunnista tuntiin tai jopa kauemminkin. Lisäksi itseltäni jää tekemättä, jos konetta ei ole tehty päivitettäväksi. (Esim. uudemmat Omenat.)

8
Ohjelman pitäisi toimia suoraan Ubuntu-varianteissa. Tarjolla on ainakin toistaiseksi pelkkä binääri.

Edit - Jos jolakin saa ohjelman coredump:paamaan, niin otan bugeja vastaan tässä säikeessä. Toki muitakin bugeja saa esittää.

9
No, niin kiitokset nm:lle avusta.

Sain ensimmäisen yksinkertaisin version tehdyksi.

Vahvasti suosittelen käytettäväksi virtuaalikonetta tämän testaamiseen, kun tämä on tällainen varhaisbeta.

Kovin nopea tämä ei kuitenkaan ole, mutta kätevä on kuitenkin omasta mielestäni. Ohjelman saa hakemaan rekursiivisesti pakatuista tiedostoista. Elikkä jos on pakattu kahteen kertaan, niin ohjelma saattaa löytää merkkijonon sen sisältä. Kätevin ominaisuus tulee haettaessa libreoffice-tiedostoja, koska ne ovat pakattuja tiedostoja, niiden sisältä hakeminen pelkällä grep:llä on vaikeaa.

Jos ohjelma löytää pakatun paketin sisältä hakuehdon täyttävän merkkijonon, niin se palauttaa isäntä-tiedoston nimen.


10
Jos tarvitset nimenomaan hakemiston, käyttämäsi C-funktio mkdtemp on siihen suoraviivaisin ratkaisu ainakin Linux/Unix-ympäristössä.

Jep, tarvitsen nimen omaan väliaikais-hakemiston. Toki läjällä tiedostoja voisi saman ongelman ratkaista, mutta se ei olisi niin siisti kuin hakemiston käyttäminen, eikä se olisi myöskään niin helppo ohjelmoida.

12
Löytyi ratkaisu !

Kiitos avusta...

Koodia: [Valitse]
#include <stdlib.h>
#include <iostream>
#include <cstring>
int main(int argc,char **argv) {
    char *tmppi=(char *)malloc(500);
    char *tmpPath;
    strcpy(tmppi,"OmatemppiXXXXXX");
    std::cerr << tmppi << "\n";
    tmpPath=mkdtemp(tmppi);
    if(tmpPath==NULL) {
        std::cerr << "tmpPath=NULL\n";
    } else {
        std::cerr << "tmpPath=" << tmpPath << "\n\n";
    }
}

Elikkäs tarvitaan tiedostonnimiin XXX:iä loppuun, jotka temppigeneraattori muuttaa yksilölliseksi hakemistoksi.

13
Olen yrittänyt käyttää seuraavaa käskyä, mutta se ei luo temppi-kansiota. :'(

Koodia: [Valitse]
#include <stdlib.h>
#include <iostream>
#include <cstring>
int main(int argc,char **argv) {
    char *tmppi=(char *)malloc(500);
    char *tmpPath;
    strcpy(tmppi,"/tmp");
    tmpPath=mkdtemp(tmppi);
    if(tmpPath==NULL) {
        std::cerr << "tmpPath=NULL\n";
    } else {
        std::cerr << "tmpPath=" << tmpPath << "\n\n";
    }
}

Tämä palauttaa erroriin NULL:n, kun haluaisin luoda väliaikaishakemiston.

14
Tässä tärkein diffi, joka ei tosin ole kaikkien diffien äiti...
Koodia: [Valitse]
--- ../../Lataukset/pakkausOhjelmanSorsat/libarchive-3.7.2/unzip/bsdunzip.c 2024-02-15 17:35:04.877180993 +0200
+++ bsdunzip.cpp 2024-02-16 08:27:51.112305013 +0200
@@ -3,6 +3,7 @@
  *
  * Copyright (c) 2009, 2010 Joerg Sonnenberger <joerg@NetBSD.org>
  * Copyright (c) 2007-2008 Dag-Erling Smørgrav
+ * Copyright (c) 2024 Kamara
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -29,15 +30,20 @@
  *
  * $FreeBSD$
  *
+ * Kääntyy ...
+ * g++ "-DBSDUNZIP_VERSION_STRING=\"Kamaran beta versio\"" -DHAVE_FNMATCH_H -DHAVE_UNISTD_H -DHAVE_FNMATCH -DHAVE_STDLIB_H -DHAVE_STDARG_H -DHAVE_STRING_H -Wno-deprecated-declarations -o unzip/bsdunzip unzip/bsdunzip.h unzip/bsdunzip.cpp unzip/err.h unzip/err.cpp unzip/lafe_platform.h unzip/passphrase.h unzip/passphrase.cpp unzip/cmdline.cpp -larchive -lz
+ *
+ *
+ *
  * This file would be much shorter if we didn't care about command-line
  * compatibility with Info-ZIP's UnZip, which requires us to duplicate
  * parts of libarchive in order to gain more detailed control of its
  * behaviour for the purpose of implementing the -n, -o, -L and -a
  * options.
  */
-
+#include <iostream>
 #include "bsdunzip_platform.h"
-
+#include "passphrase.h"
 #ifdef HAVE_SYS_QUEUE_H
 #include <sys/queue.h>
 #else
@@ -78,11 +84,12 @@
 #include <sys/time.h>
 #endif
 #endif
-
+#include <fcntl.h>
 #include "bsdunzip.h"
 #include "passphrase.h"
 #include "err.h"
-
+//#include "cmdline.cpp"
+//#include <fnmatch.h>
 // Oma lisäys arvonta
 //extern "C" void lafe_setprogname(char const*,char const*);
 // Oma lisäys arvonta loppuu...
@@ -121,7 +128,6 @@ static int tty;
 static int unzip_exclude_mode = 0;
 
 int bsdunzip_optind;
-
 /* convenience macro */
 /* XXX should differentiate between ARCHIVE_{WARN,FAIL,RETRY} */
 #define ac(call) \
@@ -158,6 +164,8 @@ error(const char *fmt, ...)
  exit(EXIT_FAILURE);
 }
 
+
+
 /* fatal error message, no errno */
 static void
 errorx(const char *fmt, ...)
@@ -212,7 +220,6 @@ static void
 info(const char *fmt, ...)
 {
  va_list ap;
-
  if (q_opt && !unzip_debug)
  return;
  va_start(ap, fmt);
@@ -225,7 +232,6 @@ info(const char *fmt, ...)
  else
  noeol = fmt[strlen(fmt) - 1] != '\n';
 }
-
 /* debug message (if unzip_debug) */
 static void
 debug(const char *fmt, ...)
@@ -244,7 +250,6 @@ debug(const char *fmt, ...)
  else
  noeol = fmt[strlen(fmt) - 1] != '\n';
 }
-
 /* duplicate a path name, possibly converting to lower case */
 static char *
 pathdup(const char *path)
@@ -852,6 +857,8 @@ extract(struct archive *a, struct archiv
  free(pathname);
 }
 
+// Rivi 854  20240216
+
 static void
 extract_stdout(struct archive *a, struct archive_entry *e)
 {
@@ -894,7 +901,6 @@ extract_stdout(struct archive *a, struct
 
  free(pathname);
 }
-
 /*
  * Print the name of an entry to stdout.
  */
@@ -960,7 +966,6 @@ test(struct archive *a, struct archive_e
 
  return error_count;
 }
-
 /*
  * Callback function for reading passphrase.
  * Originally from cpio.c and passphrase.c, libarchive.
@@ -991,6 +996,7 @@ passphrase_callback(struct archive *a, v
  return p;
 }
 
+
 /*
  * Main loop: open the zipfile, iterate over its contents and decide what
  * to do with each entry.
@@ -1107,6 +1113,7 @@ version(void)
         exit(0);
 }
 
+
 static int
 getopts(int argc, char *argv[])
 {
@@ -1205,6 +1212,9 @@ getopts(int argc, char *argv[])
  return (bsdunzip_optind);
 }
 
+
+/* command-line options */
+
 int
 main(int argc, char *argv[])
 {
@@ -1212,7 +1222,7 @@ main(int argc, char *argv[])
  int nopts;
 
  lafe_setprogname(*argv, "bsdunzip");
-
+ std::cout << "C++ toimii myös!!!\n";
  if (isatty(STDOUT_FILENO))
  tty = 1;
 
@@ -1283,5 +1293,5 @@ main(int argc, char *argv[])
 
  unzip(zipfile);
 
- exit(EXIT_SUCCESS);
+ exit(0);
 }


15
JES sainhan sen unzip:nkin toimimaan g++:lla !!!

Kiitoksia paljon nm.

Ratkaisu ei ollut kovinkaan kaunis, mutta kuitenkin itselleni on pääasia, että yleensäkin kääntyy G++:lla.

Käännös käsky:
Koodia: [Valitse]
g++ "-DBSDUNZIP_VERSION_STRING=\"Kamaran beta versio\"" -DHAVE_FNMATCH_H -DHAVE_UNISTD_H -DHAVE_FNMATCH -DHAVE_STDLIB_H -DHAVE_STDARG_H -DHAVE_STRING_H -Wno-deprecated-declarations -o unzip/bsdunzip unzip/bsdunzip.h unzip/bsdunzip.cpp unzip/err.h unzip/err.cpp unzip/lafe_platform.h unzip/passphrase.h unzip/passphrase.cpp unzip/cmdline.cpp -larchive -lz

16
JES SEHÄN TOIMII...

hello.cpp
Koodia: [Valitse]
/*
 * This file is in the public domain.
 *
 * Feel free to use it as you wish.
 */

/*
 * This example program reads an archive from stdin (which can be in
 * any format recognized by libarchive) and writes certain entries to
 * an uncompressed ustar archive on stdout.  This is a template for
 * many kinds of archive manipulation: converting formats, resetting
 * ownership, inserting entries, removing entries, etc.
 *
 *
 * sudo apt install libbz2-dev
 * To compile:
 * gcc -Wall -o tarfilter tarfilter.c -larchive -lz -lbz2
 */

#include <archive.h>
#include <archive_entry.h>
#include <iostream>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>

static void
die(const char *fmt)
{
fprintf(stderr, "%s\n",fmt);
exit(1);
}


int
main(int argc, char **argv)
{
char buff[8192];
ssize_t len;
int r;
mode_t m;
struct archive *ina;
struct archive *outa;
struct archive_entry *entry;




ina=NULL;
/*if(ina==NULL) {
std::cout << "ina=NULL\n";
}*/

/* Read an archive from stdin, with automatic format detection. */
ina = archive_read_new();
if (ina == NULL)
die("Couldn't create archive reader.");
if (archive_read_support_filter_all(ina) != ARCHIVE_OK)
die("Couldn't enable decompression");
if (archive_read_support_format_all(ina) != ARCHIVE_OK)
die("Couldn't enable read formats");
if (archive_read_open_fd(ina, 0, 10240) != ARCHIVE_OK)
die("Couldn't open input archive");

/* Write an uncompressed ustar archive to stdout. */
outa = archive_write_new();
if (outa == NULL)
die("Couldn't create archive writer.");
if (archive_write_set_compression_none(outa) != ARCHIVE_OK)
die("Couldn't enable compression");
if (archive_write_set_format_ustar(outa) != ARCHIVE_OK)
die("Couldn't set output format");
if (archive_write_open_fd(outa, 1) != ARCHIVE_OK)
die("Couldn't open output archive");


/* Examine each entry in the input archive. */
while ((r = archive_read_next_header(ina, &entry)) == ARCHIVE_OK) {
fprintf(stderr, "%s: ", archive_entry_pathname(entry));

/* Skip anything that isn't a regular file. */
if (!S_ISREG(archive_entry_mode(entry))) {
fprintf(stderr, "skipped\n");
continue;
}

/* Make everything owned by root/wheel. */
archive_entry_set_uid(entry, 0);
archive_entry_set_uname(entry, "root");
archive_entry_set_gid(entry, 0);
archive_entry_set_gname(entry, "wheel");

/* Make everything permission 0744, strip SUID, etc. */
m = archive_entry_mode(entry);
archive_entry_set_mode(entry, (m & ~07777) | 0744);

/* Copy input entries to output archive. */
if (archive_write_header(outa, entry) != ARCHIVE_OK)
die("Error writing output archive");
if (archive_entry_size(entry) > 0) {
len = archive_read_data(ina, buff, sizeof(buff));
while (len > 0) {
if (archive_write_data(outa, buff, len) != len)
die("Error writing output archive");
len = archive_read_data(ina, buff, sizeof(buff));
}
if (len < 0)
die("Error reading input archive");
}
fprintf(stderr, "copied\n");
}


if (r != ARCHIVE_EOF)
die("Error reading archive");
/* Close the archives.  */
if (archive_read_free(ina) != ARCHIVE_OK)
die("Error closing input archive");
if (archive_write_free(outa) != ARCHIVE_OK)
die("Error closing output archive");


return (0);
}

Koodia: [Valitse]
g++ -Wno-deprecated-declarations -o hello hello.cpp -larchive -lz -lbz2

Vielä pitää tehdä unzip:n purun jälkeinen käsittely.

Edit - Tämäkin toiminallisuus nippa nappa riittää, mutta yritetään parantaa...

17
Siis itselleni riittäisi, että pystyisin käyttämään g++:lla archive-kirjastoa kirjastona, mutta en osaa sitäkään.  :'(

Tee mahdollisimman yksinkertainen koeohjelma ja laita se tänne näytille, niin voidaan pohtia ja iteroida, miten se käännetään libarchivea vasten.

Kiitos ajatuksesta. Yleensä minä olen niin tehnytkin, mutta tällä kertaa yritin haukata liian suurta palaa kerralla, ja onnistuin kirjaston käytössä ainakin yhdessä esimerkissä.

... tosin laitoin kääntäjän asetukset aika rumasti päälle, jottei kääntäjä huutele liikoja.

18
Siis itselleni riittäisi, että pystyisin käyttämään g++:lla archive-kirjastoa kirjastona, mutta en osaa sitäkään.  :'(


Molemmissa tapauksissa on ongelmana, etten osaa liittää xml2-kirjastoa g++:lle.

19
Jaahas ...
... eipäs taitoni oikein riitä. :'(

Kyllä saan paketin ladattua, ja käännettyä C:llä, mutta en osaa tehdä vastaavaa temppua C++:lla !

Olen tässä yrittänyt muutaman kerran, mutta ei vain taidot riitä...
Latasin koodin ja ajoin käskyllä:
Koodia: [Valitse]
../libarchive-3.7.2/configure

Ja sen jälkeen ...
Koodia: [Valitse]
make
Niin ohjelma toimii, muutokset muuttavat ohjelman toimintaa.


Mutta yrittäessäni kääntää sitä g++:lla, niin menee metsään...
Koodia: [Valitse]
mkdir ../g++
cd ../g++
../libarchive-3.7.2/configure CC=g++

Koodia: [Valitse]
$ ../libarchive-3.7.2/configure CC=g++

Koodia: [Valitse]
<config.log grep error >error.log

Siis xml2-kirjasto uupuu, mutta mistä sen saa, ja miksi gpp-löytää sen, muttei g++ ?


20
Ubuntu tietokoneissa / Vs: Bluefishin Find tökkii
« : 12.02.24 - klo:09.36 »
Ehkä ennen tekijöihin yhteydenottoa, kannattaa asentaa kyseisestä ohjelmasta tuorein versio, joka näyttäisi olevan 2.2.14.

En tosin suoralta kädeltä osaa neuvoa, kuinka se tapahtuu.

Edit - Näyttäisi löytyvän flatpak:kina, mikäli puhumme samasta softasta.

Sivuja: [1] 2 3 ... 148