Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  MegaCAD
  Koordinate des eingefügten Makros

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
André Kohut ist neuer Geschäftsführer bei MegaCAD
Autor(20117) Thema:  Koordinate des eingefügten Makros (847 mal gelesen)
Niko
Mitglied
EDV-Berater

Sehen Sie sich das Profil von Niko an!   Senden Sie eine Private Message an Niko  Schreiben Sie einen Gästebucheintrag für Niko

Beiträge: 9
Registriert: 12.04.2001

erstellt am: 12. Apr. 2001 08:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hy,
wenn in einer CIP Routine ein Makro mittels InsertMacro
(mit pmac.flags = FM_ONLY1) vom Anwender eingefügt wird, würde ich gerne die Koordinate des Einfügepunktes bekommen.
Die Koordinaten, die man in pmac.dpx setzen kann (FM_TAKE_DPT) werden jedoch scheinbar nicht aktualisiert.

Wie komme ich an die Koordinaten des letzten eingefügten Makros heran?

Gruß
Klaus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Knoop
Mitglied
Dipl.-Ing. masch.


Sehen Sie sich das Profil von Knoop an!   Senden Sie eine Private Message an Knoop  Schreiben Sie einen Gästebucheintrag für Knoop

Beiträge: 409
Registriert: 09.10.2000

erstellt am: 12. Apr. 2001 10:09    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Niko 10 Unities + Antwort hilfreich

Hallo,

es ist nicht nur scheinbar so...es ist so. Der Einfügepunkt wird nicht nachträglich in die pmac-Struktur eingeräumt.

Man holt sich in solchem Fall zuvor mit GetPnt(...)oder GetPntInv(...) den Einfügepunkt und räumt Ihn dann ein.

Alternativ könnte man sich die Id des Macroheaders über die Callback-Funktion ermitteln. Anschließend kann man mit GetMacroPos(...)die Macroposition ermitteln. Diese Methode würde ich persönlich wohl bevorzugen.

Also...es gibt für alles eine Lösung :-)

Diese Information gilt natürlich nur für den aktuellen Stand MegaCAD 6/16. Auch hier sei noch einmal der Hinweis erlaubt, das bei solchen Fragen es im Zweifelsfall sinnvoll ist, wenn man die MegaCAD - Version und Revision bei der Fragestellung mit erwähnt. Die C- Schnittstelle wird nämlich ständig erweitert.


Mit freundlichen Grüßen


Bernd Knoop
- Megatech Software GmbH -
- Niederlassung Nord -

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Niko
Mitglied
EDV-Berater

Sehen Sie sich das Profil von Niko an!   Senden Sie eine Private Message an Niko  Schreiben Sie einen Gästebucheintrag für Niko

Beiträge: 9
Registriert: 12.04.2001

erstellt am: 12. Apr. 2001 10:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Danke!

Bezüglich der MegaCAD Versionen versuche ich mich zu bessern.

Gruß
Klaus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Niko
Mitglied
EDV-Berater

Sehen Sie sich das Profil von Niko an!   Senden Sie eine Private Message an Niko  Schreiben Sie einen Gästebucheintrag für Niko

Beiträge: 9
Registriert: 12.04.2001

erstellt am: 12. Apr. 2001 11:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Herr Knoop,

ich versuche mich gerade an der neuen Funktion GetMacroPos und versuche die ID des Makros zu bestimmen. Dazu lasse ich mir in der Callbackfunktion von InsertMacro die ElementIDs ausgeben. Beim Typ E_MACRO (16) wollte ich mir dann die id merken und an GetMacroPos weitergeben. Es sieht aber so aus, als ob alle ID 0 sind.
Was mache ich falsch ?
Ach so: Ich arbeite auf NT4.0 SP5 mit MegaCAD 6.01 Rev 20,01,01,23

Hier zur Sicherheit mal das Testprogramm:


#include "std.h"
#include "megatyp.h"
#include "megacad.h"

typedef struct _data
{
t_entity ent;
ushort newid;
}t_mac;

t_point pnt;
ulong nMakID;

void Dlg(char *txt) { Message("Info",txt,NULL,NULL,"OK",3); return;}

short FileExists(char *cFile)
{ short fh;
fh = ML_Open(cFile,ML_READ | ML_PLUS | ML_TEXT);
if (fh == 0){ return(FALSE);}
ML_Close (fh);
return(TRUE);
}

short InsMac( void *arg){
struct _data *pdata;

char cMsg[255];
pdata = arg;

// if (pmacro->ent.attr.lay == 11) {
nMakID = pdata->ent.id;
sprintf(cMsg, "%d, %d, %d, %d",pdata->ent.id, pdata->ent.attr.lay, pdata->ent.attr.grp, pdata->ent.type);
Dlg(cMsg);
// }

return(CONTINUE_LOOP | CALL_SAVECOUNT);
}

short MegaMain(
char *filename,
char *args )
{
int i;
char cMakro[255], cMsg[255];
t_mac mac, macBuf;
t_placemac pmac;
t_attribs attr;
t_macinfo macinfo;
t_mat44 ecs =
{
1.0, 0.0, 0.0, 0.0,
0.0, 1.0, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0
};
sprintf(cMakro, "mac\\Test.mac");
if ( FileExists(cMakro) == TRUE ){
pmac.fac = 1;
pmac.flags = FM_ONLY1;
InsertMacro(cMakro,
InsMac,
&mac,
macBuf,
&ecs,
sizeof(macBuf),
&pmac);
GetMacroPos(nMakID, &ecs, &pnt, &pmac);
sprintf(cMsg, "%ld, %12.3f %12.3f",nMakID, pnt.x, pnt.y);
Dlg(cMsg);
} else {
Dlg("Makro nich da.");
} ;
savecount();
return(0);
}

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Niko
Mitglied
EDV-Berater

Sehen Sie sich das Profil von Niko an!   Senden Sie eine Private Message an Niko  Schreiben Sie einen Gästebucheintrag für Niko

Beiträge: 9
Registriert: 12.04.2001

erstellt am: 17. Apr. 2001 12:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,

mir ist eine andere Möglichkeit eingefallen, möglichst schnell an den Einfügepunkt des letzten Makros zu kommen. Da der Inkrementalpunkt immer mitgeführt wird, brauchte man nur dessen Koordinaten abzufragen. Ich habe jedoch nur SetIncPnt(3D) gefunden, um ihn zu setzen. Wie kann man ihn auslesen?

Gruß Klaus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Knoop
Mitglied
Dipl.-Ing. masch.


Sehen Sie sich das Profil von Knoop an!   Senden Sie eine Private Message an Knoop  Schreiben Sie einen Gästebucheintrag für Knoop

Beiträge: 409
Registriert: 09.10.2000

erstellt am: 17. Apr. 2001 17:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Niko 10 Unities + Antwort hilfreich

Hallo,

sorry, ich hatte mich nicht eindeutig ausgedrückt. Es war nicht die Callback-Funktion von InsertMacro gemeint. Da steht ja in der Dokumentation folgendes:

"Bevor das Macro an die Maus gehängt wird, ruft MegaCAD für jedes Makro-Element die Callback-Funktion auf. Diese hat die Möglichkeit das Element zu verändern."

Da die Callback-Fkt. von InsertMacro vor dem an die "Maushängen" aufgerufen wird, kann diese Funktion natürlich keine Element-ID zurückgeben, da man ja auch noch garnicht weiss, ob der Anwender tatsächlich das Macro plazieren wird. Der Anwender kann sich ja zu jedem Zeitpunkt eine Betätigung der rechten Maus einfallen lassen und dann wäre kein Element plaziert wurden. :-)

Gemeint hatte ich, leider nicht geschrieben, das man eine Schleife mit MacroLoop(...) durchführt, nachdem man das Macro plaziert hat.
In der zugehörigen Callback-Fkt. merkt man sich dann immer ent->id von E_Macro. Das zu letzt gefundene E_Macro sollte dann das zuletzt eingefügte Macro sein. (Wenn man eine DLL verwenden würde, könnte man diese mit LoadDll starten und sich die zuletzt gefunden ID global merken. Das würde die Suchzeit optimieren, da man nicht jedesmal komplett alle Macros durchlaufen müsste, ...der 3. Parameter von Macloop gibt ja die erste zu duchsuchende Element-Id an.)

Die Idee mit dem Inkrementalpunkt ist zwar nicht schlecht, aber mir ist keine Funktion bekannt, um die aktuelle Lage zu ermitteln.

Viele Grüße

Bernd Knoop

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Niko
Mitglied
EDV-Berater

Sehen Sie sich das Profil von Niko an!   Senden Sie eine Private Message an Niko  Schreiben Sie einen Gästebucheintrag für Niko

Beiträge: 9
Registriert: 12.04.2001

erstellt am: 18. Apr. 2001 11:44    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


5SetMak.zip

 
Hallo Herr Knoop,

Mit der Funktion MacroLoop funktioniert es.
Die Funktion GetMacroPos scheint mir aber etwas (oder mich) durcheinander zu bringen.
Nach dem Aufruf von GetMacroPos ist die MakroID (nMakID) wieder 0.
Ausserdem habe ich nach dem Einfügen des Makros versucht einen Kreis um den Einfügepunkt zu erzeugen. Der wird aber laut ElementInfo zur Ellipse und der Y - Wert wird auf den X Wert gesetzt.
(Beispiel CIP als Anhang)

Fragen:
1) Muß der Faktor beim Einfügen eines Makros auch für yFac und zFac gesetzt werden, oder reicht es wie im Testprogramm (pmac.fac)?
2) Muß der Faktor/Einfügepunkt mit grid.UnitFactor multipliziert werden? Ich habe es mit und ohne ausprobiert. In meiner Test.PRT habe ich Einheit m und Maßstab 1 eingestellt. Mit grid.UnitFactor stimmt der Einfügepunkt des Makros. Aber nicht mehr nach GetMacroPos (siehe Kreis). Ohne grid.UnitFactor stimmt der Einfügepunkt des Makros nicht mehr.

(Win NT40 SP5 MC 6.01 Rev 20,01,01,23)
Gruß
Klaus Kuhl

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Knoop
Mitglied
Dipl.-Ing. masch.


Sehen Sie sich das Profil von Knoop an!   Senden Sie eine Private Message an Knoop  Schreiben Sie einen Gästebucheintrag für Knoop

Beiträge: 409
Registriert: 09.10.2000

erstellt am: 20. Apr. 2001 00:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Niko 10 Unities + Antwort hilfreich

Hallo Herr Kuhl!


mir scheint der Fehler hier zu liegen:

GetMacroPos(nMacID, &ecs.mat[0], &pnt.x, &test[0]);
...
CreateEntity(E_CIRCLE, NULL, &cir , NULL,&ecs)

GetMacroPos gibt nur 3 Doublewerte zurück (xfac, yfac, phi) Es wird nicht die komplette pmac-Struktur zurückgegeben! Das aber nur am Rande,das war nicht der Fehler. Wenn meine Vermutung richtig liegt,es ist grade 0:30,ob ich noch klar denke weiss ich nicht , dann kommt es bei der Elementerzeugung bei Ihnen zur Überlagerung des Einfügepunktes und der t_mat44 - Struktur (ecs), die ja auch eine Verschiebung zu läßt und bei 3D-plazierte Macros Verwendung finden sollte. Wenn man nun also folgende Elementerzeugung verwendet,dann ist mir so,als ob alles klappt....(dann werden auch Kreise nicht mehr zu Ellipsen).

...
CreateEntity(E_CIRCLE, NULL, &cir , NULL,NULL)
...

Hintergrund:
In t_matt44 wird auch der Einfügepunkt und der Skalierungsfaktor berücksichtigt..es ist also Vorsicht angesagt und beim Erzeugen von zusätzlichen Elementen sollte man die Transformationsmatrix mit bekannten Werten füllen. Dann weiss man was passiert...


Viele Grüße

Bernd Knoop


** Das war jarichtig Denksport zu später Stunde **

[Diese Nachricht wurde von Knoop am 20. April 2001 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Niko
Mitglied
EDV-Berater

Sehen Sie sich das Profil von Niko an!   Senden Sie eine Private Message an Niko  Schreiben Sie einen Gästebucheintrag für Niko

Beiträge: 9
Registriert: 12.04.2001

erstellt am: 21. Apr. 2001 21:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Herr Knoop,

ja, Abendstund hat Gold im Mund.
Damit funktionierts!
Ich habe angenommen "test" ist "double test[3];".

Vielen Dank
und bis bald ;-)

Gruß Klaus Kuhl

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Knoop
Mitglied
Dipl.-Ing. masch.


Sehen Sie sich das Profil von Knoop an!   Senden Sie eine Private Message an Knoop  Schreiben Sie einen Gästebucheintrag für Knoop

Beiträge: 409
Registriert: 09.10.2000

erstellt am: 23. Apr. 2001 10:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Niko 10 Unities + Antwort hilfreich

Hallo Herr Kuhl,

die Annahme war korrekt

mfg
Bernd Knoop

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz