Inaktív dokumentum használata, autolisp

A fórumokon és webhelyeken megjelenített lisp függvények túlnyomó többsége az aktuális dokumentummal dolgozik. Ez általában elég. De mi van, ha több dokumentumot kell feldolgozni? Itt szeretnék néhány olyan kérdést megfontolni, amelyek egy inaktív dokumentum feldolgozásához kapcsolódnak.

A jelenlegi (aktív) dokumentumban a programozó hozzáférhet a lisp összes funkciójához, beleértve a parancsmódokat, a primitívek készletének és az ename metódusok és az aktívx interaktív létrehozását. De érdemes csak az inaktív dokumentum feldolgozására utalni, mivel a lehetséges eszközök listája azonnal szűkít az "ActiveX" és gyakorlatilag semmi többé.

Mielőtt továbbmennék, emlékeztetni fogom Önöket arra, hogy az AutoCAD-t többdimenziós módba kell fordítani (az SDI rendszerváltozó 0).

Az első vágy az, hogy írjon egy scr fájlt (talán programozva) az algoritmussal: nyissa meg a fájlt, töltse be a lisp-ot, hajtsa végre a lisp-ot, mentse el a fájlt, nyissa ki a következőt; és futtatni kell a végrehajtáshoz. Mi a baj ezzel a megközelítéssel? Nos, legalábbis, hogy a feldolgozott fájlok nagyon nehézek lehetnek, a felfedezésük és a regenerációjuk idejéig érhetõ el. A fájlok belsejében például proxy objektumok léphetnek fel. Vagy lesz kérés a shx-fájl megtalálására (hogyan lehet megszabadulni ettől a kéréstől, később beszélünk). Vagy valami mást ... Röviden, a számítógép mellett kell ülnöm, és várni kell, amíg befejezi a forgatókönyvet. Nem, unalmas.

A harmadik lehetőség az, hogy elég mélyen felmászik az AutoCAD dzsungelébe és megnyitja a dwg fájlt aktiválás nélkül. Rajta szeretnék abbahagyni.

Az ObjectDBX nem olyan régen jelent meg, és létezésének kezdetén való regisztrálása más volt, mint az utolsó alkalommal használt változatok.

Mivel az ObjectDBX hívás közvetlenül az AutoCAD verziójától függ, először határozza meg a verziót:

Miután megkapta az AutoCAD futtatásának verzióját, máris megpróbálhatja megkeresni az ObjectDBX-t:

Nos, maga a felület érkezett. És akkor mi van? És akkor itt van:

Jelenleg a legérdekesebb módszerek az Open és a SaveAs (és nem a Save, paradoxon, ahogyan úgy tűnhet). Ideje beszélni arról, hogy működik az ObjectDBX, milyen korlátai vannak és hogyan kerülhető el.

A fájl megnyitásának kérdése még csak fel sem merülhet:

# 40; vla - open odbx fájlnév # 41;

De a feldolgozás és a megőrzés nem minden olyan nyilvánvaló.

Csak egy dolog van hátra: ne felejtsük el, hogy a fájlt csak az aktuális verzióban és csak a SaveAs módszerrel mentjük el:

Szia Alex, kérem, mondja meg, és ha lehetséges, a IAxDbDocument interfész (vagy ObjectDBX) ha dolgozik az inaktív létrehozott dokumentumokat a dokumentumban szereplő bármely szervezet. Ha lehetséges, mondja meg, hogyan. Személy szerint nem sikerült.

(vla-AddCircle odbx (vlax-3D-pont "(0 0 0)) 100)
; Hiba: Az ActiveX szerver hibát adott: ismeretlen név: AddCircle

Ha megnézzük az elérhető módszerek és tulajdonságok listáját, az alábbiak szerint:
(vlax-dump-Object odbx t),
Csak 8 módszer létezik, és egyik sem lehetővé teszi, hogy egy inaktív dokumentumban egy primitívet hozzon létre.

Rendben. Összehasonlítás:
(vla-AddCircle odbx (vlax-3D-pont "(0 0 0)) 100)
és
(vla-get-ModelSpace odbx) (vlax-3D-pont '(0 0 0)) 100)
Nem lehet létrehozni egy dokumentumot egy dokumentumban. A létrehozott primitív valamilyen tér - modell, lap, blokk ...

Igen, nem azért, amiért itt vagyok ugyanazokkal a problémákkal szemben - anyám nem fáj. Ha garantált működési megoldás létezik, megosztom.

Szeretnék egy kis kiegészítést készíteni.
Ezzel kapcsolatban az a lehetőség, hogy "az ObjectDBX segítségével zárolt fájlt nyisson". Jelenleg vl-file-systime-t használok, hogy ellenőrizzük a fájl megnyitásának elérhetőségét (a függvény nullát adja vissza, ha valaki megnyitotta a fájlt). Ha a fájl nem érhető el, akkor átmásolom a% temp% -ra, és onnan megnyitom.
Nem túl elegáns, de működik. Eddig, legalábbis ...

Üdvözlet, Alexey.
Ne mondja meg, hogyan kell helyesen hívni a vla-ZoomExtenteket egy objektum inaktív dokumentumban való létrehozása után

(vla-ZoomExtents (vlax-get-acad-object)) - csak az aktuális nyitott fájlban
(VLA-zoomextents (VLA-get-alkalmazás (VLA-get-activedocument (oláh-get-Acad-objektum)))) - csak a jelenleg megnyitott fájl

(vla-ZoomExtents (vla-get-ModelSpace odbx)); = ActiveX szerver visszaküldte a hibát: ismeretlen név: ZoomExtents [cc lang = "lisp"]

Véleményem szerint ez nem egy inaktív dokumentumban történik. Ugyanúgy, mint az inaktív dokumentum vla-purgeall-ban.
Miért kell nagyítani egy inaktív dokumentumot?

A tervezők automatikusan megpróbálták feldolgozni a Revit-től kapott dwg-fájlokat, az AutoCAD-ben dolgozó alvállalkozókra történő átvitel céljából.
1. Az összes réteget átnedvesítse semleges szürke színnel
2. Váltson az elrendezésre
3. Letiltsa az összes réteget az egyes képernyőkön (vplayer / fagyasztás)
4. Írja be a rajzot a képernyő határába (valamilyen okból, amikor Revit-ből érkezik, a rajz nem szerepel a képernyő határán)

úgy tűnik, hogy megoldja a script, mint a Válasz # 4

>> Recolour minden réteg ...
Nem probléma
>> váltson az elrendezésre
Kapcsolja be vagy aktiválja úgy, hogy nyitva legyen a képernyőn? És ha váltasz, akkor a füge? A vla-get-block segítségével, így elérheti a lemezegység leírását, és dolgozhat vele, mint egy normál blokk
>> tiltsa le az összes réteget az egyes képernyőkön (vplayer / fagyasztás)
Nem vagyok biztos benne, hogy ez megtörténik, de mégis: járja át a lapblokk leírásának minden primitívjét, keresse meg a VE-t, mutasson rájuk indexeket és folytassa velük a kémiai folyamatokat.
>> Töltse ki a rajzot a képernyő határában (valamilyen oknál fogva, amikor Revit-ből érkezik, a rajz nem szerepel a képernyő szegélyén)
A rajzban vagy a CE-ben? A különbség egy kicsit alapvető. Ha a második (és RE már létezik), akkor meg kell vizsgálnunk annak méretét, megváltoztatnunk kell a pont koordinátáit, stb.
Mivel még soha nem láttam ilyen feladatokat előttem, nincsenek kész megoldások

Alexey, köszönöm a válaszokat!
A rétegek újradefiniálásával már elsajátítottam
A téma az inaktív dokumentumok első használatával.
Úgy tűnt számomra, hogy ez egy helyesebb megközelítés (mint szkriptek), ha sok rajzot kell feldolgozni.
Még mindig meg kell adnunk a probléma megállapítását ...

Alexei, szeretném tisztázni, tudok-e használni az vl-cmdf inaktív dokumentumot? És ha igen, akkor milyen struktúrát fog írni a csapat? Ha jól értem, akkor (vl-cmdf "_CampaignName") - ez a parancssori struktúra csak az aktuális rajzban működik?

Minden jogosan megérteni, a vl-cmdf csak az aktív dokumentumban fog működni. Nem hiszem, hogy még egy konstrukció, mint a vla-SendCommand is működni fog

Kapcsolódó cikkek