-
Notifications
You must be signed in to change notification settings - Fork 10
Wrap BrxBim classes #90
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
In progress, est two-three weeks |
Saw that you're back online. Hope you're well. Please signal whenever I becomes reasonable to attempt scripting |
I’m going to defer this until V25 is released, reason is, there appears API changes between beta versions. I find myself having to redo stuff. |
Hi, do you have any sample data I can use to test? I'll try to push hard on this next week. Admittedly, this wrap is hard for me, I've never worked with BIM. |
Hi as well. I just tried sample data from BuildingSMART. Works as manual import into v24. Hope distraction from vanilla work does not cause too many headaches. From my current understanding the BCAD BIM (in this case) consists of two parts: 1#Import of geometries into ACIS objects from IFC 2x3 up to 4.1. 2#Classification of existing objects through a defined tag-catalogue. In a current project it would be a time-saver to mass-convert incoming IFC-files to DWG to assemble a collision model (1#). Second goal would be to sync object classification <-> layer structure. Best wishes. Seb |
@CEXT-Dan I saw the code snipped from your work. I have tried to load it with the file path correctly set. It messages as follows:
I do not see any objects imported though. I cannot get around figuring out the usage of |
Hi, it's not ready yet. |
I can import the sample from building smart on a local compile. However, I’m having trouble in that onIfcProductImported is never called. It’s not called in the BRX sample either. onIfcProduct is called, however, matrix = context.getLocalPlacement(entity) always returns an identity, This is also the same with the BRX sample. |
SR 184312 asks for help |
I have seen the following in the SDK as well as |
I had set new guid in onStart, onIfcProduct, and beforeCompletion are called correctly. My guess is that onIfcProductImported has lost its “virtual” status due to some internal change. I still have lots of work on other items in BIM while I wait on the SR… I’ll make a release Thursday as a progress build |
Sorry to have bothered you with this workload. |
Not sure about that off the top of my head |
@CEXT-Dan: Thx for the feedback. We will try ourselves with LISP standard tools for the mo. Best of health. |
Bricsys was able to reproduce the import reactor issue, I don’t think they will be working on a V24 fix, since V25 is just around the corner. I’ll continue working on Bim wrappers, albeit with a lower priority |
Seems Bricsys does not want to support me on this project. Closing until something changes |
Advise is requested: import traceback
from pyrx_imp import Rx, Ge, Gs, Gi, Db, Ap, Ed, Bim
import wx
import os, pathlib
def openIfcSideDrawing(path, opts):
print("\nProcessing {} ".format(path))
db = Db.Database(False, True)
Bim.IfcImportOptions.importIfcFile(db, path, opts)
path = str(path[:-3]) + "dwg"
print(path)
db.saveAs("c://temp/test.dwg")
db.closeInput(True)
def PyRxCmd_doit1():
try:
ifcext = ".ifc".casefold()
opts = Bim.IfcImportOptions()
dlg = wx.DirDialog(None, "Choose input directory","",
wx.DD_DEFAULT_STYLE | wx.DD_DIR_MUST_EXIST)
if dlg.ShowModal() != wx.ID_OK:
print("You Cancelled The Dialog!")
return
for fname in next(os.walk(dlg.GetPath()), (None, None, []))[2]:
ext = pathlib.Path(fname).suffix.casefold()
if ext != ifcext:
continue
fpath = '{}\\{}'.format(dlg.GetPath(),fname)
print(fpath)
openIfcSideDrawing(fpath, opts)
except Exception as err:
traceback.print_exception(err) leads to
|
this works for me, see my comment import traceback
from pyrx_imp import Rx, Ge, Gs, Gi, Db, Ap, Ed, Bim
import wx
import os, pathlib
def openIfcSideDrawing(path, opts):
print("\nProcessing {} ".format(path))
# the ctor is going to change because in this case you are creating
# a new drawing which also needs a new document
db = Db.Database(True, False)
Bim.IfcImportOptions.importIfcFile(db, path, opts)
path = str(path[:-3]) + "dwg"
print(path)
db.saveAs("c:/temp/test.dwg")
#not needed, this is for reading exisiting drawings
#db.closeInput(True)
def PyRxCmd_doit1():
try:
ifcext = ".ifc".casefold()
opts = Bim.IfcImportOptions()
dlg = wx.DirDialog(None, "Choose input directory","",
wx.DD_DEFAULT_STYLE | wx.DD_DIR_MUST_EXIST)
if dlg.ShowModal() != wx.ID_OK:
print("You Cancelled The Dialog!")
return
for fname in next(os.walk(dlg.GetPath()), (None, None, []))[2]:
ext = pathlib.Path(fname).suffix.casefold()
if ext != ifcext:
continue
fpath = '{}\\{}'.format(dlg.GetPath(),fname)
print(fpath)
openIfcSideDrawing(fpath, opts)
except Exception as err:
traceback.print_exception(err) |
oh! also db.saveAs("c:/temp/test.dwg") is in a loop, so if you have more than one .ICF file if will fail because c:/temp/test.dwg is already there |
Thx. Blindfolded. This works for me now: def openSaveIfcSideDrawing(path, opts):
print("\nProcessing {} ".format(path))
db = Db.Database(True, False)
Bim.IfcImportOptions.importIfcFile(db, path, opts)
path = str(path[:-3]) + "dwg"
db.saveAs(path)
print("\nSaved to {} ".format(path))
db.closeInput(True) |
I’m not sure what to do with this task. The import reactor, (which seems like the most important feature? ) does not work in V24 or V25. I think the class layout is mostly done. I’ll reopen this so it can be worked on. |
Started test scripting the sample from When doing ourBuilding = Bim.BimBuilding.createNewBuilding(db, "TowerNorth")
ourBuilding.setDescription("the north side tower building")
floor_1 = Bim.BimStory.createNewStory(db, "TowerNorth", "Floor 1") all nice, but floor_2 = Bim.BimStory.createStory("second floor", ourBuilding) throws
|
When trying as per SDK // assign floors & building to "hull entities"
AcDbObjectId idBuilding;
AcDbObjectIdArray idsForBuilding;
bimRes = ourBuilding.assignedObjects(idsForBuilding, pDb);
if (idsForBuilding.isEmpty())
{
idBuilding = createBoxSolid(100, 35, 20, AcGeVector3d(0,0,10.0), 1);
bimRes = ourBuilding.assignToEntity(idBuilding);
} in the fashion db = Db.curDb()
model = Db.BlockTableRecord(Db.curDb().modelSpaceId(), Db.OpenMode.ForRead)
ourBuilding = Bim.BimBuilding.createNewBuilding(db, "TowerNorth")
ourBuilding.setDescription("the north side tower building")
if not ourBuilding.assignedObjects(db):
print("creating building elements")
box = Db.Solid3d()
box.createBox(100.0,35.0,20.0) # createBoxSolid(100, 35, 20, AcGeVector3d(0,0,10.0), 1); add vector
model.upgradeOpen()
model.appendAcDbEntity(box)
ourBuilding.assignToEntity(box.id())
model.downgradeOpen() I see no properties attached to the solid. |
Looks right. Just to add: BimPropertySets looks quite hard to wrap
IMHO the API isn’t well thought out, Bricsys had to alter the API to be more usable from .NET |
I should be very fine. Thanks a ton for letting me participate. Am learning from your coding and corrected contributions. |
Stale issue message |
9E88
bumping this so I don't forget, hoping Bricsys will fix the reactor |
For the record, I have just diff-compared
Without knowing much about software design etc. I see no need for action. I do not know whether the reaction has been fixed or whether it was due to the typo. |
Hoping the reactor is fixed. Also some of the BRX functions are not really well thought out, there’s nested dictionaries, too complex, I noticed that the .NET version is a bit cleaner, so I might get inspiration from that. |
Version 25.2.05 SR194193 I'll need to revisit the code |
import test seems to work
|
I guess I cannot figure out |
Do you mean to wrap it? Or are you having trouble building? |
I'll start working on IfcExportReactor, I know you've been waiting for this. |
Thx, but no hustle. The project has been canceled. I looked at the header file this morning and could not get my head around it (sparetime hobbyist). I think it would be useful though to close the import/export loop. |
Export reactor seems to work enough to generate a file, though I’m sure there are issues |
@CEXT-Dan hope you're well. Could use functionality to import 1) IFC, 2) classify entities (for example by layer name) and 3) export to IFC. I believe it's all BCAD verticals. I am aware that there may be other priorities. Whenever you find the time I would be grateful to be able to script anything.
Have in mind that you're about to travel for longer. Wish you safe journey.
Originally posted by @schoeller in #5 (comment)
The text was updated successfully, but these errors were encountered: