ILoveMadoka 发表于 2022-7-8 13:06:13

最佳方法?移动M中的对象

我在模型空间中有一个图形,有多个选项卡,多个视口都显示不同的视图,
模型空间中几何体的对象和比例。
我现在需要移动模型空间中的所有几何体。
我知道ALIGNSPACE,您可以在其中一次调整一个视口的对齐方式。。
由于模型空间移动会影响多个视口,是否有“快速”方法重新对齐所有视口
它们各自的几何形状?也许一下子就好了??
这一举动将影响他们彼此之间的“相对”关系。
我所有的搜索只返回如何从模型空间移动到图纸空间并返回
 
请告知

CyberAngel 发表于 2022-7-8 13:24:53

这取决于您有多少个视口以及它们的方向,但您可以为一个视口保存一个视图,并将其他视口设置为同一个视图。
 
这里有一个官方解释:保存并命名视图
 
首先创建视图,然后创建视口总是比较容易,因为当您可以预测未来时,可以更容易地布局平面。

BIGAL 发表于 2022-7-8 13:36:15

在模型中使用虚拟矩形是答案吗?然后只需阅读这些内容,并使视口在布局中匹配即可。我这样做是为了遵循道路设计的原则。

ILoveMadoka 发表于 2022-7-8 13:37:20

我将使用BIGAL方法。
我希望有更简单的方法。。
我有一个视图选项卡和7个视图选项卡,以及介于两者之间的所有内容。。。
ALIGNSPACE是我的朋友。。。
 
我不是第一个需要移动模型空间几何体并需要图纸空间视口跟踪几何体移动的人。。。
 
 
谢谢

BIGAL 发表于 2022-7-8 13:49:46

我主要从事土木工程,因此我们从未移动过我们使用UCS的模型,并将保存多个UCS,然后在视口中使用“UCS R名称”,这将具有扭曲等,然后设置比例。 
 
如果解锁视口并使用UCS OB,则可以快速设置扭曲。请注意不要拾取3d对象。

mhupp 发表于 2022-7-8 14:02:20

可能会提供一些帮助@ILoveMadoka
 
;;----------------------------------------------------------------------------;;
;; Creates Viewport outline and moves it to Model space
(defun C:VP2M (/ SS vp elist MiscOn cen c40 c41 LL UR)
(if (setq SS (ssget "_X" (list '(0 . "viewport") (cons 410 (getvar 'ctab)))))
    (foreach vp (vl-remove-if 'listp (mapcar 'cadr (ssnamex SS)))
      (setq elist (entget vp))
      (if (> (cdr (assoc '69 elist)) 1)            ; skip display viewport
      (progn
          (if (= (cdr (assoc '68 elist)) 0)          ; is viewport active?
            (progn
            (setq MiscOn 'NO)
            (vl-cmdf "._Mview" "_on" "_si" vp); activate viewport
            ); progn
            (setq MiscOn 'YES)
          )    ; if
          (setq cen (cdr (assoc '10 elist))
                c40 (cdr (assoc '40 elist)) ;length
                c41 (cdr (assoc '41 elist)) ;width
                LL (list (- (car cen) (/ c40 2)) (- (cadr cen) (/ c41 2)))
                UR (list (+ (car cen) (/ c40 2)) (+ (cadr cen) (/ c41 2)))
          )
          (vl-cmdf "_.Pspace")
          (vl-cmdf "_.Rectangle" LL UR)
          (vl-cmdf "_.Chspace" "_Last" "")
          (vl-cmdf "_.Pspace")
          (if (eq MiscOn 'NO)
            (vl-cmdf "_.Mview" "_off" "_si" vp); deactivate viewport
          )
      )
      )
    )
)
;(setvar 'Tilemode 1) ;go to model space
(princ)
 

nod684 发表于 2022-7-8 14:09:32

我不记得我从哪里得到这个口齿不清,但直到现在仍然在工作。
lisp文件所有者/作者的信用
 
(defun c:hvpo\u help()(提示符“\n\nhvpo Module”)(提示符“\n c:hvpo\u getXData”)(提示符“\n返回其拥有的模型空间视口数据”)(提示符“\n与之关联。”)(提示“\n c:hvpo\u help”)(提示“\n显示此帮助信息。”)(提示“\n c:hvpo\u ss”)(提示“\n设置图形比例的例程”)(提示“\n通过选择模型空间视口。”)(提示“\n没有助手将无法运行。”)(提示“\n c:hvpo\u sync”)(提示“\n在中同步视口的主例程”)(提示“\n使用模型空间视口对象绘制。”)(提示“\n(hvpo:viewPortToggle)”)(提示“\n在中切换视口层的例程”)(提示“\n图纸空间。没有辅助对象将无法运行。”)(prompt“\n”)(princ))(defun hvpo:viewPortToggle(/&vVpLayer&vCurLayer)(if(setq&vVpLayerTest(tblobjname“layer”“1\u Vport”)(progn(setq&vVpLayer(entget&vVpLayerTest))(if(=(cdr(assoc 70&vplayer))0)(progn(setq&vCurLayer(getvar“clayer”))(if(=&vCurLayer“1\u Vport”)(命令“-layer”“set”“0”“)(hlay:setLayerProperty“1\u Vport”“Freeze”“True”)(提示符“\n Viewport Off”)(progn(hlay:setLayerProperty“1\u Vport”“Freeze”“False”)(vlax invoke方法(vla get activedocument(vlax get acad object))“Regen”acAllViewports)(提示符“\n Viewport On”))(progn(提示符“\n No Viewport Layer”))(princ))(defun c:hvpo\u sync(/&vActLayout&vAcadDoc&vLayoutColl&vLayoutList&vCnt&vLayoutObj&vBlockColl&vCnt2&vBlockObj&vXdType&vXdData&vVpCheck&vCurlayer)(vl load com);;获取图形中的所有布局(提示“\n\n正在启动视口同步…”)(setq&vCurLayer(getvar“clayer”);;(hlay:setLayer“0”);;(hlay:setLayerProperty“1_Vport”“On”“True”);;(hlay:setLayerProperty“1_Vport”“Lock”“False”);;(hlay:setLayerProperty“1\u Vport”“Freeze”“False”)(命令“-layer”“s”“0”“)(if(=(tblsearch“layer”“1\u Vport\u MS”)nil)(progn(命令“-layer”“m”“1\u Vport\u MS”“c”1“p”“n”“”“lt“continuous)”)(progn(命令“-layer”“s”“1\u Vport\u MS”“c”1“p”“n”“”“lt“continuous”“”“on”“1\u Vport\u MS”“解冻”“解锁”“1\u Vport\u MS”“”)(setq&vActLayout(vla get activelayout(vla get activedocument(vlax get acad object)))(setq&vacadoc(vla get activedocument(vlax get acad object)))(setq&vLayoutColl(vla get layouts&vacadoc))(setq&vLayoutList nil)(setq&vCnt 0)(while(list&vXdData)))(提示“。”(if(=&gEntHandle&vtmHandle)(progn(setq&vObjFnd(+&vObjFnd 1))(setq&vReturn&vEnt))(setq&vCnt(+&vCnt 1))(提示(strcat“\n选择集计数”(vl princ to string(sslength&vSS1)))(提示(strcat)“\n找到的视口对象数”(vl princ to string&vObjFnd))(提示“未找到实体”)(如果(>=&vObjFnd 2)(progn(提示“错误…找到多个视口实体。”)(hvpo:deleteViewpPortAssociation_MSObject&gEntHandle)(setq&vReturn nil));;释放vl对象(if&vvlaint(vlax release object&vvlaint))和vReturn)(defun hvpo:deleteViewpPortAssociation\u MSObject(&gEntHandle/&vSS1&vCnt&vEnt&vvlaint&vXdType&vXdData&vtmHandle&vBlockColl&vBlockObj&vBlockName)(提示“\n清理过时或多个视口MS对象…”)(setq和vSS1(ssget“_X”'((0。“INSERT”)(-3(“ViewPortAssociation”))(if和vSS1(progn(setq和vCnt 0)(while(vla object和vEnt))(vlax invoke方法和vvlaint“GetXData”“ViewPortAssociation”'和vXdType'&vXdData)(setq和vtmHandle(vlax variant value(nth 1(vlax safearray->list和vXdData)))(if(=&vEntHandle&vtmHandle)(vlax invoke method&vvlant“Delete”)(setq&vCnt(+&vCnt 1)))(提示“\n删除块”)(setq&vBlockColl(vla get blocks(vla get activedocument(vlax get acad object)))(setq&vCnt 0)(while(vla object&gMsBlockObj))(vlax invoke method&vvlant“GetXData”“ViewPortAssociation”'和vXdType'&vXdData)(setq和vBlockObj(vlax ename->vla object和gMsBlockObj))(if和vXdData(progn(setq和vMsVpScale(vlax variant value(vlax safearray get element和vXdData 3))(setq和vMsVpHeight(vlax variant value(vlax safearray get element和vXdData 4))(setq和vMsVpWidth(vlax variant value(vlax safearray get element和vXdData 5))))(setq和vBlockObjIns(vlax get property和vBlockObj“InsertionPoint”))(setq&vVp(vlax ename->vla object&gvppent))(setq&vPsVpHeight(vlax get property&vvpp“height”)(setq&vPsVpWidth(vlax get property&vvpp“width”)(setq&vScaleRatio(vlax get property&vvpp“CustomScale”)(setq&vvppscale(/1(vlax get property&vvpp“CustomScale”)))(提示(strcat“\n视口比例:”(rtos&vScaleRatio 2)“宽度:”(rtos&vPsVpWidth 2)“高度:”(rtos&vPsVpHeight 2))(提示符(strcat“\n ModelSpa Scale:”(rtos&vMsVpScale 2)“宽度:”(rtos&vMsVpWidth 2)“高度:”(rtos&vMsVpHeight 2))(vlax put property&vacadoc“MSPACE”“False”)(vlax invoke方法(vlax get acad object)“ZoomExtents”)(if(and(=(*(*&vPsVpHeight&VvspScale)和vMsVpHeight)(=(*&VpspWidth&VvspScale)和vMsVpWidth))(progn;;如果视口高度和宽度匹配,则更新视口视图。(vlax put property&vVp“DisplayLocked”:vlax False)(vlax invoke method&vVp“Display”:vlax true)(vlax put property&vVp“viewporton”:vlax true)(vlax invoke method&vVp“update”)(vlax put property&vAcadDoc“MSPACE”“true”)(vla put activepviewport&vacadoc&vVp)(vlax invoke方法(vlax get acad object)“ZoomCenter”和vBlockObjIns 1)(vlax put property和vVp“CustomScale”和vScaleRatio)(vlax put property和vAcadDoc“MSPACE”“False”)(vlax put property和vVp“DisplayLocked”:vlax True))(progn;;如果视口高度和宽度不匹配,则删除ms视口并重新创建它。(hvpo:deleteViewpPortAssociation\u MSObject)(vlax get property和vVp“handle”)(hvpo:addViewPortAssociation\u MSObject和gVpEnt));;释放vl对象(if&vacadoc(vlax release object&vacadoc))(if&vvlaint(vlax release object&vvlaint))(if&vBlockObj(vlax release object&vBlockObj))(if&vVp(vlax release object&vVp))(princ))(defun hvpo:addViewPortAssociation\u MSObject(&gVpEnt/&vvlaint&vEntHandle&vXdType&vXdData&vCnX&vCnY&vVpScale&vWidth&vHeight&vBlockName&vSS1&vEnt&vvlaint&vBlockColl&vCnt&vBlockObj&vNewBlock&vX1&vX2&vY1&vY2&vArrObj&vPts&vCurLayer&vNewLine&vModelSpace&vNewBlockObj&vXdType2&vXdData2)(提示“创建视口链接…”);;(setq和vSS1(ssget“_X”(list(cons 0“INSERT”)(cons 2和vBlockName)(cons-3“viewportassociation”))(setq和vvlaint(vlax ename->vla object和gVpEnt))(setq和vEntHandle(vlax get property和vvlaint“Handle”)(vlax invoke方法和vvlaint“GetXData”“”、“vXdType”和vXdData)(setq和vCnX(vlax variant value(vlax safearray get element和vXdData 8))(setq和vCnY(vlax variant value(vlax safearray get element&vXdData 9))(setq&vVpScale(/1(vlax get property&vVlaent“CustomScale”))(setq&vWidth(*(vlax get property&vVlaent“width”)&vVpScale))(setq&vHeight(*(vlax get property&vVlaent“height”)&vVpScale))(setq&vBlockName(strcat“ViewPortAssociation\u MSObject_u“&vEntHandle))(setq&vSS1(ssget“_X”(list(cons 0“INSERT”)(cons 2&vBlockName)))(如果找到一个或多个具有该名称的块(progn;;删除绘图中具有该名称的所有对象(而不是(=(sslength&vSS1)0))(setq&vEnt(ssname&vSS1 0))(setq&vvlaint(vlax ename->vla object&vEnt))(vlax invoke method&vvlaint“delete”)(ssdel&vEnt&vSS1)      )    )    ;;删除块定义(如果存在)。
页: [1]
查看完整版本: 最佳方法?移动M中的对象