I am not sure but there might be a node to set a view to a viewport. And nodes to create a named view in modelspace. At the moment I can’t check how it works, maybe tomorrow.
There is no node yet to set a view to a viewport. I’ll put it on the wish-list.
Does anyone know why I have this message error:
Warning: NameError : name ‘acapp’ is not defined [’ File “”, line 29, in \n’]
This is the code I modified:
# Load the Python Standard and DesignScript Libraries
import sys
import clr
# Add Assemblies for AutoCAD and Civil3D
clr.AddReference('AcMgd')
clr.AddReference('AcCoreMgd')
clr.AddReference('AcDbMgd')
clr.AddReference('AecBaseMgd')
clr.AddReference('AecPropDataMgd')
clr.AddReference('AeccDbMgd')
# Import references from AutoCAD
from Autodesk.AutoCAD.Runtime import *
from Autodesk.AutoCAD.ApplicationServices import *
from Autodesk.AutoCAD.EditorInput import *
from Autodesk.AutoCAD.DatabaseServices import *
from Autodesk.AutoCAD.Geometry import *
# Import references from Civil3D
from Autodesk.Civil.ApplicationServices import *
from Autodesk.Civil.DatabaseServices import *
import System
from System import Array
from System import Collections
# The inputs to this node will be stored as a list in the IN variables.
adoc = acapp.DocumentManager.MdiActiveDocument
ed = adoc.Editor
civdoc = CivilApplication.ActiveDocument
AcadApplication = Autodesk.AutoCAD.ApplicationServices.Application
name = IN[0]
layer = IN[1]
def explode_stpoints(name, layer):
error_report = None
res = []
object_ids_list = []
try:
with adoc.LockDocument():
with adoc.Database as db:
with db.TransactionManager.StartTransaction() as t:
# Place your code below
bt = t.GetObject(db.BlockTableId, OpenMode.ForWrite)
btr = t.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite)
lm = LayoutManager.Current.CurrentLayout = name
lmm = LayoutManager.Current
objly = t.GetObject(lmm.GetLayoutId(lmm.CurrentLayout), OpenMode.ForWrite)
vids = objly.GetViewports()
if vids.Count > 0:
vport = t.GetObject(vids[1], OpenMode.ForWrite)
vport.Locked = False
vport.On = True
vport.Visible = True
ed.SwitchToModelSpace()
command = f"QSELECT\nL\n==\n{layer}\nEXPLODE\n"
adoc.SendStringToExecute(command, True, False, False)
ed.SwitchToPaperSpace()
vport.Locked = True
vport.UpdateDisplay()
commandq = "_QSAVE\n"
adoc.SendStringToExecute(commandq, True, False, False)
t.Commit()
except:
import traceback
error_report = traceback.format_exc()
if error_report is None:
return commandq
else:
return error_report
# Assign your output to the OUT variable.
OUT = explode_stpoints(name, layer)
adding this to your code
start By writing the code Line by line
from here
import clr
# Add Assemblies for AutoCAD and Civil 3D APIs
clr.AddReference('acmgd')
clr.AddReference('acdbmgd')
clr.AddReference('accoremgd')
clr.AddReference('AecBaseMgd')
clr.AddReference('AecPropDataMgd')
clr.AddReference('AeccDbMgd')
clr.AddReference('AeccPressurePipesMgd')
clr.AddReference('acdbmgdbrep')
clr.AddReference('System.Windows.Forms')
clr.AddReference('Civil3DNodes')
# Create an alias to the Autodesk.AutoCAD.ApplicationServices.Application class
import Autodesk
#import Autodesk.AutoCAD.ApplicationServices.Application as acapp
acapp = Autodesk.AutoCAD.ApplicationServices.Application
# Import references from AutoCAD
from Autodesk.AutoCAD.Runtime import *
from Autodesk.AutoCAD.ApplicationServices import *
from Autodesk.AutoCAD.EditorInput import *
from Autodesk.AutoCAD.DatabaseServices import *
from Autodesk.AutoCAD.Geometry import *
# Import references for Civil 3D
from Autodesk.Civil.ApplicationServices import *
from Autodesk.Civil.DatabaseServices import *
import System
from System import Array
from System import Collections
adoc = acapp.DocumentManager.MdiActiveDocument
ed = adoc.Editor
civdoc = CivilApplication.ActiveDocument
AcadApplication = Autodesk.AutoCAD.ApplicationServices.Application
name = IN[0]
layer = IN[1]
def explode_stpoints(name, layer):
error_report = None
res = []
object_ids_list = []
try:
with adoc.LockDocument():
with adoc.Database as db:
with db.TransactionManager.StartTransaction() as t:
# Place your code below
#bt = t.GetObject(db.BlockTableId, OpenMode.ForWrite)
#btr = t.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite)
#lm = LayoutManager.Current.CurrentLayout = name
#lmm = LayoutManager.Current
#objly = t.GetObject(lmm.GetLayoutId(lmm.CurrentLayout), OpenMode.ForWrite)
#vids = objly.GetViewports()
t.Commit()
except:
import traceback
error_report = traceback.format_exc()
if error_report is None:
return name
else:
return error_report
# Assign your output to the OUT variable.
OUT = explode_stpoints(name, layer)
Thanks @hosneyalaa,
That worked, now the problem is only in my code.
I was close, I will continue trying and investigating if my code is correct, if I can’t, could you help me.
wirte code by ironpython2 will working
@hosneyalaa I tried,
but looks like there is an error in my code,
There is my code by the way I hope someone can help me.
import clr
# Add Assemblies for AutoCAD and Civil 3D APIs
clr.AddReference('acmgd')
clr.AddReference('acdbmgd')
clr.AddReference('accoremgd')
clr.AddReference('AecBaseMgd')
clr.AddReference('AecPropDataMgd')
clr.AddReference('AeccDbMgd')
clr.AddReference('AeccPressurePipesMgd')
clr.AddReference('acdbmgdbrep')
clr.AddReference('System.Windows.Forms')
clr.AddReference('Civil3DNodes')
# Create an alias to the Autodesk.AutoCAD.ApplicationServices.Application class
import Autodesk
#import Autodesk.AutoCAD.ApplicationServices.Application as acapp
acapp = Autodesk.AutoCAD.ApplicationServices.Application
# Import references from AutoCAD
from Autodesk.AutoCAD.Runtime import *
from Autodesk.AutoCAD.ApplicationServices import *
from Autodesk.AutoCAD.EditorInput import *
from Autodesk.AutoCAD.DatabaseServices import *
from Autodesk.AutoCAD.Geometry import *
# Import references for Civil 3D
from Autodesk.Civil.ApplicationServices import *
from Autodesk.Civil.DatabaseServices import *
import System
from System import Array
from System import Collections
adoc = acapp.DocumentManager.MdiActiveDocument
ed = adoc.Editor
civdoc = CivilApplication.ActiveDocument
AcadApplication = Autodesk.AutoCAD.ApplicationServices.Application
name = IN[0]
layer = IN[1]
def explode_stpoints(name, layer):
error_report = None
res = []
object_ids_list = []
try:
with adoc.LockDocument():
with adoc.Database as db:
with db.TransactionManager.StartTransaction() as t:
# Place your code below
bt = t.GetObject(db.BlockTableId, OpenMode.ForWrite)
btr = t.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite)
lm = LayoutManager.Current.CurrentLayout = name
lmm = LayoutManager.Current
objly = t.GetObject(lmm.GetLayoutId(lmm.CurrentLayout), OpenMode.ForWrite)
vids = objly.GetViewports()
if vids.Count > 0:
vport = t.GetObject(vids[1], OpenMode.ForWrite)
vport.Locked = False
vport.On = True
vport.Visible = True
ed.SwitchToModelSpace()
command = f"QSELECT\nL\n==\n{layer}\nEXPLODE\n"
adoc.SendStringToExecute(command, True, False, False)
ed.SwitchToPaperSpace()
vport.Locked = True
vport.UpdateDisplay()
commandq = "_QSAVE\n"
adoc.SendStringToExecute(commandq, True, False, False)
t.Commit()
except:
import traceback
error_report = traceback.format_exc()
if error_report is None:
return name
else:
return error_report
# Assign your output to the OUT variable.
OUT = explode_stpoints(name, layer)
TRY
import clr
# Add Assemblies for AutoCAD and Civil 3D APIs
clr.AddReference('acmgd')
clr.AddReference('acdbmgd')
clr.AddReference('accoremgd')
clr.AddReference('AecBaseMgd')
clr.AddReference('AecPropDataMgd')
clr.AddReference('AeccDbMgd')
clr.AddReference('AeccPressurePipesMgd')
clr.AddReference('acdbmgdbrep')
clr.AddReference('System.Windows.Forms')
clr.AddReference('Civil3DNodes')
# Create an alias to the Autodesk.AutoCAD.ApplicationServices.Application class
import Autodesk
import Autodesk.AutoCAD.ApplicationServices.Application as acapp
# Import references from AutoCAD
from Autodesk.AutoCAD.Runtime import *
from Autodesk.AutoCAD.ApplicationServices import *
from Autodesk.AutoCAD.EditorInput import *
from Autodesk.AutoCAD.DatabaseServices import *
from Autodesk.AutoCAD.Geometry import *
# Import references for Civil 3D
from Autodesk.Civil.ApplicationServices import *
from Autodesk.Civil.DatabaseServices import *
import System
from System import Array
from System import Collections
adoc = acapp.DocumentManager.MdiActiveDocument
ed = adoc.Editor
civdoc = CivilApplication.ActiveDocument
AcadApplication = Autodesk.AutoCAD.ApplicationServices.Application
#import AcadApplication
#XX= IN[1]
#YY= IN[2]
vp = IN[1]
name = IN[0]
def move_labels( name,vp ):
#if not hasattr(objects, "__iter__"):
#objects = [objects]
#if not hasattr(yy, "__iter__"):
#yy = [yy]
#if not hasattr(lys, "__iter__"):
#lys = [lys]
error_report = None
res = []
object_ids_list = []
try:
with adoc.LockDocument():
with adoc.Database as db:
with db.TransactionManager.StartTransaction() as t:
bt = t.GetObject(db.BlockTableId, OpenMode.ForWrite)
btr = t.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite)
#ii = 0
lm = LayoutManager.Current.CurrentLayout =name
lmm = LayoutManager.Current
objly = t.GetObject(lmm.GetLayoutId(lmm.CurrentLayout), OpenMode.ForWrite)
vids = objly.GetViewports()
if vids.Count > 0:
vport = t.GetObject(vids[1], OpenMode.ForWrite)
ed.SwitchToModelSpace()
command = "zoom\nA\n"
adoc.SendStringToExecute(command, True, False, False)
ed.SwitchToPaperSpace()
t.Commit()
except:
import traceback
error_report = traceback.format_exc()
if error_report is None:
return vport
else:
return error_report
OUT = move_labels( name,vp )
Method to use API to center Model Space to UCS coordinates
import clr
import traceback
# Add Assemblies for AutoCAD and Civil3D
clr.AddReference("AcMgd")
clr.AddReference("AcCoreMgd")
clr.AddReference("AcDbMgd")
# Import references from AutoCAD
from Autodesk.AutoCAD.Runtime import *
from Autodesk.AutoCAD.ApplicationServices import *
from Autodesk.AutoCAD.EditorInput import *
from Autodesk.AutoCAD.DatabaseServices import *
from Autodesk.AutoCAD.Geometry import *
adoc = Application.DocumentManager.MdiActiveDocument
ed = adoc.Editor
with adoc.LockDocument():
with adoc.Database as db:
with db.TransactionManager.StartTransaction() as t:
try:
if not db.TileMode:
db.TileMode = True # Model space
# Define in UCS coordinates / units
centerpoint = IN[0] # list of [x , y] coordinates
width = IN[1] # int or float
current_view = ed.GetCurrentView()
# Just move view - no scale
if not width:
width = current_view.Width
ratio = current_view.Height / current_view.Width
current_view.Width = width
current_view.Height = width * ratio
current_view.CenterPoint = Point2d(0, 0)
current_view.Target = Point3d(*centerpoint, 0)
ed.SetCurrentView(current_view)
OUT = current_view.Width, current_view.Height, current_view.Target
except:
OUT = traceback.format_exc()
t.Commit()
Cool, Thanks.
Now I get a message that my Iron Python 2 package is not installed but when I go to install it I get a message that the package is already installed.
What should I do?
I add this line
command = "-qselect\nL\nC_POINTS_Setout Point\nEXPLODE\n\n"
but I don’t know why is asking me to drawn a line, where I can find a guide to learn how to use this method.
Where did you get it from?
It won’t work for you Because he A window appears
It is suppose that -qselect open qselect as a hide mode, I got it from chatGPT
I expected this
So I asked you
I’m still looking for learn how to do that what do you suggest me?
I do not know ,What do you do
without Example drawing
Want to explode points?
do before moving in layout
The problem with explode the points in the model is that when you return to the layout the orientation of the labels moves, this does not happen when you enter the viewport and explode them from there.