Das Frontend erstellt und ändert CAD-Grafikdetails über JavaScript

Das Frontend erstellt und ändert CAD-Grafikdetails über JavaScript

1. Aktuelle Situation

Das Erstellen und Ändern CAD Zeichnungen erfolgt im Allgemeinen durch Sekundärentwicklung auf Basis von AutoCAD . ObjectARX ist ein von AutoDesk eingeführtes Entwicklungssoftwarepaket für die Sekundärentwicklung auf AutoCAD Plattform. Es bietet eine objektorientierte Entwicklungsumgebung und eine Anwendungsprogrammierschnittstelle auf Basis von C++, die zuverlässig und schnell auf die AutoCAD Zeichnungsdatenbank zugreifen kann. Anders als die vorherigen sekundären AutoCAD -Entwicklungstools AutoLISP und ADS ist die ObjectARX -Anwendung eine DLL (Dynamic Link Library), die den Adressraum von AutoCAD gemeinsam nutzt und direkte Funktionsaufrufe an AutoCAD tätigt. Daher kann die Ausführungsgeschwindigkeit von mit ARX programmierten Funktionen erheblich verbessert werden. Die ARX-Klassenbibliothek verwendet das standardmäßige Kapselungsformat der C++-Klassenbibliothek, was die Programmierzuverlässigkeit und -effizienz des Programmierers erheblich verbessert.

Um ObjectARX für die sekundäre Entwicklung zu verwenden, müssen Sie zuerst die ObjectARX-Entwicklungsumgebung einrichten. Häufig verwendete Entwicklungsumgebungen sind Microsoft Visual C++ 6.0 , Microsoft visual studio 2005 , Microsoft visual studio 2008 und Microsoft visual studio 2010 . Gleichzeitig müssen Sie auch ObjectARX SDK installieren.

Entwicklungssprachen und -umgebungen wie Visual C++ und ObjectARX dürften viele Entwickler abgeschreckt haben. Und wie sieht es mit einigen einfachen Szenarien aus, etwa der automatischen Generierung von Diagrammen auf der Grundlage von Daten oder der Durchführung einiger sehr einfacher Änderungen an vorhandenen Diagrammen? Gibt es dafür eine einfache Methode oder Sprache und Entwicklungsumgebung?

2. CAD-Grafiken mit JS erstellen und ändern

Weijie Map implementiert die häufig verwendete AutoCAD Entitätskapselung auf dem Front-End und kann über JavaScript -Skripte neue CAD-Grafiken erstellen.

2.1 Unterstützte CAD-Entitätstypen

Klassenname veranschaulichen
DbLine Gerade
DbKurve Kurve
Db2dPolyline 2D-Polylinie
Db3dPolylinie 3D-Polylinie
DbPolylinie Polylinie
BlockReferenz Blockreferenz
DbArc Bogen
DbKreis runden
DbEllipse Oval
DbHatch Füllung
Text Einzeiliger Text
DbMText Mehrzeiliger Text
RasterImage Rasterbilder
DbShape Typ-Entität
Spline Spline
Auslöschung Maskenelement
Dimension Anmerkung
Db2LineAngularDimension Winkelmaß [zwei Linien]
Db3PointAngularDimension Winkelmarkierung [Drei Punkte]
DbAlignedDimension Abmessungen ausrichten
DbArcDimension Bogendimension
DbDurchmesserdimension Durchmessermaß
DbOrdinateDimension Koordinatenmarkierung
DbRadialDimension Radiusabmessung
DbRadialDimensionGroß Radius-Polylinienanmerkung
DbRotatedDimension Eckenanmerkung
Datenbankebene Schichten
DbTextStyle Textstil
DbDimStyle Bemaßungsstil
DbLinientypStil Linienstil
DbBlock Blockdefinition
Datenbankdokument Datenbankdokumentation

Nehmen wir als Beispiel ein neues Basketballfelddiagramm. Der entsprechende Code lautet wie folgt:

(asynchron () => {
 // --Neue Karte erstellen --Erstellen Sie im Hintergrund eine neue CAD-Karte und öffnen Sie sie dann im Frontend // js-Code let svc = new vjmap.Service(env.serviceUrl, env.accessToken)
 : Lassen Sie doc = neues vjmap.DbDocument();
 lass Entitäten = [];
 let line1 = neues vjmap.DbLine();
 Zeile1.start = [0, 0]
 Zeile1.Ende = [0, 15]
 entities.push(Zeile1)
 
 let line2 = neues vjmap.DbLine();
 Zeile2.start = [0, 14.1]
 Zeile2.Ende = [2,99, 14,1]
 entities.push(Zeile2)
 
 let line3 = neues vjmap.DbLine();
 Zeile3.start = [0, 0,9]
 Zeile3.Ende = [2,99, 0,9]
 entities.push(Zeile3)
 
 let line4 = neues vjmap.DbLine();
 Zeile4.start = [0, 9,95]
 Zeile4.Ende = [5,8, 9,95]
 entities.push(Zeile4)
 
 let line5 = neues vjmap.DbLine();
 Zeile5.start = [0, 5,05]
 Zeile5.Ende = [5.8, 5.05]
 
 let hatch = neues vjmap.DbHatch();
 Schraffurmuster = "SOLID";
 Schraffurfarbe = 0xB43F32;
 schraffurpunkte = [zeile4.start, zeile4.ende, zeile5.ende, zeile5.start];
 entities.push(Schraffur);
 entities.push(Zeile4)
 entities.push(Zeile5)
 
 let line6 = neues vjmap.DbLine();
 Zeile6.start = [5.8, 5.05]
 Zeile6.Ende = [5,8, 9,95]
 entities.push(Zeile6)
 
 lass arc1 = neues vjmap.DbArc();
 arc1.center = [5.7963, 7.504];
 Bogen1.Radius = 1,8014;
 arc1.startAngle = 270 * Math.PI / 180.0;
 arc1.endAngle = 90 * Math.PI / 180,0;
 Entitäten.push(arc1)
 
 lass arc2 = neues vjmap.DbArc();
 arc2.center = [5.7963, 7.504];
 Bogen2.Radius = 1,8014;
 arc2.startAngle = 90 * Math.PI / 180.0;
 arc2.endAngle = 270 * Math.PI / 180,0;
 //arc2.linetype = "GESTRICHEN"
 Entitäten.push(arc2)
 
 lass arc3 = neues vjmap.DbArc();
 arc3.center = [1,575, 7,5];
 Bogen3.Radius = 6,75;
 arc3.startAngle = 282 * Math.PI / 180,0;
 arc3.endAngle = 78 * Math.PI / 180,0;
 Entitäten.push(arc3)
 
 let block = neues vjmap.DbBlock();
 block.name = "Ball";
 block.ursprung = [0, 0]
 block.entitys = Entitäten;
 doc.appendBlock(block);
 
 let blockRef1 = neues vjmap.DbBlockReference();
 blockRef1.blockname = "Ball";
 blockRef1.position = [0, 0];
 doc.appendEntity(blockRef1);
 
 let blockRef2 = neues vjmap.DbBlockReference();
 blockRef2.blockname = "Ball";
 blockRef2.position = [28, 15];
 blockRef2.rotation = Math.PI;
 doc.appendEntity(blockRef2);
 
 let otherEnts = [
  neue vjmap.DbLine({
   Anfang: [0, 15],
   Ende: [28, 15]
  }),
  neue vjmap.DbLine({
   Anfang: [0, 0],
   Ende: [28, 0]
  }),
  neue vjmap.DbLine({
   Anfang: [14, 0],
   Ende: [14, 15],
   Farbindex: 1
  }),
  neues vjmap.DbCircle({
   Mitte: [14, 7,5],
   Radius: 1,83,
   Farbe: 0xFF0000
  }),
  neues vjmap.DbText({
   Position: [14, 16],
   Inhalt: „Basketball-Court-Diagramm“,
   Farbindex: 1,
   horizontaler Modus: 4,
   Höhe: 1,
  })
 ]
 
 doc.appendEntity(andereEnts);
 
 // js-Code let res = warte auf svc.updateMap({
  Karten-ID: "basketballCourt",
  Dateidoc: doc.toDoc(),
  mapopenway: vjmap.MapOpenWay.Speicher,
  style: vjmap.openMapDarkStyle() // Wenn das Div eine dunkle Hintergrundfarbe hat, wird hier auch der dunkle Hintergrundstil übergeben})
 wenn (res.error) {
  Nachricht.Fehler(res.Fehler)
 }
 let mapExtent = vjmap.GeoBounds.fromString(res.bounds);
 let prj = neues vjmap.GeoProjection(mapExtent);
 
 var map = neues vjmap.Map({
  Container: 'Map', // Container-ID
  Stil: svc.rasterStyle(),
  Mitte: prj.toLngLat(mapExtent.center()),
  Zoom: 2,
  renderWorldCopies: false
 });
 Karte.Anhängen(svc, prj);
 map.fitMapBounds();
 
 map.addControl(neues vjmap.NavigationControl());
 map.addControl(neues vjmap.MousePositionControl({showZoom: true}));
 
 map.enableLayerClickHighlight(svc, e => {
  e && Nachricht.info(`Typ: ${e.name}, Objekt-ID: ${e.objectid}, Ebene: ${e.layerindex}`);
 })
})();


Nach der Erstellung sieht die Web-Anzeige folgendermaßen aus:

Die erstellte DWG-Zeichnung kann in AutoCAD geöffnet werden:

2.2 Änderung oder Löschung

Ändern Sie die Karte, von der das Attribut „ from festgelegt ist, und die Karte wird geändert, auf dieser Karte hinzugefügt oder gelöscht. Das Format ist mapid/version , z. B. exam/v1 .

Zum Löschen geben Sie objectID der Entität im Diagramm an.

Der Beispielcode lautet wie folgt:

: Lassen Sie doc = neues vjmap.DbDocument();
/** Die Karte, aus der die Daten stammen. Die Daten werden auf dieser Karte geändert, hinzugefügt oder gelöscht. Das Format ist Karten-ID/Version, z. B. exam/v1. */
doc.from = "basketballCourt/v1";
 
// Ändern oder löschen Sie eine Entität, indem Sie den Entitäts-Handle `objectid` übergeben. Wenn es keine `objectid` gibt, bedeutet dies, dass let modifyEnts = [ hinzugefügt wird.
    /*Überarbeiten*/
    neues vjmap.DbCircle({
        Objekt-ID: "71", // Entitäts-Handle. Wenn der Entitäts-Handle übergeben wird, bedeutet dies, dass diese Entität geändert oder gelöscht werden soll. 
        Farbindex: 2
    }),
    /*löschen*/
    neues vjmap.DbText({
        objectid: "73", // Entitäts-Handle. Wenn der Entitäts-Handle übergeben wird, bedeutet dies, dass diese Entität geändert oder gelöscht werden soll. 
        delete: true // bedeutet löschen}),
    /*Neu hinzugefügt (keine Objekt-ID übergeben)*/
    neues vjmap.DbMText({
        Position: [14, -2],
        Inhalt: „Ich bin ein mehrzeiliger Text“,
        Farbindex: 3,
        Anhang: 2,
        Höhe: 1,
    })
]
doc.appendEntity(modifizierteEnts);
 
// js-Code let res = warte auf svc.updateMap({
    Karten-ID: "newBasketballCourt",
    Dateidoc: doc.toDoc(),
    mapopenway: vjmap.MapOpenWay.Speicher,
    style: vjmap.openMapDarkStyle() // Wenn das Div eine dunkle Hintergrundfarbe hat, wird hier auch der dunkle Hintergrundstil übergeben})


Die Ergebnisse sind wie folgt:

Sie können die Demo-Adresse https://vjmap.com/guide/newmap.html besuchen, um den Effekt zu erleben

3. Anwendungsszenarien

Es eignet sich für Szenarien, in denen Daten auf dem Front-End vorhanden sind und diese online erstellt oder basierend auf der aktuellen CAD-Grafik geändert oder gelöscht werden müssen. Sie können beispielsweise die nationalen GeoJson -Daten abrufen, um eine CAD-Grafik zu erstellen. Für einige sich häufig ändernde Daten, wie z. B. technische Fortschrittszeichnungen, werden DWG-Zeichnungen in Echtzeit basierend auf den Fortschrittsdaten generiert. Für professionelle und komplexe Grafikzeichen- oder Bearbeitungsarbeiten wird die Verwendung ObjectARX für die Sekundärentwicklung von AutoCAD empfohlen!

Dies ist das Ende dieses Artikels zum Erstellen und Ändern von CAD-Grafiken über JavaScript im Frontend. Weitere Informationen zum Erstellen und Ändern von CAD-Grafiken über JavaScript im Frontend finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den verwandten Artikeln weiter unten. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Anwendung des Fassadenmusters im Entwurfsmuster in der JavaScript-Entwicklung

<<:  mysql8.0.23 Linux (Centos7) Installation vollständiges und ausführliches Tutorial

>>:  Verstehen Sie den Unterschied zwischen BR- und P-Tags anhand von Beispielen

Artikel empfehlen

js und jquery, um einen Tab-Statusleisten-Umschalteffekt zu erzielen

Heute werden wir einen einfachen Fall durchgehen ...

Detaillierte Erläuterung der MySQL sql_mode-Abfrage und -Einstellung

1. Führen Sie SQL aus, um anzuzeigen wählen Sie @...

Eine einfache und eingehende Studie zu Async und Await in JavaScript

Inhaltsverzeichnis 1. Einleitung 2. Detaillierte ...

JavaScript-Closures erklärt

Inhaltsverzeichnis 1. Was ist ein Abschluss? 2. D...

Erstellen, Einschränkungen und Löschen von Fremdschlüsseln in MySQL

Vorwort Ab MySQL-Version 3.23.44 unterstützen Inn...

So überprüfen Sie die Festplattennutzung unter Linux

1. Verwenden Sie den Befehl df, um die gesamte Fe...

So stellen Sie das Crownblog-Projekt mit Docker in der Alibaba Cloud bereit

Front-End-Projektpaketierung Suchen Sie .env.prod...

Zusammenfassung der Implementierungsmethoden und Punkte der H5-Wakeup-APP

Inhaltsverzeichnis Vorwort Zur APP-Methode spring...

Äußerst detaillierte Freigabe der MySQL-Nutzungsspezifikation

In letzter Zeit waren viele datenbankbezogene Vor...

Grundkenntnisse zu MySQL – Lernhinweise

Datenbank anzeigen show databases; Erstellen eine...