Crearea DWF-substrat în AutoCAD Lisp
Mi-a luat aici se introduce un dwf câteva (sau dwfx, nu ca materie) în dwg documentul curent. Desigur, că am vrut să rezolve puzzle-ului de Lisp, astfel, fără a _.dwfattach comenzi de tip. Asta e calvarul lui și spune chiar mai jos :)
cules de simplă în DWG-fișier a relevat faptul că înregistrările DWF (x) descrierile sunt stocate în dicționarul ACAD_DWFDEFINITIONS. Ok, verificați dicționar și creați-l, dacă este necesar - nici o întrebare. Dar apoi a început deja nu foarte clar și evident.
În primul rând, nu am putut gestiona pentru a crea în mod corect o intrare în dicționar. Desigur, există dwf, desigur, este ACAD. Dar este! Deciziile pe care am putut găsi, mai devreme sau mai târziu, vin la codul afișat în ADN DevBlog. Codul nu va duce, va arăta mai bine, am bătut joc de el :)
În primul rând, am făcut echipa, funcția LISP, și în al doilea rând, a pus caseta în spațiul modelului DWF. Ei bine, am vrut o manivela;)
# 91; LispFunction # 40; "Kpblc_dwfinsert" # 41; # 93;
lisp_dwfinsert publice obiect static # 40; ResultBuffer Args # 41;
ObjectId res = objectId. nul;
Argumentele Array = Args. AsArray # 40; # 41; ;
string sFileName = Conversie. ToString # 40; # 40; # 40; TypedValue # 41; # 40; argumente. GetValue # 40; 0 # 41; # 41; # 41;. valoare # 41; ;
dacă # 40; Sistem. IO. Fișier. Exists # 40; sFileName # 41; # 41;
Document doc = Application. DocumentManager. MdiActiveDocument;
Baza de date db = doc. Baza de date;
Editor ed = doc. Editor;
utilizând # 40; Tranzacție tr = db. TransactionManager. StartTransaction # 40; # 41; # 41;
// verificați mai întâi pentru layout-ul necesar
layout UnderlayFile = UnderlayHost. DwfHost. getfile # 40; sFileName, "" # 41; ;
UnderlayItem selectedItem = null;
Regex rxEng = new Regex # 40; "Model". RegexOptions. IgnoreCase # 41; ;
Regex rxRus = new Regex # 40; "Model". RegexOptions. IgnoreCase # 41; ;
dacă # 40; Aspecte. Articole. Count> 1 # 41;
foreach # 40; UnderlayItem element în machete. Articole # 41;
Potriviți strMatchEng = rxEng. meci # 40; element. nume # 41; ;
Match strMatchRus = rxRus. meci # 40; element. nume # 41; ;
dacă # 40; # 40; String. comparație # 40; element. Nume. toupper # 40; # 41;. "MODEL". fals # 41; == 0 # 41; || strMatchEng. Succesul || strMatchRus. succes # 41;
# 123; selectedItem = element; pauză; # 125;
# 123; selectedItem = layout. Articole # 91; 0 # 93; ; # 125;
dacă # 40; selectedItem == null # 41;
# 123; ed. WriteMessage # 40; „Eroare, nu există o pagină cu numele modelului“ # 41; ; întoarce null; # 125;
DBDictionary nod = # 40; DBDictionary # 41; tr. GetObject # 40; db. NamedObjectsDictionaryId. OpenMode. ForRead # 41; ;
string defDictKey = UnderlayDefinition. GetDictionaryKey # 40; typeof # 40; DwfDefinition # 41; # 41; ;
ObjectId defId = objectId. nul;
dacă # 40;. da din cap. Conține # 40; defDictKey # 41; # 41;
utilizând # 40; dict DBDictionary = new DBDictionary # 40; # 41; # 41;
da din cap. UpgradeOpen # 40; # 41; ;
defId = da din cap. SetAt # 40; defDictKey, dict # 41; ;
tr. AddNewlyCreatedDBObject # 40; dict, adevărat # 41; ;
# 123; defId = da din cap. GetAt # 40; defDictKey # 41; ; # 125;
ObjectId idDef = objectId. nul;
DBDictionary dwfDict = # 40; DBDictionary # 41; tr. GetObject # 40; defId, OpenMode. ForRead # 41; ;
sDwfName string = Path. GetFileNameWithoutExtension # 40; sFileName # 41; ;
dacă # 40; dwfDict. Conține # 40; sDwfName # 41; # 41;
# 123; idDef = dwfDict. GetAt # 40; sDwfName # 41; ; # 125;
Deci, codul lucrat: returnează un pointer la entitatea nou creată (

Dar în referință Managerul a fost ceva ciudat:

Și dacă te porți ca o maimuță cu o grenadă și a alerga „Detașare“ (dezactivare) link-ul?

M-am dus la ADN Devhelp, răspunsul a fost ceva de genul: „Crearea DWF-substrat folosind mecanismul COM în prezent imposibil de a crea elementele respective prin intermediul DXF este foarte greoaie și nesustenabilă.“
Rezumând, putem spune următoarele: în cazul în care este necesar pentru a insera DWF-substrat într-un document, sau de a folosi metode de comandă, fie se dezvolta pe deplin pe NET: Lisp nu pot face față acestei sarcini.
