• Dieses Forum ist die maschinengenerierte Übersetzung von www.cad3d.it/forum1 - der italienischen Design-Community. Einige Begriffe sind nicht korrekt übersetzt.

Erstellen Sie polyhedrisches Netz aus einer Reihe von 3D-Punkten in C#

PlannerRoad

Guest
! durch die schnittstelle c#-code steht für die erstellung eines dienstprogramms zur verfügung, mit dem sie gleichzeitig ein polyedrales netz aus einem satz von 3d punkten erstellen können.

der code, gemeldet qui, ist folgende:
PHP:
mit autodesk.autocad.applicationservices;
mit autodesk.autocad.databaseservices;
mit autodesk.autocad.runtime;
mit autodesk.autocad.editorinput;
mit autodesk.autocad. Geometrie;
verbrauch des Systems;

volksklasse triangulat
{\chffff}
Veröffentlichungsdatum
doppel x1, doppel y1, doppel x2,
doppel y2, doppel x3, doppel y3,
ref double xc, ref double yc, ref double r)
{\chffff}
// berechnung der beschnittenen kreiskoordinaten
// Quadratischer Radius

const double eps = 1e-6;
const double big = 1e12;
bool result = true;
doppelt m1, m2, mx1, mx2, my1, my2, dx, dy;

wenn (math.abs(y1 - y2) < eps) && (math.abs(y2 - y3) < eps)
{\chffff}
ergebnis = falsch;
xc = x1; yc = y1; r = groß;
}
andere
{\chffff}
wenn (math.abs(y2 - y1) < eps)
{\chffff}
m2 = -(x3 - x2) / (y3 - y2);
mx2 = (x2 + x3) / 2;
my2 = (y2 + y3) / 2;
xc = (x2 + x1) / 2;
yc = m2 * (xc - mx2) + my2;
}
(math.abs(y3 - y2) < eps)
{\chffff}
m1 = -(x2 - x1) / (y2 - y1);
mx1 = (x1 + x2) / 2;
my1 = (y1 + y2) / 2;
xc = (x3 + x2) / 2;
yc = m1 * (xc - mx1) + my1;
}
andere
{\chffff}
m1 = -(x2 - x1) / (y2 - y1);
m2 = -(x3 - x2) / (y3 - y2);
wenn (math.abs(m1 - m2) < eps)
{\chffff}
ergebnis = falsch;
xc = x1;
yc = y1;
r = groß;
}
andere
{\chffff}
mx1 = (x1 + x2) / 2;
mx2 = (x2 + x3) / 2;
my1 = (y1 + y2) / 2;
my2 = (y2 + y3) / 2;
xc = (m1 * mx1 - m2 * mx2 + my2 - my1) / (m1 - m2)
yc = m1 * (xc - mx1) + my1;
}
}
}
dx = x2 - xc;
dy = y2 - yc;
r = dx * dx + dy * dy;
zurückgabeergebnis;
}

 [CommandMethod("TRIANG")]Nichtig triangulatecommand()
{\chffff}
const int maxpoints = 32767;

dokument doc =
anwendung.documentmanager.mdiactivedocument;
datenbank db = doc.database;
Editor ed = doc.editor;

Ich bin nicht mehr da.[] tvs = { new typedvalue(0, "point")};
auswahlfilter sf =
neue auswahlfilter(tvs);
promptselectionoptions pso = neue promptselectionoptions();
pso.messageforadding = "select points";
pso.allowduplicates = falsch;
ed.getselection(pso, sf);

wenn (psr.status == promptstatus.error) zurückkehrt;
wenn (psr.status == promptstatus.cancel) zurückkehrt;

auswahlset ss = psr.value;
int npts = ss.count;
wenn (npts < 3)
{\chffff}
ed.writemessage("mindestens 3 punkte müssen ausgewählt werden!");
zurück;
}
wenn (npts > maxpoints)
{\chffff}
ed.writemessage("maximale anzahl der punkte überschritten!");
zurück;
}

int i, j, k, ntri, ned, status1 = 0, status2 = 0;
bool status;

// punktkoordinaten

doppelzimmer[] ptx = neues doppel[maxpoints + 3];
wohnzimmer[] pty = neues doppel[maxpoints + 3];
wohnzimmer[] ptz = neues doppel[maxpoints + 3];

// dreiecksdefinitionen

in[] pt1 = neu[maxpoints * 2 + 1];
in[] pt2 = neu[maxpoints * 2 + 1];
in[] pt3 = neu[maxpoints * 2 + 1];

// beschnittener kreis

doppelzimmer[] cex = neues doppel[maxpoints * 2 + 1];
wohnzimmer[] cey = neues doppel[maxpoints * 2 + 1];
wohnzimmer[] rad = new double[maxpoints * 2 + 1];
doppelt xmin, ymin, xmax, ymax, dx, dy, xmid, ymid;
in[] ed1 = neu[maxpoints * 2 + 1];
in[] ed2 = neu[maxpoints * 2 + 1];

Gene[] idarray = ss.getobjectids();
transaktion tr =
db.transactionmanager.starttransaction();
(tr)
{\chffff}
dbpoint ent;
k = 0;
für (i = 0; i < npt; i++)
{\chffff}
=
(dbpoint)tr.getobject(idarray)[k], openmode.forread, gefaltet);
Pestizid[i] = ent.position[0];
p.[i] = ent.position[1];
ptz[i] = ent.position[2];
für (j = 0; m <; j+)
wenn[i] = ptx[j])[i] = pty[j])
{\chffff}
i--; npts-; status2++;
}
k++;
}
tr.commit();
}

wenn 0)
ed.writemessage(
"\nignored {0} mit gleichen koordinaten."
Status2
;

// supertriangle

xmin = ptx[0]xmax = xmin;
= pty[0]; ymax = ymin;
für (i = 0; i < npt; i++)
{\chffff}
wenn[i] < xmin) xmin = ptx[i];
wenn[i] > xmax) xmax = ptx[i];
wenn[i] < xmin) ymin = pty[i];
wenn[i] > xmin) ymax = pty[i];
}
dx = xmax - xmin; dy = ymax - ymin;
xmid = (xmin + xmax) / 2; ymid = (ymin + ymax) / 2;
i = npt;
pfx[i] = xmid - (90 * (dx + dy)) - 100;
p.[i] = ymid - (50 * (dx + dy)) - 100;
ptz[i] = 0;
     pt1[0] = i;
i++;
pfx[i] = xmid + (90 * (dx + dy)) + 100;
p.[i] = ymid - (50 * (dx + dy)) - 100;
ptz[i] = 0;
     pt2[0] = i;
i++;
pfx[i] = xmid;
p.[i] = ymid + 100 * (dx + dy + 1);
ptz[i] = 0;
     pt3[0] = i?
drei = 1;
(
pfx[pt1[0], pty[pt1[0], ptx[pt2[0],
p.[pt2[0], ptx[pt3[0], pty[pt3[0]Ihre E-Mails
ref cex[0], ref cey[0], ref rad[0];

// hauptschleife
für (i = 0; i < npt; i++)
{\chffff}
ned = 0;
xmin = ptx[i], ymin = pty[i];
j = 0;
(i < 3)
{\chffff}
dx = cex[j] - xmin; dy = cey[j] - ymin;
wenn (((dx * dx) + (dy * dy) < rad[j])
{\chffff}
ed1[ned] = pt1[j]ed2[ned] = pt2[j];
ned++;
ed1[ned] = pt2[j]ed2[ned] = pt3[j];
ned++;
ed1[ned] = pt3[j]ed2[ned] = pt1[j];
Ned++;
- Ja.
p[j] = pt1[ntri];
pt2[j] = pt2[ntri];
pt3[j] = pt3[ntri];
Cex[j] = cex[ntri];
Cey[j] = cey[ntri];
           rad[j] = rad[ntri];
...
♪ I'll be there ♪
j++;
♪ I'll be there ♪

für (j = 0; j < down - 1; j++)
für (k = j + 1; k < down; k++)
([j] = ed2[k]) und[j] = ed1[k])
{\chffff}
ed1[j] = -1; ed2[j] = -1; ed1[k] = -1; ed2[k] = -1;
♪ I'll be there ♪

für (j = 0; j < down; j++)
([j] >= 0) && (ed2[j] > = 0)
{\chffff}
p.1[ntri] = ed1[j], pt2[ntri] = ed2[j], pt3[ntri] = i;
Status =
...
pfx[pt1[ntri], pty[pt1[ntri], ptx[pt2[ntri],
p.[pt2[ntri], ptx[pt3[ntri], pty[pt3[ntri]Ihre E-Mails
ref cex[ntri], ref cey[ntri], ref rad[ntri];
wenn (!status)
{\chffff}
status1++;
}
ntri++;
}
}

// entfernung von äußeren dreiecken
i = 0;
während (i < ntri)
{\chffff}
wenn[i] > npt)[i] > npt)[i] >= npts)
{\chffff}
ntri - Ja.
p.1[i] = pt1[ntri];
pt2[i] = pt2[ntri];
pt3[i] = pt3[ntri];
Cex[i] = cex[ntri];
Cey[i] = cey[ntri];
         rad[i] = rad[ntri];
in
}
in++;
}

db.transaction Manager.starttransaction();
(tr)
<chffffff
blockierbar bt =
(blockierbar)tr.getobject(
db.blocktableid,
openmode.
Was ist los?
;
Blockercord btr =
(blocktablerecord)tr.getobject(
b)[BlockTableRecord.ModelSpace],
openmode. für schreiben,
Was ist los?
;

polyfacemesh pfm = new polyfacemesh();
btr.appendentity(pfm);
tr.addnewcreateddbobject(pfm, true);
für (i = 0; i < npt; i++)
{\chffff}
Polyfacemeshvertex vert =
neue polyfacemeshvertex(
punkt3d(ptx)[i], pty[i], pt[i])
;
pfm.appendvertex(vert);
tr.addnewcreateddbobject(vert, true);
}
für (i = 0; i < ntri; i++)
{\chffff}
facerecord face =
neue facerecord
(kurz)(pt1[i] + 1,
(beifall)[i] + 1,
(beifall)[i] + 1),
0)
;
pfm.appendfacerecord(face);
tr.addnewlycreateddbobject(face, true);
}
tr.commit();
}
wenn 0)
ed.writemessage(
"Nwarning! {0}Dreiecke gefunden! +
" falsches ergebnis möglich!"
Status1
;
anwendung.updatescreen();
}
}
der befehl des dienstprogramms ist Zuhause.wie man den code ausfüllt: in dieser aussprache visuell c#: füllen sie den code für autocad ich erklärte das verfahren und gab die software zur erstellung von c# an.

nach dem hochladen des dienstprogramms mit dem netload-befehl, geben sie den triang-befehl können sie eine menge von 3d punkten auswählen und, von der triangulation dieser, erhalten sie das polyhedra-netz.

ich hänge den code an, den ich kompiliert habe.
 

Anhänge

Statistik des Forums

Themen
58.521
Beiträge
499.056
Mitglieder
104.110
Neuestes Mitglied
ChristianR

Zurzeit aktive Besucher

Keine Mitglieder online.
Zurück
Oben